您的位置:首页 > 其它

实时目标检测YOLO系列之YOLOv2

2020-08-07 20:39 183 查看

论文地址:https://arxiv.org/abs/1612.08242

Abstract:

        在这篇文章中,作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法,使用这种联合训练方法在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000模型,其可以检测超过9000多类物体。所以,这篇文章其实包含两个模型:YOLOv2和YOLO9000,不过后者是在前者基础上提出的,两者模型主体结构是一致的。YOLO9000是通过联合优化检测和分类,实时检测9000多个目标类别的框架。通过使用WordTree来结合不同来源的数据,并使用联合优化技术在ImageNet和COCO上同时进行培训。对ImageNet的WordTree表示为图像分类提供了更丰富,更详细的输出空间。使用分层分类的数据集组合在分类和分割域中将非常有用。

1. 基本介绍

(1)介绍

相对于YOLOv1,YOLOv2主要有两个大方面的改进:

  • 使用一系列的方法对YOLO进行了改进,在保持原有速度的同时提升精度得到YOLOv2。
  • 提出了一种目标分类与检测的联合训练方法,同时在COCO和ImageNet数据集中进行训练得到YOLO9000,实现9000多种物体的实时检测。

(2)原理

       YOLOv1 虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,YOLOv2 在 YOLOv1 的基础上提出了几种改进策略。

                                   

(3)成就

                   

       我们可以从上图中看出yolov2不仅满足实时性要求,相对于yolov1,在mAP值有巨大的提升,较之于Faster R-CNN和SSD也有更高的mAP值。

(4)创新点

YOLOv2采用了若干技巧对YOLOv1的速度和精度进行了提升。其中比较有趣的有以下几点:

  1. 使用聚类产生的锚点代替Faster R-CNN和SSD手工设计的锚点;
  2. 在高分辨率图像上进行迁移学习,提升网络对高分辨图像的响应能力;
  3. 训练过程图像的尺寸不再固定,提升网络对不同训练数据的泛化能力。
  4. 训练了一个特征提取器:Darknet-19。

2. 网络结构及trick分析

(1)检测流程

                                                            

        整个网络结构全部由卷积层和最大池化层构成,只有池化层是缩放了的,每个池化层步长都是 2 ,一共 5 个池化层,所以最后会缩小 2 的5 次方,也就是 32 倍。输出实际上和 yolov1 是一样的,是一个特征向量,只不过它是卷积出来的,没有经历全连接层。

        13*13 代表的是最后那层 feature map 是 13*13 的维度,而每个点预测 5 种 bbox,每个 bbox 是 80 个类别的概率 + 4 个坐标 (x,y,w,h) + confidence 。与 YOLOv1 相同的是把noobject概率单独拿出来,其实反过来想就相当于是背景的概率了。所以80个类别那每个bbox就预测85个值,每个点 5 个bbox就是5 * 85=425。因为没有了全连接层了,所以其实 YOLOv2 理论上是可以支持任意大小的图的,也就是说最后那层feature map 不一定限制成立 13*13,具体大小也就是图宽高分别除以 32 以后的值。

(2)backbone

     Darknet19如下图所示,在做目标检测时,最后红色框的最后的卷积层使用3×3的卷积层替换,然后再使用1×1的卷积将7×7×1024的输出转换成7×7×125。

                                                          

       Darknet-19(具有19个卷积层和5个maxpooling层。仅需要55.8亿次操作来处理图像,但在ImageNet上达到72.9%的top-1精度和91.2%的top-5精度),与VGG模型类似,但是在每个合并步骤之后,主要使用3×3过滤器使得通道数量加倍。遵循NIN的工作之后,使用全局平均池进行预测,并使用1×1过滤器压缩3×3卷积之间的特征表示。再使用BN来稳定训练,加快收敛速度,并使模型正则化。其中NIN是inception的前身,总结来说就是在卷积层后面增加1×1卷积核,然后将全连接层换成平均全局池化层(对每个特征图一整张图片进行全局均值池化,这样每张特征图都可以得到一个输出),可以减少大量的训练参数有效避免过拟合。在训练使用标准的数据增强技巧,包括随机截取、旋转、色调、饱和度和曝光偏移。在224×224的图像上进行初始训练后,以较大的尺寸448对网络进行微调。在这种更高的分辨率下,网络可实现76:5%的top-1精度和93:3%的top-5精度。   

(3)Batch Normalization

       BN导致收敛的显着改善,同时消除了对其他形式的正则化的需求。在YOLO的所有卷积层上添加BN,可以在mAP方面获得超过2%的改善。BN还有助于规范化模型。通过BN可以消除模型中的缺失,而不会过拟合。

(4)High Resolution Classifier

       所有最新的检测方法都使用在ImageNet上预先训练的分类器。从AlexNet开始,大多数分类器都对小于256×256的输入图像进行操作。原始的YOLO在224×224训练分类器网络,并将分辨率提高到448以进行检测。这意味着网络必须同时切换到学习目标检测并调整为新的输入分辨率。

