本文讨论或者复习一下目前最流行的深度学习目标检测算法的坐标回归方式,注意,本文讨论的是anchor-based,至于anchor-free的方法,每一种anchor-free各自对应一种后处理,咱们这边就不详细讨论了。
一、常用的faster rcnn、retinanet、ssd等cls+reg head类型。
总体来说,根据anchor来提供初始坐标,然后利用anchor的初始值去回归线性变化时的参数(偏移值和尺寸值),最后将这些参数配合固定anchors成为具体的坐标,细节如下:
1、回顾anchor是怎么在这些网络中运作生成的。
整体流程简单,如下代码(细节下文详细给出):
anchors的生成需要参数如下:base_size-用来生成基础anchors, rations-长宽比参数, scales-面积比参数,基于以上3组数据,在每一层的feature-map上生成密密麻麻的anchors。
首先,利用base_anchor的值生成基础anchor,我们通常设定为16,则直接回生成一个[0,0, 15, 15]的矩形。
然后,将上述anchor进行坐标变化,变换成中心点与宽高的形式,也就是[xmin,ymin, xmax,ymax]转换成[w,h,x_center,y_center],则[0,0,15,15]变成[16,16,7.5,7.5 ]。
进一步,此时,利用w和h对矩形计算面积,此时的面积为base_anchor的面积,利用这个面积除以rations,则可以得到不同的面积数组,如size=16*16时,rations=[0.5, 1, 2],则面积的list为[512,256,128],然后将面积的list进行开平方,得到ws,将ws*rations得到hs,则3个ws有3个hs,则每个中心点有[x_center,y_center,ws