yolo 负样本_全监督检测之YOLO

最近大半年一直在准备论文,没有时间更新。最近论文投了打算来回顾一下经典的目标检测论文。之后会写一些弱监督检测的介绍,为了与弱监督检测区分,这里把所有使用包围盒标注的检测算法都叫做全监督检测算法。

说YOLO之前,先简单回顾一下经典的RCNN系列,RCNN系列方法都是先产生propoosals,然后提取proposals的特征之后利用特征来预测proposals是目标的概率以及对proposals进行修正。RCNN直接把proposals切割下来然后利用CNN提取特征,fast-RTCNN通过roi-pooling直接从共享的feature-map上得到proposals的特征,大大提升了检测速度。faster通过RPN先来生成数量更精确数量更少的proposal.能够进一步提升检测速度和精度。但是提取proposals特征的过程终究还是很耗时。YOLO没有region proposals的生成和特征提取过程,而是直接将图片划分成S*S的格子,然后直接在格子的基础上回归到目标框。每个格子会预测B个框的(x,y,w,h,confidence)五个个值,以及一个C类的分类置信度。也就是网络一共输出 (S*S)*(B*5+C)维的一个tensor。在VOC数据集中,S为7,B为2, C为20。所以最后的输出为7*7*30。这些输出通过在最后的feature-map之后通过两个全连接层可以直接拿到,所以网络速度非常快.

下面将会按照YOLO的训练过程,YOLO的预测过程以及自己的一些理解的过程叙述。
1.YOLO的训练
以VOC数据集举例,YOLO会把图像分为7*7的grid,网络输出每个grid cell中2个bounding box的坐标和置信度,同时每个grid cell还会预测20类的分类置信度。这样最后的输出就是7*7*30维。训练过程中最重要的就是确定这些输出值的回归目标,以及loss的计算方法。
1.1 gt assignment
训练网络时,首先要确定gt assignment ,也就是 每个ground-truth框由哪一个bounding box负责,反过来说就是每个bounding box的训练目标到底是什么,确定了训练目标之后,才能计算loss训练网络。不是每一个bounding box的预测值都会参与求loss的过程。假设一共有K个ground-truth,有7*7个grid cell,每个cell会预测出两个bounding-box.在yolo中,每个ground-truth只会assign给一个bounding box,如果gt的中心落在某个cell中,那么这个gt将会assign给cell中和gt IOU比较大的bounding-box。也就是
1)根据ground-truth的中心来选择grid-cell,
2)根据选中的grid-cell中和ground-truth IOU比较大的一个bounding box.
选出来的和ground-truth绑定的bounding box,在训练时就会当做正样本来计算位置回归的损失。这一点和RCNN系列是一样的,RCNN系列也会通过和ground-truth的IOU来选取一些proposals作为正样本,同样在计算位置回归损失时,只考虑采样出来的正样本的损失。
1.2 输出值的意义及其回归目标
之前说了,在YOLO中,针对每个grid-cell,网络会输出两个bounding box的位置信息预测(x,y,w,h)和bounding box的置信度。和RCNN类似,位置信息预测(x,y,w ,h)的回归目标都是经过归一化的值。中心位置(x,y)的回归目标实际上是相对于grid-cell左上角的偏移值,用grid-cell的size对其进行归一化,长宽(w,h)的回归目标也是图像的长宽进行了归一化。这样这四个值理论上来说都是0到1之间。置信度的回归目标是一个条件概率Pr(Object)*IOU(truth,pred),当gt assign给某个bounding box时,Pr(Object) =1,预测值就是bounding-box和这个gt的IOU,否则Pr(Object)为0,这个值就是0。此外每个grid-cell还会预测一个20维的分类置信度,如果某个类的中心落在这个cell中,那么对应的这个类的分类置信度就是1,否则为0.
1.3 Loss的计算

yolo将目标检测看做回归问题,所有的loss都采用均方误差。公式中的
从上往下看loss一共分为五项,其中前两项是位置回归loss,后面两项是正负样本bounding box的置信度的loss,最后一项是每个cell的分类loss。
位置回归Loss包括中心点和长宽两项,位置回归Loss只考虑和ground truth绑定的bounding box,也就是

boudingbox 置信度loss的包括正样本(
cell的分类损失,因为分类损失中不包含背景类,这里同样只计算中心点落在其中的cell的分类损失。
3.Inference
输出包含每个grid cell两个bounding box的坐标预测和置信度预测,以及每个grid cell的分类置信度。最后每个框的得分通过将框的置信度和cell的分类置信度相乘得到

坐标预测要按照grid cell的位置和图片的大小变换到实际的坐标和尺寸。最后在所有结果上进行NMS就能得到最后的输出。
只是粗略的看了一下YOLO的论文,没有看过具体的代码实现,上述内容掺杂了自己的理解,如果有错,希望大家多多指正。
另外,看完论文还有一个疑惑,YOLO不像RCNN和SSD,RCNN对于所有proposals 使用的是相同的回归器和分类器,SSD也是通过卷积操作共享了回归器和分类器,而YOLO没有一个统一的回归器,而是通过两个全连接层直接得到各个bounding box的预测值,这样做的好处在于可以让每一个预测都来自于全图的特征,不会受到卷积感受野或者roi-pooling这样提取局部特征的方法的限制,但是我理解这种情况下每个位置的bounding box的检测器参数都是不同的,训练时,只有出现过目标的位置的参数得到了训练,那么如果在测试数据里,目标出现在训练集里没出现过的位置上,这个位置的网络参数还能检测出物体吗?
更多推荐

所有评论(0)