YOLOv1 沉思录

YOLOv1 沉思录

问题1:
为什么计算BBox-loss和class-loss时,只考虑正样本?负样本怎么办?

答:
BBox-loss和class-loss时,只考虑正样本,有点类似Faster RCNN中的RCNN部分,从RPN出来,只用正样本去计算RCNN部分的loss。
yolov1设置了一个参数 置信度objectness,用于检测前景或者背景,这个参数,就是平衡正样本和负样本的关键。

问题2:
为什么B(B=2)个预测框呢?

问题3:
如何确定正样本和负样本?
Yolov1中,把一张图划分为7x7个 grid cell(称之为格子),包含物体目标中心的格子,标记为正样本,反之为负样本。

问题4:预测框和GT框的IOU之间的关系?
yolo系列里面,只有正样本会去计算bbox和class的loss,负样本不考虑.
Pr(objectness)置信度的target值取1/0, 或者取预测框和GT框的IOU / 0, 1或者IOU代表正样本,0代表负样本。 这个地方和作者一样,觉得取1就可以了; 但论文是取IOU,导致后面有很多难以理解的细节,特别头疼。
Understanding a Real-Time Object Detection Network: You Only Look Once (YOLOv1)
这个文章的解析,取IOU,可以让模型学习更切合实际。
在这里插入图片描述

预测框和GT框的IOU,有2个用途:
第一,预测框有2个,但真实框只有一个,所以计算bbox loss只能选一个,怎么选? 取IOU最大的框
第二,作为置信度的GT值,

问题5:
Pr(objectness)置信度,在预测时,怎么用?
论文中所说的Pr(objectness)=1,以现在的技术角度来看,就是指“正样本”。
首先要清楚一点,YOLO一共有三个预测:objectness、class、bbox。其中,objectness是一个二分类,即有物体还是无物体,也就是“边界框的置信度”,对应loss函数中的那个“C”,没物体的标签显然就是0,而有物体的标签可以直接给1,也可以计算当前预测的bbox与gt之间的IoU作为有物体的标签,注意,这个IoU是objectness预测学习的标签,和YOLO没关系。class就是类别预测,只有正样本处的grid cell才会被训练(也就是Pr(objectness)=1的地方,注意,这个Pr(objectness)=1就是指正样本的地方,和IoU没关,和YOLO没关,只和label有关,因为gt box的中心点落在哪个grid,哪个grid就是正样本,也就是Pr(objectness)=1)。bbox也是同理。

在测试阶段,YOLO一共会输出三个预测,是否有物体的objectness预测、class预测和bbox预测。首先,我们计算score=objectness*class作为每个边界框的得分score,论文中写的Pr(class)*IoU其实就是这个,这个IoU就是objectness预测,因为objectness在训练过程中的正样本标签就是IoU,所以可以认为objectness隐含了IoU的概念,但本质就是有无物体的预测。

不要忘记,objectness在训练过程中已经学会了判断每个grid cell是否有物体,那么,显然,对于有物体的地方,objectness会很接近1,class的准确预测也应该会很接近1,没有物体的地方,objectness会很接近0,class则瞎预测,毕竟它在训练阶段只计算有物体部分的class损失,不过很明显objectness会起到主导作用,即使class瞎预测了一个很接近1的值,objectness知道这里没有物体,因此会给个接近0的值,则score就很接近0了。

问题6:
如何计算正样本的c,x,y,w,h,这是每个目标检测论文里面,都想急迫脑子想思考的的问题,因为涉及到loss计算以及最后得到预测框(像手工标注那种框)
c代表置信度,上面已经说了

来看看x,y,w,h
x,y, 是相对格子的偏移量,取值在(0,1)。
w,h是相对整个图,归一化。 注意预测的时候,w,h有可能超出图,所以,有可能大于1。

参考

猜你喜欢

转载自blog.csdn.net/u010006102/article/details/126866631
今日推荐