YOLO网络介绍
????????YOLO是单阶段方法的开山之作。它将检测任务表述成一个统一的、端到端的回归问题,并且以只处理一次图片同时得到位置和分类而得名。
- YOLOV1是典型的目标检测one stage方法,用回归的方法去做目标检测,执行速度快,达到非常高效的检测。YOLOV1的基本思想是把一副图片,首先reshape成448×448大小(由于网络中使用了全连接层,所以图片的尺寸需固定大小输入到CNN中),然后将划分成SxS个单元格(原文中S=7),如果目标中心点在某个单元格内,该单元格就负责预测该目标。输出层的大小为7x7,通道数为30。7x7可以看作将原图分为7x7的网格,而每个格子中有30个数。这三十个数分别对应了两组(意味着每个网格尝试着预测两个边界框)的“位置信息+置信度”以及20个类别(VOC数据集中有20个类别)。
- YOLOV2,选择5个锚作为召回率和模型复杂度之间的良好折衷。其关键特点:
- 1)Batch Normalization: YOLOv1没有使用BN层,而YOLOv2在每一层卷积层后都使用了BN层,BN层通过训练数据学习每一层每个神经元的缩放比例,进行标准化。BN层可以帮助网络进行训练,卷积层后加了BN层时,卷积层可以不使用偏置值。
- 2)High Resolution Classifier: 对YOLOV2,预训练之后,在ImageNet数据集上,用448*448大小的图片对分类网络进行微调,大约10个epoches,其目的是让网络先学习一下高分辨率的图片,之后再应用到检测网络中,mAP提升大概4%。
- 3)Convolutional With Anchor Boxes: YOLOv1并没有使用锚点,而是直接预测x,y,w,h,而YOLOv2引用了Faster RCNN和SSD模型中的锚点,预测的位置是相对预置的锚点的。通过使用锚点,mAP下降了0.3%的mAP,但是召回率增加了7%,虽然mAP下降了,但是更高的召回率意味着模型的上限更高。
- 4)Dimension Cluster: 对网络来说,如果能够选择合适的anchor尺寸,网络更加容易学习并且预测出更好的结果,使用k-means算法在训练集上的边界框中自动选择合适的box dimensions。
- 5)Direct location prediction: 对x,y,w,h进行归一化(在输出层代表位置信息的部分使用sigmoid激活函数)。置信度也需要进行归一化(输出层代码置信度的位置加sigmoid激活函数)。这样可以是的网络在训练过程中更加稳定。通过Dimension Clusters和Direct location prediction可以使模型提高5%的mAP。
- 6)Fine-Grained Features:在13*13特征图上进行目标检测,对于一些大的目标是足够的,但是对于小物体的检测还需要细粒度的特征,为此YOLOV2添加一个passthrough layer,将浅层的特征和深层的特征,两个不同尺寸的特征按通道维度拼接起来。代码实现中,PassThrough层的输入为26x26x64,输出为13x13x256。而YOLOv2的最终网络结构如图所示。
- 7) Multi-Scale training:从上面的结构图可以看到,YOLOv2相比YOLOv1,去掉了全连接层,所有带参数的网络层均为卷积层和BN层。卷积层和BN层都不会受到输入图像大小的影响(如果网络有全连接层,输入图像的大小必须是一致的)。因此,在训练模型时可以使用不同尺度的图像进行训练来保证模型对大目标和小目标都能达到不错的效果。由于网络的输入图像的大小为输出大小的32倍,输入图像的大小为{320,352,...,608},每十个batch换一组尺寸。
- YOLOv3相比YOLOv2最大的改进点在于借鉴了SSD的多尺度判别,即在不同大小的特征图上进行预测。对于网络前几层的大尺寸特征图,可以有效地检测出小目标,对于网络最后的小尺寸特征图可以有效地检测出大目标。此外,YOLOv3的backbone选择了DarkNet53网络,网络结构更深,特征提取能力更强了。
- YOLOv3网络结构需注意:
? 1.??? 由于网络较深,使用了残差结构。
? 2.??? DarkNet53网络用步长为2的卷积代替了池化层。
? 3.??? 所有的网络层不包含全连接层,因此,输入图像的大小也是可以调整的,而输入图像的大小同样是最小的输出特征图的32倍。
? 4. ???YOLOv3分别在三个尺寸的特征图进行了预测,每个尺寸的特征图使用了3个锚点。因此,输出层的维度计算方法为:(4+1+80)x3=255,因此,最后一层1x1的卷积层的数量为255。
??5.??? 13 x 13的特征图会通过上采样层和之前的26 x 26的特征图在通道维度拼接在一起,26 x 26的特征图再经过上采样和52 x 52的特征图拼接。
在进行实践案例的代码运行时,不知因何种原因一直出现kernel terminating问题,导致代码从第一部便无法运行,身为小白的我也未找到问题出在哪里。
运行代码定义数据处理相关函数--定义网络--定义评价指标--定义相关超参数--定义训练网络的函数--开始训练--测试网络模型。
代码对于小白的我难以理解,几乎所有的东西都需要查询,这也给了我学习的方向。加油。。
?
?
?
|