参考https://zhuanlan.zhihu.com/p/96856635(其中原因解释合理,但公式推导有待商榷)
在设置GT box的heat map的时候,我们不能仅仅只在top-left/bottom-right的位置设置标签(置为1),因为你看下图,其中红色的bbox为GT框,但是绿色的框其实也能很好的包围目标。所以如果在检测中得到想绿色的这样的框的话,我们也给它保留下来。甚至说的更普遍一些,只要预测的corners在top-left/bottom-right点的某一个半径r内,并且其与GTbox的IOU大于一个阈值(一般设为0.7),我们将将这些点的标签不直接置为0,那置为多少呢?可以通过一个温和的方式来慢慢过渡,所以采用二维的高斯核未尝不可。(对于centernet一样)
可以通过一个温和的方式来慢慢过渡,所以采用二维的高斯核未尝不可。
那问题现在就变成了如何确定半径r,使得IOU与GT box大于0.7的预测框不被直接阉割掉。
注 : 1 下面贴出的是改进的确定高斯半径的公式。先是推导出圆形高斯图的半径,再利用最小的圆形高斯图的半径推导出椭圆高斯图的半长轴和半短轴; 2 对于上面参考链接中推导的公式(也是官方代码中的公式)为什么有待商榷,下面参考链接前面部分进行了解释。
参考https://github.com/princeton-vl/CornerNet/issues/110 用这里确定的r2来画高斯图,结果是个圆形,对于长宽相似的可以,但对于长宽差距较大的(如下图),就不合适。因为,对于边界框是下面形状的目标,显然在满足IOU=0.7的条件下,中心点沿长边可取的范围比沿短边可取的范围要大的多。 所以,高斯图应该是个椭圆(oval),一个轴(指椭圆长轴或短轴)控制关键点在一个方向上(边界框长边方向或短边方向)的移动; 由上面已推断出,选高斯半径r2,则椭圆的两个轴都按r2算 上图中,对于a、b两轴都有,σa =a/3 , σb = b/3是因为(μ−3σ,μ+3σ)范围的面积占高斯曲线下总面积占99.7%,一般3σ外的数值已接近于0,可忽略,所以一般取半径为3σ,所以知道半径,即可退出σ。 参考https://www.cnblogs.com/shine-lee/p/9671253.html
确定椭圆高斯图具体步骤 (1)get r , r = min(r1、r2、r3) (2)get a and b (3)change the gasssian function , 代码如下