关于目标检测中GroundTruth跟Prior_box之间匹配问题个人理解心得
- GroundTruth
gt表示每张图片中真实存在的目标框,目标框的内容形式为[x1, y1, x2, y2],整个gt的shape为[Num, 4],其中Num表示该图片中存在目标的个数。
- prior_box表示网络结构中根据自定义的anchor生成机制(anchor生成个数由size和ratio决定),最后将多特征图上每一层生成的anchor合并成[N, 4]shape, 其中N表示所有anchor的总和,==但是,此时anchor的内容形式为[centr_x, centr_y, w, h],因此,再进行后面Overlap计算时,要先将所有的anchor进行转换。
- 利用jaccard.py脚本即可计算gt与所有prior_box之间的IOU, 代码如下:
inter = intersect(box_a, box_b)
area_a = ((box_a[:, 2]-box_a[:, 0]) *
(box_a[:, 3]-box_a[:, 1])).unsqueeze(1).expand_as(inter) # [A,B]
area_b = ((box_b[:, 2]-box_b[:, 0]) *
(box_b[:, 3]-box_b[:, 1])).unsqueeze(0).expand_as(inter) # [A,B]
union = area_a + area_b - inter
overlap = inter / union
return overlap
其中overlap最后的shape大小为[Num, N]