(5)Convolutional With Anchor Boxes

        YOLOv1 在 BBox 位置预测上表现并不好,一方面是因为它直接给出宽高。相比 R-CNN 中有预设的 Anchors,网络只需要预测一个 offset,这相对容易。作者在 YOLOv2 中引入了 Anchors。第二个改动是,之前每个格子只预测一次类别,这实际上是对 BBox 的一种限制,现在需要 decouple。所以对每个 Anchor 都预测一组类别,它们的意义没变。同时,每个格子上的 BBox/Anchor 数量不再是 2。

        此外,YOLO使用卷积特征提取器顶部的全连接直接预测边界框的坐标。因此从YOLO中删除全连接层,并使用锚框预测边界框。 首先,消除一个池化层,以使网络卷积层的输出具有更高的分辨率。又将网络缩小为可处理416×416输入图像,而不是448 ×448。 之所以这样做,是因为想要在特征图中有奇数个位置,因此只有一个中心单元。对象(尤其是大对象)往往占据图像的中心,因此最好在中心有一个位置预测这些物体,而不是预测附近的四个位置。YOLO的卷积层将图像降采样32倍,因此使用416的输入图像,最终得到13×13的输出特征图。

                                                     

        当选择锚框,还将类别预测机制与空间位置分离开来,而是预测每个锚框的类别和对象。在之后的YOLO,对象仍会预测GT和B-box的IOU,类别预测的是在有对象的情况下该类的条件概率。使用锚框,准确性会略有下降。原本YOLO每个图像只能预测98个框,但是使用锚框的模型可以预测1000个以上的框。如果没有锚框,中间模型将获得69.5 mAP,召回率为81%。 使用锚框,模型可实现69.2 mAP的召回率,召回率达到88%

(6)Dimension Clusters

       在训练集边界框上运行k-means聚类以自动找到良好的先验。如果使用具有欧几里德距离的标准k均值,则较大的box会比较小的盒子产生更多的误差。但是,真正需要的是能够获得良好IOU分数的先验值,而这与box的大小无关。因此,对于距离度量使用:

                                                   

       上图左边是在真实bbox中使用不同聚类中心数目得到的平均IOU,增加聚类中心数目,准确率提升。使用5个聚类中心得到比较均衡的结果,右边是5个聚类中心时的bbox分布。

(7)Direct location prediction

       网络会在输出特征图中的每个cell上预测5个边界框。 网络为每个边界框tx,ty,tw,th和to预测5个坐标。如果单元格从图像的左上角偏移了(cx,cy),并且先验边界框的宽度和高度为pw,ph,则预测对应于:

                                                              

        由于限制了位置预测,因此参数化更易于学习,从而使网络更加稳定。与使用锚定框的版本相比,使用dimension clusters(kmeans方法)以及直接预测边界框的中心位置可使YOLO提升近5%。

                                                                         

        预测偏移量,使用sigmoid预测相对于box的中心坐标。

所以,需要知道的是

  1. yolo网络只预测偏移量
  2. 偏移量与默认的anchor box进行运算之后得到B-box
  3. B-box与真实box不是同一个

(8)Fine-Grained Features

       我们这里采用了不同于Fast R-CNN和SSD的方法,简单地添加了一个passthrough layer,它带来了先前26*26分辨率的层的特性。passthrough layer通过将相邻要素堆叠到不同的通道代替空间位置中,从而将高分辨率要素与低分辨率要素连接起来,这与ResNet中的恒等映射类似。这会将26 * 26 * 512特征图转换为13 * 13 * 2048特征图,可以将其与原始特征串联。探测器在此扩展的特征图上运行,因此可以访问细粒度的特征。这会适度提高1%的性能。

        Passthrough layer 与 ResNet 网络的 shortcut 类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2×2的局部区域,然后将其转化为channel维度,对于26×26×512的特征图,经Passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图,然后在此特征图基础上卷积做预测。示意图如下:

                                       

3. 损失函数设计

        yolov2的损失函数只是在yolov1基础上改动了关于bbox的w和h的损失计算方式,仅仅去掉了wh的二次根号,作者认为没有必要。

即从

                                                             

改动到

                                                                  

4. 训练与测试

(1)训练


       Multi-Scale Training:原始的YOLO使用的输入分辨率为448 *448。通过添加锚框将分辨率更改为416 * 416。但是,由于模型仅使用卷积和池化层,因此可以随时调整其大小。希望YOLOv2能够在不同大小的图像上运行时具有鲁棒性,因此将此想法训练到模型中。不固定输入图像的大小,而是每隔几次迭代就更改网络。每10批次,随机选择一个新的图像尺寸。 由于模型下采样了32倍,因此从32的倍数中提取最小的选择是320 * 320,最大的选择是608 *608。这迫使网络学会在各种输入维度上进行良好的预测。意味着同一网络可以预测不同分辨率的检测。网络在较小的尺寸下运行速度更快,因此YOLOv2可以在速度和准确性之间轻松地权衡。在288 * 288的分辨率下,它的mAP几乎与Fast R-CNN一样好,运行速度超过90 FPS。高分辨率下,YOLOv2是在VOC 2007上具有78.6 mAP,同时仍以实时速度运行。

