目前目标检测领域的深度学习算法主要分为两类:two stage的目标检测算法,以R-CNN系列为代表;one  stage 的目标检测算法,以YOLO系列为代表。前者是先由算法生成一系列的样本候选框,再通过卷积神经网络进行样本分类;而后者直接将目标边框定位问题转化为回归问题进行处理。前者在检测准确率和定位精度上占优,后者在算法速度上具有很大优势。

相对于R-CNN系列的看两眼(候选框提取与分类),YOLO只需要Look Once.

下面进行YOLOv1论文的解读

1、YOLOv1基本思想

YOLO的核心思想就是将目标边框定位问题转化为回归问题,利用整张图作为网络输入,直接在输出层回归bounding box (边界框)的位置和bounding box 所属的类别。YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。

YOLOv1论文笔记

简单说一下YOLOv1的检测步骤:

YOLOv1论文笔记

(1) 给个一个输入图像,首先将图像划分成7 * 7的网格。

(2) 对于每个网格,每个网格预测2个bouding box(每个box包含5个预测量)以及20个类别概率,总共输出7×7×(2*5+20)=1470个tensor

(3) 根据上一步可以预测出7 * 7 * 2 = 98个目标窗口,然后根据阈值去除可能性比较低的目标窗口,再由NMS去除冗余窗口即可。

 总结:YOLO的CNN网络将输入的图片分割成YOLOv1论文笔记的网格,每个单元格会预测 B个边界框(bounding box)、边界框的置信度(confidence score)以及C个类别概率值,最终预测值为YOLOv1论文笔记大小的张量。bbox信息(x,y,w,h)为物体的中心位置相对格子位置的偏移及宽度和高度,均被归一化.置信度反映是否包含物体以及包含物体情况下位置的准确性,定义为\(Pr(Object) \times IOU^{truth}_{pred}, 其中Pr(Object)\in\{0,1\}\).

2.YOLOv1网络结构

YOLOv1论文笔记

 

YOLOv1网络借鉴了GoogLeNet分类网络结构,包含24个卷积层和2个全连接层。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。

YOLOv1网络在最后使用全连接层进行类别输出,因此全连接层的输出维度是 \(S × S × (B × 5 + C)\)。
YOLOv1网络比VGG16快(浮点数少于VGG的1/3),准确率稍差。

缺馅:

  • 输入尺寸固定:由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。其它分辨率需要缩放成该分辨率.

  • 占比较小的目标检测效果不好.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。 

 3.YOLOv1损失函数

YOLO全部使用了均方和误差作为loss函数.由三部分组成:坐标误差、IOU误差和分类误差
\[ \text{loss=$\sum_{i=0}^{s^2}$coordErr+iouErr+clsErr} \]
简单相加时还要考虑每种loss的贡献率,YOLO给coordErr设置权重\(\lambda_{coord}=5\).在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用\(\lambda _{noobj} =0.5\)修正iouErr。(此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)。对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题,但并不能完全解决这个问题。

综上,YOLO在训练过程中Loss计算如下式所示:

YOLOv1论文笔记

其中有宝盖帽子符号(\(\hat x,\hat y,\hat w,\hat h,\hat C,\hat p\))为预测值,无帽子的为训练标记值。\(\mathbb 1_{ij}^{obj}\)表示物体落入格子i的第j个bbox内.如果某个单元格中没有目标,则不对分类误差进行反向传播;B个bbox中与GT具有最高IoU的一个进行坐标误差的反向传播,其余不进行.

4.训练过程

1)预训练。使用 ImageNet 1000 类数据训练YOLO网络的前20个卷积层+1个average池化层+1个全连接层。训练图像分辨率resize到224x224。

2)用步骤1)得到的前20个卷积层网络参数来初始化YOLO模型前20个卷积层的网络参数,然后用 VOC 20 类标注数据进行YOLO模型训练。检测通常需要有细密纹理的视觉信息,所以为提高图像精度,在训练检测模型时,将输入图像分辨率从224 × 224 resize到448x448。

训练时B个bbox的ground truth设置成一样的.

5.YOLOv1优缺点

最后有必要总结一下YOLO的优缺点。首先是优点,YOLO采用一个CNN网络来实现检测,是单管道策略,其训练与预测都是end-to-end,所以YOLO算法比较简洁且速度快(这是最大的优点)。第二点由于YOLO是对整张图片做卷积,所以其在检测目标有更大的视野,它不容易对背景误判。另外,YOLO的泛化能力强,在做迁移时,模型鲁棒性高。

最后不得不谈一下YOLO的缺点,首先YOLO各个单元格仅仅预测两个边界框,而且属于一个类别。对于小物体,YOLO的表现会不如人意。另外YOLO对于在物体的宽高比方面泛化率低,就是无法定位不寻常比例的物体。当然YOLO的定位不准确也是很大的问题。 

 

 

 

 

 

 

参考博客:

http://www.mamicode.com/info-detail-2232517.html

https://blog.csdn.net/Jesse_Mx/article/details/53925356

相关文章: