- 论文: https://arxiv.org/pdf/1904.00853v3.pdf
- 代码: https://github.com/eg4000/SKU110K_CVPR19
使用场景
densely packed scenes,图片中包含很多物体,看起来相似甚至一样,位置非常接近。如超市货架,交通,城市景观。
难点
位置非常接近的相似物体的bounding box预测不准,容易重叠
本文贡献
- Soft-IoU layer, 增加估计物体和ground true的iou的层,输出Soft-IoU scores
- EM-Merger unit, 转化检测结果和soft-iou socre到混合高斯模型, 这是解决overlappings
- SKU-110K 数据集
网络结构
Soft-IoU layer
Testing时,soft-IoU输出的是detection和未知的true box的IoU, Training时,对于每个predicted bbox, 取距离(中心距离?)最近的annotated box来算IoU。
I
o
U
∈
[
0
,
1
]
IoU \in [0,1]
IoU∈[0,1], 用于判断二者是否重合,该文用binary cross-entropy loss来学习它,将它和另外2个检测head的loss相加得到总loss。(n是一个batch内的标注框数量?)
Objectness score最高的框,它和物体的边界对的不一定是最准的,所以文章认为Objectness score被训练得,和bbox偏移多少遮挡多少无关, 需要Soft IoU可以作为bbox的补充属性。
EM-Merger unit for inference
EM-Merger的作用类似nms, 方法类似kmeans聚类。它有几个步骤
- 将网络输出的bbox转为二维(图片的横纵维度)高斯分布:bbox i的中心
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)是高斯分布的中心,
[
(
h
i
/
4
)
2
,
0
;
,
0
,
(
w
i
/
4
)
2
]
[(h_i/4)^2,0;,0,(w_i/4)^2]
[(hi/4)2,0;,0,(wi/4)2]是协方差矩阵。一张图片上的所有bbox就可以表示成一个混合高斯分布,
- 很多bbox是重叠的,同样很多高斯分布也是重叠的,问题就转化成了如何用更少的高斯分布组成的混合高斯分布去表示原本的混合高斯分布,且尽量相似。即原本有N个高斯分布(N个BBox)组成混合分布,目标是用K(K<<N)个新的高斯分布组成新的混合分布,且足够相似, 那么这K个高斯分布再转回BBox, 就是最终的predictions. 这里选择kl散度来描述二者的相似性(距离)
- 本文选择用EM算法来求这K个高斯分布,类似kmeans聚类。通过不断排除距离最近的一对高斯分布,直到剩余K个作为初始的类簇中心。E步:为N个分布,都赋予距离最近的类簇。M步:将每个类簇的高斯分布通过式(10)融合为一个高斯分布(我理解下面的
π
(
i
)
\pi(i)
π(i)表示分布i所属的类簇,
π
−
1
(
j
)
\pi^{-1}(j)
π−1(j)表示类簇j包含的高斯分布)。重复直到上面是式(8)的
d
(
f
,
g
)
<
1
−
10
d(f,g)<1^{-10}
d(f,g)<1−10,文中说一般10次迭代可收敛.这里K的取值像是用所有高斯分布的轮廓(代码里是将混合高斯分布的概率值填充到heatmap上,minmax归一化到0-255范围,过滤4以下的值为0再用opencv求轮廓)的面积除以所有BBox面积的中位数。
- 最后将收敛后的K个高斯分布转成BBox. 这个是过程是无监督的,不参与训练。这部分是在CPU上做的,速度还挺慢,但效果是挺好的。