您的位置:首页 > 其它

Yolov3目标检测边框预测详解

2018-11-15 22:07 3283 查看
版权声明:转载请注明出处,谢谢合作 https://blog.csdn.net/qq_34199326/article/details/84109828

我们读yolov3论文时都知道边框预测的公式,然而难以准确理解为何作者要这么做,这里我就献丑来总结解释一下个人的见解,总结串联一下学习时容易遇到的疑惑,期待对大家有所帮助,理解错误的地方还请大家批评指正,我只是个小白哦,发出来也是为了与大家多多交流,看看理解的对不对。

边框预测公式如下:

其中,Cx,Cy是grid cell的左上角坐标,在yolov3中每个grid cell长宽均为1。如下图的情形时,这个bbox边界框的中心属于第二行第二列的grid cell,它的左上角坐标为(1,1),故Cx=1,Cy=1.公式中的Pw、Ph是预设的anchor box的长和宽。

最终得到的边框坐标值是bx,by,bw,bh即边界框bbox相对于feature map的位置和大小,是我们需要的预测输出坐标。但我们网络实际上的学习目标是tx,ty,tw,th这4个offsets,其中tx,ty是预测的坐标偏移值,tw,th是尺度缩放,有了这4个offsets,自然可以根据之前的公式去求得真正需要的bx,by,bw,bh4个坐标。至于为何不直接学习bx,by,bw,bh呢?因为YOLO 的输出是一个卷积特征图,包含沿特征图深度的边界框属性。边界框属性由彼此堆叠的单元格预测得出。因此,如果你需要在 (5,6) 处访问单元格的第二个边框,那么你需要通过 map[5,6, (5+C): 2*(5+C)] 将其编入索引。这种格式对于输出处理过程(例如通过目标置信度进行阈值处理、添加对中心的网格偏移、应用锚点等)很不方便,那么这样就只需要求偏移量,也就可以用上面的公式求出bx,by,bw,bh,反正是等价的。

那么这4个坐标tx,ty,tw,th是怎么求出来的呢?

对于训练样本,需要用到grandtruth的真实框来求这4个坐标:

 Gx、Gy、Gw、Gh自然就是grandtruth的4个坐标了,Px,Py在这里就是Cx,Cy,实际上放在其他论文里是预设的anchor box的中心点坐标。 Pw、Ph是预设的anchor box的长和宽。

用x,y坐标减去anchor box的x,y坐标(或减去grid cell左上角坐标Cx,Cy)得到偏移量好理解,为何要除以anchor box的宽和高呢?我认为可能是为了把绝对尺度变为相对尺度,毕竟作为偏移量,不能太大了对吧。而且不同尺度的anchor box如果都用Gx-Px来衡量显然不对,有的anchor box大有的却很小,都用Gx-Px会导致不同尺度的anchor box权重相同,而大的anchor box肯定更能容忍大点的偏移量,小的anchor box对小偏移都很敏感,故除以宽和高可以权衡不同尺度下的预测坐标偏移量。

tw和th是物体所在边框的宽高度和anchor box宽高度之间的比率,而且尺度缩放到对数空间,是怕训练会带来不稳定的梯度,而且有了对数才能说有非线性的尺度缩放了嘛。

有了平移(tx,ty)和尺度缩放(tw,th)才能让anchor box与grand truth(预测时是bbox边界框)重合,如下图所示。

边框回归最简单的想法就是通过平移加尺度缩放进行微调嘛。

那么训练时用的groundtruth的4个坐标去做差值和比值得到tx,ty,tw,th,测试时就用预测的bbox就好了,公式修改就简单了,把Gx和Gy改为预测的x,y,Gw、Gh改为预测的w,h即可。

网络可以不断学习tx,ty,tw,th偏移量和尺度缩放,预测时使用这4个offsets求得bx,by,bw,bh即可,那么问题是:

