闲聊!谈谈目标检测中对坐标进行预测的相关问题~

闲聊!谈谈目标检测中对坐标进行预测的相关问题~

今天,在刷zh的时候,偶然看到了一篇blog,直接上图~
闲聊!谈谈目标检测中对坐标进行预测的相关问题~_第1张图片

https://www.zhihu.com/question/304307091?sort=created

(我省略了作者的信息了~若侵权,请联系我删除)

一、问题

刷到这条blog,我很高兴!因为在我deep learning的学习过程中,也一直有这样的问题。我一眼就能看懂作者的意思,他的想法就是:为什么我喂进了一张待预测的图片到训练好的网络中,网络输出的就是最终的预测结果。就比如说吧,现在是yolov3,已经经过训练好的哦,我现在喂进了一张448 * 448的待预测图片,只要看过原论文的人都知道,网络会生成三个预测head:P1,P2,P3,现在就假设P1的维度是(1,20,20,36),其中1表示batch_size,20表示P1的feature map的大小,36表示feature map每个anchor所产生的3个锚点框经过网络经过调整之后的预测框所包含的信息(1 + 4 + 7)。就比如说(1,3,4,)中的36个数字,为什么前12个数字表示在这张feature map中第(3,4)个锚点所生成的第一个预测框的信息?又为什么12-24个数字表示在这张feature map中第(3,4)个锚点所生成的第二个预测框的信息?最后12个数字也是一样的道理。

二、自己的看法

我先说说自己的想法,为了好看,我就分条进行解释。

1.首先呢,我想说一下,其实深度学习的本质其实就是y = a * x + b,现在可以理解为x表示的是图片本身,y表示图片中目标的位置信息。而网络训练其实就是训练其中的a和b,经过大量的数据进行训练,a和b就能够让新进入的x生成y,也就是能够得到待预测图片中目标的位置信息。

2.第一条中我其实并没有直面回答作者的问题,但是我认为这点还是有必要说清楚的。我现在来回答作者的问题:在1中训练的时候,x我用的就是前12个数字表示在这张feature map中第(3,4)个锚点所生成的第一个锚点框,12-24个数字表示在这张feature map中第(3,4)个锚点所生成的第二个锚点框的信息,12-24个数字表示在这张feature map中第(3,4)个锚点所生成的第三个锚点框的信息。那么,我对于新的x,肯定也会生成跟我之前训练的数据格式一样的信息啊~

三、还有一个问题

在这篇blog中,我还看到了一些评论:为什么不直接对坐标进行回归, 非要对坐标的偏移量作为标签,然后对其进行回归呢?
我看到有一条评论写的已经很全了:
yolo v1直接预测x, y, w, h,计算坐标loss使用平方差,yolo v1对w, h取了平方根,但是直接预测真实框的坐标值会导致定位不准确,原因是:假设这个loss为1,loss看起来很低,但是对于小框而言,轻微的坐标数值上的偏移,导致视觉上极大的预测偏差,假设这个loss为10,loss看起来很大,但是对于大框而言,很高的坐标数值上的偏移,导致视觉上很小的预测偏差,一句话总结:直接预测真实坐标所产生的loss并不能真正反映预测框的好坏(yolo v1对w, h取了平方根,可以有效缓解这个问题,但是并不能解决这个问题)
闲聊!谈谈目标检测中对坐标进行预测的相关问题~_第2张图片
上图中,红色的大的锚点框与其对应的预测框,就对框的左上角的坐标进行回归,要是用坐标直接回归,黑色笔部分其实就是直接的差值,蓝色的小的锚点框与其对应的预测框,同样都是相同距离的偏移,但是很明显就能看到,小框就有很大的偏移,而大的框却只有很小的框~所以一般都用偏移量作为标签进行回归。

你可能感兴趣的:(目标检测,目标检测--小细节问题,深度学习,python,人工智能,网络,机器学习)