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。
- YOLO入门教程:YOLOv1(2)-浅析YOLOv1
- Understanding a Real-Time Object Detection Network: You Only Look Once (YOLOv1)
参考
-
Yolo 幻灯片
18年复现代码的时候,没少看这个幻灯片 -
图解YOLO
作者结合了《YOLO 幻灯片》,做了解析,在18年的时候,是非常不错的解析资料 -
Real-time Object Detection with YOLO, YOLOv2 and now YOLOv3
18年自己复现yolov1,yolov2的时候,看得就是这篇文章,中文解析缺少的情况下,文章的图示做的很清晰,思路很好,建议多读读。 -
YOLO入门教程:YOLOv1(2)-浅析YOLOv1
作者很好的解析了Yolo系列的论文,同时自己也做了代码复现,改进,是好的学习资料。yjh0410 作者本人的github地址
作者另外还写了关于目标检测系列的文章 目标检测系列 -
Understanding a Real-Time Object Detection Network: You Only Look Once (YOLOv1)
原汁原味的yolov1,解析。 -
你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (上)
作者从葫芦娃入手,详细的解析yolo系列的原理,手工mark代码,注意不是原汁原味的yolo,而是经过作者加工,基于yolo的原理演变出来的文章,
是一个由简入繁的文章,不仿看看,平时多读读,多思考。