Training for classification

      作者使用Darknet-19在标准1000类的ImageNet上训练了160次,用随机梯度下降法,初始学习率为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法,包括random crops, rotations, and hue, saturation, and exposure shifts。(参数都是基于作者的darknet框架)初始的224 * 224训练后把分辨率上调到了448 * 448,使用同样的参数又训练了10次,学习率调整到了 。高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。

(2)测试结果

                                     

         大多数列出的设计决策会导致mAP的显著增加。有两个例外,一是切换到带有anchor的全卷积网络,二是使用新的网络。在mAP不变的情况下,切换到anchor的方法可以提高召回率,同时使用新的网络裁剪计算提高33%。

  1. 通过删除最后一个卷积层并改为在三个3×3卷积层上分别添加1024个过滤器,再加上最后一个1×1卷积层(具有需要检测的输出数量)来修改该网络以进行检测。
  2. Training for detection

            为了把分类网络改成检测网络,去掉原网络最后一个卷积层,增加了三个 3 * 3 (1024 filters)的卷积层,并且在每一个卷积层后面跟一个1 * 1的卷积层,输出维度是检测所需数量。

    对于VOC数据集,预测5种boxes,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度 。                                                              

  3. 也添加了passthrough layer,从最后3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。学习策略是:先以 的初始学习率训练了160次,在第60次和第90次的时候学习率减为原来的十分之一。weight decay为0.0005,momentum为0.9,以及类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上训练。

5.strong:yolo9000

       提出了一种分类与检测数据联合训练的机制。我们的方法使用标记为检测的图像来学习特定于检测的信息。它使用只有类标签的图像来扩展它可以检测到的类别的数量。在训练中,我们混合来自检测和分类数据集的图像。当我们的网络看到用于检测的标记图像时,我们可以基于完整的YOLO v2损失函数进行反向传播。当它看到一个分类图像时,我们只是从体系结构的分类特定部分计算反向传播损失。

       这种方法提出了一些挑战。检测数据集只有通用对象和通用标签,如“狗”或“船”。分类数据集有更广泛和更深的标签范围。ImageNet有100多个品种的狗。如果我们想训练这两个数据集,我们需要一个连贯的方式来合并这些标签。大多数分类方法在所有可能的类别中使用Softmax层来计算最终的概率分布。使用softmax假设这些类是互斥的。这为组合数据集带来了问题,例如,您不希望使用此模型组合ImageNet和COCO,因为“Norfolk terrier”和“dog”类不是互斥的。相反,我们可以使用一个多标签模型来组合数据集,而不假设互斥。这种方法忽略了我们所知道的关于数据的所有结构,例如,所有的COCO类都是互斥的。

WordTree视图如下所示:

                                                              

        为了使用WordTree来执行分类,预测了给定synset的每一个下鞘的概率在每个节点上的条件概率。可以使用以一种合理的方式将多个数据集组合在一起。联合分类和检测。既然可以使用WordTree组合数据集,就可以训练联合模型在分类和检测方面。希望训练一个超大规模的检测器,这样就可以使用COCO检测数据集和整个ImageNet版本中的前9000个类创建组合数据集。

6. 总结

        神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。YOLOv2网络通过在每一个卷积层后添加batch normalization,极大的改善了收敛速度同时减少了对其它regularization方法的依赖(舍弃了dropout优化后依然没有过拟合),使得mAP获得了2%的提升。

        YOLOv2借鉴了Faster R-CNN中的anchor思想: 简单理解为卷积特征图上进行滑窗采样,每个中心预测9种不同大小和比例的建议框。由于都是卷积不需要reshape,很好的保留的空间信息,最终特征图的每个特征点和原图的每个cell一一对应。而且用预测相对偏移(offset)取代直接预测坐标简化了问题,方便网络学习。

         YOLOv2是对YOLOv1在一些关键点的改进,通过众多的改进点,使模型效果变好,这种小改进的累加的思想也可以用到日常的模型改善方法中,在anchor boxes采用了聚类方法,使初始化anchor box更加接近目标,值得借鉴,yolo9000的联合数据集方法很新颖,通过数据集的联合达到扩充数据的作用很不错!

7. 参考文献

https://www.cnblogs.com/missdx/p/12609031.html

https://www.bilibili.com/read/cv3435625/

https://zhuanlan.zhihu.com/p/35325884

https://tangh.github.io/articles/yolo-from-v1-to-v4/

https://shartoo.github.io/2019/03/12/yolo-v123/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: