文章目录
一、介绍
目标检测现状: 大多数检测方法仍然局限于一小部分对象。这是因为对象检测数据集是有限的。最常见的检测数据集包含成千上万的图像和几十到几百个标签,相比于分类数据集—拥有数以百万计的图像,其中有成千上万的类别。因此目标检测能检测的对象种类非常有限。
本文工作:
1.提出数据集组合方法:一种新的方法利用已经拥有的大量分类数据,扩展当前目标检测系统的对象检测范围。使用对象分类的层次视图,将不同的数据集组合在一起,得到包含检测和分类数据的数据集。利用这个数据集进行训练最终提升目标检测的对象范围
2.提出联合训练算法:能够在上训练目标检测器。这种方法可以利用检测图像的标注信息来学习精确定位目标,同时使用分类图像来增加其词汇量和鲁棒性(对象的范围)
3.改进YOLOv1提出YOLOv2:一种最先进的实时检测器
4.提出YOLO9000:利用数据集组合方法(1)和联合训练算法(2)对来自ImageNet的9000多个类和来自COCO的检测数据进行模型(YOLO9000)训练,得到一个可以检测9000多种不同对象类别的实时目标探测器。
二、更好
YOLOv1与Fast R-CNN的错误分析表明,YOLOv1有大量的定位错,并且召回率相对较低。
YOLOv1改进重点是提高召回和定位,同时保持分类的准确性。
改进如图:
; ; ;
2.1 批量规范化
1.作用:批处理规范化能够显著提升模型的收敛,同时消除了训练过程中对其他形式正则化的需要。有助于对模型进行规范化,通过批量归一化,可以从模型中删除dropout并不会出现过拟合。
2.执行:在YOLO模型的所有卷积层上添加批量归一化。批处理规范化还有助于对模型进行规范化。
2.2 高分辨率分类器
1.分类器介绍:检测方法都使用在ImageNet上预先训练的分类器作为预训练模型。从AlexNet开始,大多数分类器的输入都小于256×256。
2.YOLOv1:原始的YOLO以224×224训练分类器网络,在训练检测系统时,将分辨率提高到448。
3.YOLOv2:首先在ImageNet上以448×448的分辨率对分类网络进行10epoch的微调,这给网络时间来更好地调整它的卷积核工作在更高的分辨率输入上。然后在检测时对这个分类器网络进行微调。最终这个高分辨率的分类网络使mAP增加了近4%。
2.3 使用Anchor Boxes的卷积
(1)YOLOv1:使用全连接层来直接预测边界框(x,y,w,h,c)其中边界框的坐标是相对于cell的,宽与高是相对于整张图片。输入图片被划分为7×7 网格,每个单元格预测2个边界框,采用全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。
(2)Faster R-CNN: 不是直接预测目标边界框,而是使用手工挑选的先验anchor boxes。区域建议网络(RPN)通过为anchor box预测偏移量和置信度,来预测边界框。RPN预测的边界框是相对于先验框anchor boxes的坐标和高宽的偏移offset。RPN在特征图的每个位置预测anchor box偏移量而不是坐标,简化了问题,使网络更容易学习。
(3)YOLOv2:从YOLOv1中移除全连接层,借鉴RPN网络使用anchor box来预测边界框,但对RPN做出改变,预测相对于cell左上角坐标的偏移和相对于anchor box高宽的偏移。具体可见2.5部分。
1.首先删除一个池化层:使网络的卷积层的输出具有更高的分辨率。
2.缩小网络操作的输入图像为416×416:不是448×448。YOLOv2模型下采样的总步长为32,对于416416大小的图片,最终得到的特征图大小为1313,特征图中有奇数个位置,所以只有一个中心单元格。物体往往占据图像的中心,所以最好在中心有一个单独的位置来预测这些物体,而不是在附近的四个位置。
3.使用anchor boxes:使用anchor box,准确性稍微下降,但是召回率增加很多,这也意味着模型有很大改进空间。
YOLOv1:每个cell都预测2个boxes,每个boxes包含5个值:前4个值是边界框位置与大小,最后一个值是置信度(confidence scores,包含两部分:含有物体的概率以及预测框与ground truth的IOU)。但是每个cell只预测一组分类概率值(class predictions,其实是置信度下的条件概率值),供2个boxes共享。
YOLOv2:使用anchor boxes之后,每个位置的各个anchor box都单独预测一组分类概率值,这和SSD比较类似(但SSD没有预测置信度,而是把background作为一个类别来处理)。
2.4 Dimension Clusters
使用anchor boxes时有两个问题:
问题一:anchor boxes的尺寸是手工挑选的。虽然网络可以学会适当地调整框,但如果开始为网络选择更好的先验anchor boxes,那么模型更容易学习,从而做出更好的预测。
解决:在训练集的边界框上运行k-means聚类找到更好先验anchor boxes。设置先验anchor boxes的主要目的是为了使得预测框与真值的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
; ;
对不同的k值运行k-means,并用最接近的形心绘制平均IOU,如下图。
; ;
选择k = 5作为模型复杂度和高召回率的一个很好的折衷。聚类中心作为anchor boxes,它与手动选择的anchor boxes有显著不同,形状灵活。
2.5 直接定位预测
使用anchor boxes时有两个问题:
问题二:模型不稳定,特别是在早期迭代期间。大多数不稳定性来自于对边框(x, y)位置的预测。
位置预测举例:
(1)区域建议网络(RPN网络)的位置预测: 预测相对于anchor box的坐标的偏置,和相对于anchor box高宽的偏置。
边界框中心坐标 (x, y),需要根据网络预测的坐标偏置(tx,ty),先验anchor box的尺度(wa,ha)以及中心坐标(xa,yb)来计算:
; ; ; ; ;
例:公式是无约束的,预测的边界框很容易向任何方向偏移.。如果预测tx= 1,则将盒子右移一个anchor box的宽度,如果预测tx= - 1,则将盒子左移一个anchor box的宽度。在随机初始化的情况下,这种模型需要很长时间才能稳定地预测出合理的偏移量。
(2)YOLOv2的位置预测: 预测相对于网格单元坐标的偏移和预测相对于anchor box高宽的偏移。.
YOLOv2弃用了RPN预测方式,沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)
YOLOv2为每个边界框预测4个偏置(tx,ty,tw,th),则预测边界框的位置和大小为:
; ; ; ;
(cx, cy)为cell的左上角坐标,如下图,在计算时每个cell的尺度为1,所以当前cell的左上角坐标为(1,1),由于sigmoid函数的处理,边界框的中心位置会约束在当前cell内部,防止偏移过多。
宽度和高度pw, ph:先验anchor box的宽和高。
;
对位置预测进行了约束,使得参数化更容易学习,使网络更加稳定
2.5 细粒度特征
为什么使用细粒特征::在13×13的特征图上进行检测,这对于大型目标的检测已经足够,但模型可能会受益于较小目标的细粒度特性。
使用细粒度特征:
1.Faster R-CNN和SSD:使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体
2.YOLOv2:不同的方法,为网络简单地添加一个透传层,获取前层26×26分辨率特征。
透传层:
将相邻的特征叠加到不同的通道来将高分辨率的特征与低分辨率的特征连接起来,类似于ResNet中的映射。将前层26×26×512的特征图转换为13×13×2048的特征图,并与原最后层特征图进行拼接。检测器运行在扩展的特征映射上,因此可以访问细粒度的功能。
2.6 多尺度训练
(1)YOLOv1:使用448×448的固定分辨率输入。
(2)YOLOv2:多尺度训练。YOLOv2模型只使用了卷积和池化层,所以可以动态调整输入大小。希望YOLOv2能够健壮地运行在不同大小的图像,因此需要将不同大小的图像训练到模型中。
多尺度训练:
1.原理:每隔几次迭代就改变网络,而不是固定输入图像的大小。
2.做法:网络每10批训练后随机选择一个新的图像尺寸大小。由于模型下采样了32倍,从以下32的倍数{320,352,…,608}作为图像维度的选择。将网络输入调整到那个维度,并继续训练。
3.优势:迫使网络学会在各种输入维度上进行良好的预测。这意味着同一个网络可以预测不同分辨率的检测。网络在较小的尺寸下运行得更快,因此YOLOv2在速度和精度之间提供了一个简单的折衷。
三、更快
通常目标检测框架:大多数检测框架依赖于VGG-16作为基本的特征提取器。VGG-16是一个强大、精确的分类网络,但是它计算复杂。
YOLO框架:使用基于Googlenet架构的自定义网络。这个网络比VGG-16快,准确性略低于VGG16。
3.1 Darknet-19
(1)Darknet-19介绍:一个新的分类模型作为YOLOv2的基础框架。与VGG模型类似,主要使用3×3的过滤器,并在每个池化步骤后加倍通道数。使用全局平均池进行预测,并使用1×1过滤器压缩3×3卷积之间的特征表示。
(2)Darknet-19细节:有19个卷积层和5个maxpooling层。
3.2 分类训练
(1)训练数据集:标准ImageNet 1000类分类数据集
(2)训练参数:对网络进行160个epochs的训练,使用初始学习率为0.1随机梯度下降法、4的多项式率衰减法、0.0005的权值衰减法和0.9的动量衰减法
(3)模型:使用的是Darknet神经网络框架。
(4)数据增强:在训练中使用标准的数据增强技巧,包括随机的裁剪、旋转、色相、饱和度和曝光变化。
如上所述,在最初的224×224图像训练之后,将网络调整到更大的尺寸448,但只训练约10个周期。在这个高分辨率下,网络达到很高精度。
3.3 检测训练
网络微调: 对分类网络(预训练网络)进行修改,去掉最后一个卷积层,增加3个3×3个卷积层,增加一个1×1个卷积层作为网络输出层。增加透传层。
细节:
(1)网络最后一层即1X1卷积层卷积核个数同网络输出维度相同:对于VOC,预测5个边界框,每个边界框有5个坐标,每个边界框有20个类,所以最后一个1×1卷积层有125个卷积核。
(2)透传层:倒数第二个3X3卷积到最后一个3X3卷积层增加透视层。模型可以使用细粒度的特征。
(2)训练参数:10−3的起始学习率对网络进行160个周期的训练,并在60和90个周期时将其除以10。使用重量衰减为0.0005,动量为0.9。
4、stronger(YOLO9000部分)
YOLO9000是在YOLOv2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略—在COCO和ImageNet数据集上进行联合训练。
在YOLO中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。
参考1
参考2
代码实现:https://editor.csdn.net/md/?articleId=105657300