前言

前面我们已经讲解过了YOLOV1,因此在这里我会接着前几天的讲解,进一步写一下YOLOV2的基本思想和改进。

YOLOv2的论文全名为YOLO9000: Better, Faster, Stronger,它斩获了CVPR 2017 Best Paper Honorable Mention。在这篇文章中,作者首先在YOLOv1的基础上提出了改进的YOLOv2,然后提出了一种检测与分类联合训练方法,使用这种联合训练方法在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000模型,其可以检测超过9000多类物体。所以,这篇文章其实包含两个模型:YOLOv2和YOLO9000,不过后者是在前者基础上提出的,两者模型主体结构是一致的。YOLOv2相比YOLOv1做了很多方面的改进,这也使得YOLOv2的mAP有显著的提升,并且YOLOv2的速度依然很快,保持着自己作为one-stage方法的优势,YOLOv2和Faster R-CNN, SSD等模型的对比如下图所示。下面将首先介绍YOLOv2针对YOLOv1改进策略。

1、改进步骤

YOLOV2 相对于YOLOV1 的改进主要可以分为以下三点:

1、网络结构的改进

2、Anchor的设计

3、训练策略的改进

接下来我就从这三点进行展开阐述。

1. 网络结构的改进

在每个卷积层和激活函数层之间加入了BN层。Batch Normalization有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput,关于这一点改进也是现在很多模型用的一点。使用Batch Normalization后。YOLOv2的mAP提升了2.4%。

加入BN层之后,为了能够更好地对小目标的物体进行检测,YOLOV2 还提出了一个passthrough层来检测细粒度特征。与SSD使用多尺度特征图不同,passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。具体来说,将倒数第二次下采样之前的特征图(26×26×512)抽取成为2 × 2 的局部区域并将其在channel维度上面进行拼接。对于26×26×512的特征图,经passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍,这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072的特征图,然后在此特征图基础上卷积做预测。具体实现方式如下图所示。(注意此处的连接使用的是concatenate连接方式,即通道拼接)。

至于为什么 passthrough 好用吗,具体来说浅层特征图包含的更多是位置。细节信息,在检测上面可以更好地用于检测框的回归。而更深层次的特征图包含的就是语义信息,分类需要的是语义信息,而检测更多的是需要物体的物理信息。因此融合浅层特征可以提升检测的效果。

2. Anchor的设计

YOLOV2关于Anchor的部分还是有很大改变的。首先体现在 在YOLOv1中,输入图片最终被划分为7×7网格,每个单元格预测2个边界框。YOLOv1中包含全连接层,从而能直接预测bounding boxes的坐标值,其中边界框的宽与高是相对整张图片大小的。由于各个图片中存在不同尺度和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。作者发现通过预测偏移量而不是坐标值能够简化问题,让网络学习起来更容易。

借鉴Faster R-CNN的做法,YOLOv2移除了YOLOv1中的全连接层而采用了卷积核anchor boxes来预测边界框。通过在每个cell预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度。同时为了使检测实用的特征图分辨率更高,去掉了网络中的一个pooling层。并且网络输入图像尺寸变为416×416,而不是原来的448×448。YOLO的卷积层采用32这个值来下采样图像,所以网络输入为416×416,输出为13×13的feature map。使用Anchor Box会让精确度稍微下降,但用了它能使YOLO能预测出13×13×9=1521个框。因此相对于YOLOv1 81%的召回率, YOLOv2的召回率大幅度提升到88%。

在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析,以寻找尽可能匹配样本的边框尺寸。
       聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差。而且设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:

centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

上图左边是选择不同的聚类k值情况下,得到的k个centroid边框,计算样本中标注的边框与各centroid的Avg IOU。显然,边框数k越多,Avg IOU越大。YOLO2选择k=5作为边框数量与IOU的折中。对比手工选择的先验框,使用5个聚类框即可达到 0.61 Avg IOU,相当于9个手工设置的先验框0.609 Avg IOU。

所以综合以上三点,在YOLOV2的输出为7*7*(5*5+s),其中s是分类的数量。

3、训练策略的改进

图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448×448 的图像作为输入。但这样切换对模型性能有一定影响。所以YOLO2在采用 224×224 图像进行分类模型预训练后,再采用 448×448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448×448 的分辨率。然后再使用 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416×416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:{320,352,…,608},输入图片最小为320×320,此时对应的特征图大小为10×10,而输入图片最大为608*608,对应的特征图大小为19×19。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。 这样训练出来的模型可以预测多个尺度的物体。并且,输入图片的尺度越大则精度越高,尺度越小则速度越快,因此YOLOv2多尺度训练出的模型可以适应多种不同场景的要求。

采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2可以采用不同大小的图片作为输入,在VOC 2007数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快,而采用高分辨输入时,mAP值更高,但是速度略有下降,对于544*544,mAP高达78.6%。注意,这只是测试时输入图片大小不同,而实际上用的是同一个模型(采用Multi-Scale Training训练)。

2、网络架构

这里的东西前面基本都讲过了,需要说的一点就是由于YOLOv2在每一个区域预5个边框,每个边框有25个预测值,因此最后输出的特征图通道数为125。其中,一个边框的25个预测值分别是20个类别预测,4个位置预测及1个置信度预测值。这里和v1有很大区别,v1是一个区域内的边框共享类别预测,而这里则是相互独立的类别预测值(即解决YOLOv1中每个cell只能预测一个物体的缺点)。

至于正负样本以及损失函数,和YOLOV1一样,并没有做出改变。

3、总结

总结来看,虽然YOLOv2做了很多改进,但是大部分都是借鉴其它论文的一些技巧,如Faster R-CNN的anchor boxes,YOLOv2采用anchor boxes和卷积做预测,这基本上与SSD模型(单尺度特征图的SSD)非常类似了,而且SSD也是借鉴了Faster R-CNN的RPN网络。从某种意义上来说,YOLOv2和SSD这两个one-stage模型与RPN网络本质上无异,只不过RPN不做类别的预测,只是简单地区分物体与背景。在two-stage方法中,RPN起到的作用是给出region proposals,其实就是作出粗糙的检测,所以另外增加了一个stage,即采用R-CNN网络来进一步提升检测的准确度(包括给出类别预测)。而对于one-stage方法,它们想要一步到位,直接采用“RPN”网络作出精确的预测,要因此要在网络设计上做很多的tricks。YOLOv2的一大创新是采用Multi-Scale Training策略,这样同一个模型其实就可以适应多种大小的图片了。
       YOLOv2相较于之前的版本有了质的飞跃,主要体现在吸收了其他算法的优点,使用了先验框、特征融合等方法,同时利用了多种训练技巧,使得模型在保持极快速度的同时大幅度提升了检测的精度。YOLOv2已经达到了较高的检测水平,但如果要分析其不足的话,大体有一下3点:
● 单层特征图:虽然采用了Passthought层来融合浅层特征,增强多尺度检测性能,但仅仅采用一层特征图做预测,细粒度仍然不够,对小物体等检测提升有限,并且没有使用残差这种较为简单、有效的结构。
● 受限于其整体网络架构,仍然没有很好地解决小物体的预测问题。

参考:【目标检测】单阶段算法--YOLOv2详解

【目标检测】YOLOV2详解相关推荐

  1. 基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

    摘要:本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现,用于智能检测物体种类并记录和保存结果,对各种物体检测结果可视化,提高目标识别的便捷性和准确性.本文详细阐述了目标检测系统的原理,并给 ...

  2. 【百度飞浆】YOLO系列目标检测算法详解

    YOLO系列目标检测算法详解 1 YOLO发展史 2 YOLO v3目标检测原理 3 PaddleDetection中YOLO v3模型介绍 4 YOLO v3配置演练 1 YOLO发展史 2 YOL ...

  3. 【百度飞浆】RCNN系列目标检测算法详解

    RCNN系列目标检测算法详解 目录 两阶段目标检测算法发展历程 R-CNN R-CNN网络结构 R-CNN网络效果 Fast R-CNN Fast R-CNN网络效果 Faster R-CNN Fas ...

  4. YOLOv1——YOLOX系列及FCOS目标检测算法详解

    文章目录 一. 开山之作:YOLOv1 1.1. YOLOv1简介 1.2 YOLOv1 检测原理 1.3 YOLOv1网络结构 1.4 YOLOv1 损失函数 1.5 YOLOv1优缺点 二. YO ...

  5. PointPillar 3D目标检测模型详解

    一.参考资料 pointpillars 论文 pointpillars 论文 PointPillars - gitbook_docs 使用 NVIDIA CUDA-Pointpillars 检测点云中 ...

  6. YOLO系列目标检测算法详解

    目录 前言 YOLO发展历程 目标检测 YOLO开山之作 ---- YOLO(v1) YOLOv2 YOLOv3 PaddleDetection中YOLOv3模型介绍 总结 前言 YOLO发展历程 F ...

  7. 基于mmrotate的旋转目标检测入门详解

    一.旋转目标检测方法对比 1 当前前沿方法的对比 首先我们打开papers with code 网站 https://paperswithcode.com/ 我们在搜索栏输入 oriented obj ...

  8. 目标检测之详解yolov3的anchor、置信度和类别概率

    参考1 参考2 参考3 提要 yolov3 在网络最后的输出中,对于每个grid cell产生3个bounding box,每个bounding box的输出有三类参数: 一个是对象的box参数,一共 ...

  9. single-shot detection(SSD)目标检测算法详解——(一看就懂系列!!!)

    SSD是One-stage系列的优秀算法之一 one-stage的意思是挑选候选框和预测候选框两步是同时完成的,R-CNN家族都是two-stage. SSD有什么创新点? (1)基于Faster-R ...

  10. SSD目标检测 原理详解

    一 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Prior box ...

最新文章

  1. CVPR 2021评审出炉,得分惨不忍睹,面对奇葩评审该如何反击?
  2. 后台ajax调用中字符串到jquery中的json对象和数组对象转换问题
  3. 分布式锁能解决 mysql死锁吗_mysql死锁问题分析
  4. 2022年美国大学生数学建模竞赛——Problem E:林业固碳
  5. 计算机考研408试题及答案,2015年计算机专业408考研试题及答案
  6. 《深度学习轻松学》-第8章优化与训练
  7. Ubuntu 18.04 64位安装校园网客户端(完美解决)
  8. H3C nqa 配置
  9. Minecraft 1.19.2 Forge模组开发 01.Idea开发环境配置
  10. 20+非常棒的Photoshop卡通设计教程
  11. IT系统为什么复杂,肿么办
  12. LVGL (9) Event 机制实现
  13. 用 UrlSchemes 实现调用应用并传参
  14. python基础语法和变量
  15. 【爬虫教程】吐血整理,最详细的爬虫入门教程~
  16. MySQL中建表时的int(m)中的m代表什么意思?
  17. 恒流LED驱动芯片 SM15133EK SM15133EH 明微电子
  18. 领导圈子里流传的10个小故事
  19. Python - 3.6 学习二
  20. LINUX64位版本ECLIPSE下载

热门文章

  1. mysql实验数据库报告_MySQL数据库技术》实验报告模板
  2. 134安装教程_最新市政造价教程
  3. 较低成本的ISO7637-2 5A 5B抛负载保护方案
  4. 计算机相关知识抢答题题库,计算机基础知识抢答赛题库
  5. 树莓派4b自带wifi_树莓派4B wifi开机启动
  6. js中获取当前url路径
  7. 开通慢直播,RTMP协议和RTSP协议如何选择?
  8. 使用C语言创建顺序表
  9. C# SQLHelper类
  10. DirectX修复工具 4.0 标准版