这个 公式tx,ty为何要sigmoid一下啊?用sigmoid将tx,ty压缩到[0,1]区间內,可以有效的确保目标中心处于执行预测的网格单元中,防止偏移过多。举个例子,我们刚刚都知道了网络不会预测边界框中心的确切坐标而是预测与预测目标的grid cell左上角相关的偏移tx,ty。如13*13的feature map中,某个目标的中心点预测为(0.4,0.7),它的cx,cy即中心落入的grid cell坐标是(6,6),则该物体的在feature map中的中心实际坐标显然是(6.4,6.7).这种情况没毛病,但若tx,ty大于1,比如(1.2,0.7)则该物体在feature map的的中心实际坐标是(7.2,6.7),注意这时候该物体中心在这个物体所属grid cell外面了,但(6,6)这个grid cell却检测出我们这个单元格内含有目标的中心(yolo是采取物体中心归哪个grid cell整个物体就归哪个grid celll了),这样就矛盾了,因为左上角为(6,6)的grid cell负责预测这个物体,这个物体中心必须出现在这个grid cell中而不能出现在它旁边网格中,一旦tx,ty算出来大于1就会引起矛盾,因而必须归一化。

 看最后两行公式,tw为何要指数呀,这就好理解了嘛,因为tw,th是log尺度缩放到对数空间了,当然要指数回来,而且这样可以保证大于0。 

记feature map大小为W,H(如13*13),可将bbox相对于整张图片的位置和大小计算出来(使4个值均处于[0,1]区间内)约束了bbox的位置预测值到[0,1]会使得模型更容易稳定训练(如果不是[0,1]区间,yolo的每个bbox的维度都是85,前5个属性是(Cx,Cy,w,h,confidence),后80个是类别概率,如果坐标不归一化,和这些概率值一起训练肯定不收敛啊)

只需要把之前计算的bx,bw都除以W,把by,bh都除以H。即

如果将这4个值分别乘以输入网络的图片的长和宽(如416*416)就可以得到bbox相对于坐标系(416*416)位置和大小了,但实际上这仍然不是原图的bbox坐标,因为原图是要reshape成416*416的。

原图按照纵横比例缩放, 取 min(w/img_w, h/img_h)这个比例来缩放,保证长的边缩放为需要的输入尺寸416,而短边按比例所放不会失帧,w,h是原图尺寸768,576, 缩放后的尺寸为new_w, new_h=416,312.如图所示:

剩下的灰色区域用(128,128,128)填充即可构造为416*416。

知道了这些,就知道要将相对于输入网络图片(416x416)的边框属性变换成原图按照纵横比不变进行缩放后的区域的坐标(416*312)。 应该将方框的坐标转换为相对于填充后的图片中包含原始图片区域的计算方式。

具体见下面的代码,很详细地解释了如何做到,代码中scaling_factor = torch.min(416/im_dim_list,1)[0].view(-1,1) 即416/最长边,得到scaling_factor这个缩放比例。

[code]#scaling_factor*img_w和scaling_factor*img_h是图片按照纵横比不变进行缩放后的图片,即原图是768x576按照纵横比长边不变缩放到了416*372。
#经坐标换算,得到的坐标还是在输入网络的图片(416x416)坐标系下的绝对坐标,但是此时已经是相对于416*372这个区域的坐标了,而不再相对于(0,0)原点。
output[:,[1,3]] -= (inp_dim - scaling_factor*im_dim_list[:,0].view(-1,1))/2#x1=x1−(416−scaling_factor*img_w)/2,x2=x2-(416−scaling_factor*img_w)/2
output[:,[2,4]] -= (inp_dim - scaling_factor*im_dim_list[:,1].view(-1,1))/2#y1=y1-(416−scaling_factor*img_h)/2,y2=y2-(416−scaling_factor*img_h)/2

其实代码的含义就是把y1,y2减去上图灰色部分,y1=y1-(416-416/768*576)/2,把x1,x2,y1,y2的坐标系换算到了针对实际红框的坐标系(416*312)下了。这样保证bbox不会扭曲,

既然得到了这个坐标,就可以除以scaling_factor 缩放至真正的测试图片原图大小尺寸下的bbox实际坐标了,大功告成了!!!  

这里解释一下confidence是什么,Pr(Object) ∗ IOU(pred&groundtruth).

如果某个grid cell无object则Pr(Object) =0,否则Pr(Object) =1,则此时的confidence=𝐼𝑂𝑈 ,即预测的bbox和ground truth的IOU值作为置信度。因此这个confidence不仅反映了该grid cell是否含有物体,还预测这个bbox坐标预测的有多准。在预测阶段,类别的概率为类别条件概率和confidence相乘:

Pr(Classi|Object) ∗ Pr⁡(Object) ∗ IOU(pred&groundtruth) = Pr(Classi) ∗ IOU(pred&groundtruth)

这样每个bbox具体类别的score就有了,乘积既包含了bbox中预测的class的概率又反映了bbox是否包含目标和bbox坐标的准确度。

 

以上都是纯手打,很累,,,很多都是积攒已久的疑惑,期待这些解释能够帮助大家,期望大家多谈谈自己的见解。

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: