3目标检测的准确率_YOLOv1/v2/v3简述 | 目标检测

本文详细介绍了YOLO系列目标检测算法,包括YOLOv1的实时检测特性,YOLOv2的优化如Batch Normalization和Anchor Boxes,以及YOLOv3的多尺度预测和Darknet-53网络。通过对每一代的改进点分析,展示了如何提升目标检测的准确率和效率。
摘要由CSDN通过智能技术生成

YOLO系列是目标检测领域里十分经典的结构,虽然目前已经出了很多更高质量更复杂的网络,但YOLO的结构依然可以给算法工程师们带来很多的启发。这3篇论文看下来,感觉像是一本调参说明书,教你如何使用各种trick提高手上的目标检测网络的准确率  

来源:晓飞的算法工程笔记 公众号

YOLOv1


a01f0bea234d4ceee8b72632b9f32a74.png

论文: You Only Look Once: Unified, Real-Time Object Detection

  • 论文地址:https://arxiv.org/abs/1506.02640

Introduction

7dbbdef91e3ef78f7ebf3c6c305d7284.png

  YOLO十分简单,一个网络同时对多个物体进行分类和定位,没有proposal的概念,是one-stage实时检测网络的里程碑,标准版在TitanX达到45 fps,快速版达到150fps,但精度不及当时的SOTA网络

Unified Detection

c459220ba7e73794d1299d38c7f47f45.png

  将输入分为的格子,如果GT的中心点在格子中,则格子负责该GT的预测:

  • 每个格子预测个bbox,每个bbox预测5个值: 和置信度,分别为中心点坐标和bbox的宽高,中心点坐标是格子边的相对值,宽高则是整图的相对值。置信度可以反应格子是否包含物体以及包含物体的概率,定义为,无物体则为0,有则为IOU
  • 每个格子预测个类的条件概率,注意这里按格子进行预测,没有按bbox进行预测
39d8a77152d10984878fef51631c11be.png

  在测试时,将单独的bbox概率乘以类的条件概率得到最终类别的概率,综合了类别和位置的准确率   对于PASCAL VOC,设置,,共类,最终预测数据

Network Design

e9dcc186ab26a249bb85fb708ac7be32.png

  主干网络共24层卷积加2个全连接层,没有类似于inception module的旁路模块,而是在卷积后接卷积进行降维。另外,fast YOLO的网络降为9层

Training

  骨干网络前20层接average-pooling层和全连接层进行ImageNet预训练,检测网络训练将输入从增加到,最后一层使用ReLU,其它层使用leaky ReLU

99d5b64261ecd89fbc27d0e382b2911c.png

  损失函数如公式3,一个GT只对应一个bbox。由于训练时非目标很多,定位的训练样本较少,所以使用权重和来加大定位的训练粒度,包含3个部分:

  • 第一部分为坐标回归,使用平方差损失,为了使得模型更关注小目标的小误差,而不是大目标的小误差,对宽高使用了平方根损失进行变相加权。这里指代当前bbox是否负责GT的预测,需要满足2个条件,首先GT的中心点在该bbox对应的格子中,其次该bbox要是对应的格子的个box中与GT的IoU最大
  • 第二部分为bbox置信度的回归,跟上述一样,为非的bbox,由于负样本数量较多,所以给了个低权重。若有目标,实际为IOU,虽然很多实现直接取1
  • 第三部分为分类置信度,相对于格子而言,指代GT中心是否在格子中

Inference

  对于PASCAL VOC,共预测98个bbox,用Non-maximal supression对结果进行处理

Experiments

f90d65f104c0fbed898edf99d05916e4.png

总结

  开创性的one-stage detector,在卷积网络后面接两个全连接层进行定位和置信度的预测,并设计了一个新的轻量级主干网络,虽然准确率与SOTA有一定距离,但是模型的速度真的很快   作者提到了YOLO的几点局限性:

  • 每个格子仅预测一个类别,两个框,对密集场景预测不好
  • 对数据依赖强,不能泛化到不常见的宽高比物体中,下采样过多,导致特征过于粗糙
  • 损失函数没有完成对大小物体进行区别对待,应该更关注小物体的误差,因为对IOU影响较大,定位错误是模型错误的主要来源

YOLOv2


64616c4a4d62ab1c17a7562a1cfa6f77.png

论文: YOLO9000: Better, Faster, Stronger

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

Introduction

  基于YOLOv1,YOLOv2加入了一系列当前比较流行的提升方法,一个更快更准的one-stage目标检测算法。此外,作者还结合hierarchical softmax提出YOLO9000,能进行9000类物体检测的通用网络。对于模型的介绍,分为Better/Faster/Stronger,分别介绍提升准确率的trick,网络加速的方法以及超多分类的实现

Better

470c968dce77ea5bc06b308c180503a0.png

  YOLOv1还是个相当navie的想法,因此作者在YOLOv2加入了大量提升准确率的方法,算是个认真思考后的完整网络吧,具体添加的方法如table 2

  • Batch Normalization

  BN层能够很好地加速网络的收敛,加入BN层YOLO能提升2%mAP,同时可以丢弃dropout进行训练

  • High Resolution Classifier

  原YOLO的主干网络使用的输入进行预训练,然后直接使用进行检测训练,这要求网络同时适应新像素和目标检测的学习。为了更平滑,论文在检测训练前先对主干网络进行输入的10个epoch fine tune,这带来4%mAP提升

  • Convolutional With Anchor Boxes

  YOLOv1直接预测bbox,参考Faster R-CNN使用预设的anchor达到了很好的效果,YOLOv2去掉全连接层并开始使用achor   首先去掉最后的池化层,使得结果保持高像素,修改输入分辨率为416来确保特征图是奇数,这样就能保证只有一个中心网格,便于预测大物体,最终的特征图为输入的1/32倍,即。在加入anchor后,将预测的机制从绑定在格子转化为绑定在anchor上,每个anchor预测个结果,objectness置信度预测IOU,class置信度预测分类的条件概率。使用anchor后准确率下降了,具体原因是输出的box多了,召回率提高了,相对的地准确率降低了

  • Dimension Clusters
3f78f236575f3ccd08e3a47721917ead.png

  目前anchor是手工设定的,这可能不是最优的设定,使用k-means来对训练集的box进行聚类,获得更准确率的预设anchor。聚类使用IOU作为距离计算,具体为,从图2可以看出,5个簇时性价比最高,也是YOLOv2使用的设定

  • Direct location prediction
a59f58b05160082285719d95f89f9632.png

  使用achor后,YOLOv2的初期训练十分不稳定,主要来源于中心点产生的误差,region proposal方法使用相对anchor宽高的比例来进行中心点的位移,由于没有约束,中心点可以在图的任何地方,导致初期训练不稳定

a0aef3184a0a6d304c03205ce6448ca8.png
1eda0573d644384d25f22f4b4d01ca10.png

  因此,YOLOv2继续沿用YOLO的策略,预测相对于格子的宽高的中心位置,使用逻辑回归来约束值在区间,而宽高则改为相对于anchor宽高的比例。因此,每个格子预测5个bbox,每个bbox包含5个内容,中心点要加上格子左上角坐标。在约束了中心位置后,提升了5%mAP

  • Fine-Grained Features

  最后的特征图足够用来预测大目标,但需要更细粒度的特征来定位小目标,Faster R-CNN和SSD使用不同层的特征图进行预测,而YOLOv2则提出passthrough layer,将earlier layer的特征进行隔点采样,将原来的特征图采样为(即将特征图分成多个的小网格,然后所有网格的1、2、3、4位置的值分别组合成新的特征图),然后跟最后的特征图concatenate到一起进行预测,这带来1%mAP提升

  • Multi-Scale Training
9972d0f7720edbcbfa189ee4795e891a.png

  由于YOLOv2为全卷积网络,可以任意修改输入的大小,在训练时,每10个batch任意切换一次输入分辨率,候选分辨率为32的倍数,如。在实际使用时,可以用不同的分辨率来满足不同的准确率和速度的要求,结果如表3

  • Main Result
3e8d481a423c941960ddc52a17bd2e20.png
a54040ab78b2781dbb92298e300b1225.png

Faster

9c4885aab384d16cc23bbb2dd15beefa.png

  为了加速,YOLOv2使用了新的主干网络Darknet-19,包含19层卷积和5个池化层,使用卷积来对卷积结果进行压缩,使用BN层来稳定训练,加速收敛以及正则化模型,使用全局池化来进行预测

Stronger

  YOLOv2提出联合分类数据和检测数据进行训练,得出超多分类的模型

  • Hierarchical classification

  ImangeNet和COCO的标签粒度是不一样的,为此,要对数据进行多标签标注,类似于种属科目纲门界的分法,构建WordTree

322143fd147690da489089c81d695c0c.png
6ba0be30f7e0d47b2db03852dcb822bd.png

  比如诺福克梗等猎犬都属于猎犬节点的下级分类,而诺福克梗的分类概率则为根节点到当前节点的路径上的所有节点概率的乘积

5c3e16b30b9adc16f112e87a6f9a4742.png

  ImageNet1k经过重新标注后,WordTree共1369个节点,每个同级分类使用一个softmax,基于WordTree重新训练Darknet-19,达到71.9% top-1准确率,仅仅降低了一点。从结果来看,大多数错误都是细粒度层级的错误,比如错误的结果也认为当前物体是狗,但是分错了狗的品种,所以这种层级分类应该是有利于引导特征的提取

  • Dataset combination with WordTree
4af8f9b24269218e96d813ee5453288b.png

  将COCO和ImageNet进行合并,得到图6的WordTree,共9418类

  • Joint classification and detection

  由于ImageNet数据过多,对COCO数据集进行4倍过采样。当输入图片是检测数据时,进行全损失函数的反向传播,其中分类的反向传播仅限于GT的标签层级及以上。而当输入图片是分类数据时,则取置信度最高()的bbox进行损失函数的分类部分的反向传播

Training

eacb3a4c4b1ea859a0878de1029830da.png

来源: https://towardsdatascience.com/training-object-detection-yolov2-from-scratch-using-cyclic-learning-rates-b3364f7e4755

  YOLOv2跟YOLOv1类似,先将GT根据中心点赋予对应的格子IOU最大的bbox(这里网上有的实现用为IOU最大的anchor,作者的实现为bbox,待考证),损失计算包含3部分:

  • 对应格子中最大的bbox的IOU小于thresh的bbox,只回归objectness,导向0
  • 对于有GT的bbox,回归所有loss
  • 对于所有的box,在前12800次迭代回归其与预设框的坐标,这是由于本身的坐标回归就很少,在前期让预测先拟合anchor来稳定训练

总结

  YOLOv2在YOLO的基础上融合了一些比较work的方法,进行了大量的改进:

  • 加入Batch Normalization
  • 为主干网络训练进行高分辨率的fine tune
  • 加入anchor box机制
  • 使用k-mean来辅助anchor的设定
  • 沿用YOLO的方法对anchor中心点进行修正
  • 使用passthrough layer,融合低维度特征
  • 使用multi-scale trainning提高准确率
  • 提出darknet-19来加速
  • 使用hierarchical classification进行超多目标的分类

YOLOv3


1ae1346bb54864eb52ffccde7c8667f0.png

论文: YOLOv3: An Incremental Improvement

  • 论文地址:https://arxiv.org/abs/1804.02767

Introduction

e2f611a3383994ab7c7eb26975daac0d.png

  YOLOv3的发表不是一篇完整的论文,是作者把手上的一些小工作进行整理,主要是将一些有效的trick加进去

Bounding Box Prediction

013911ab71f95b1378e471e7f4cb63e9.png

  YOLOv3的整体坐标回归跟YOLOv2类似,依然用逻辑回归函数预测anchor的objectness,每个GT只赋予一个IOU最大的anchor产生全部损失(论文写的是bounding box prior不是bounding box,即预设的框,这样可以找到计算的level,大致作用跟原来差不多,但作者实现用的bounding box,待考证),其它的与GT的IOU大于0.5的anchor不产生任何损失,而与GT的IOU小于0.5的anchor则只产生objectness loss

Class Prediction

  为了支持多标签,使用独立的逻辑分类进行class prediction,使用二值交叉熵损失函数进行训练

Predictions Across Scales

  YOLOv3在3个不同的特征图进行bbox预测,这些特征图用类似FPN的方法,对高层特征进行上采用然后和低层concatenate,每层特征图有特定使用的3个anchor,先用几个卷积层对合并特征图进行处理,然后预测一个3-d tensor,分别包含位置信息,objectness信息和类别信息。例如COCO中,tensor的大小的数据,即channel为255

Feature Extractor

0b1bdf197ddb53e4b69dea8eaafe2e92.png

  YOLOv3提出了新主干网络Darknet-53,将DarkNet-19和残差网络进行融合,在之前的卷积和卷积组合基础上加上一个shortcut连接

2c7055d25e03567d3d679ff0ce181dc3.png

  DarkNet-53准确率跟目前的SOTA分类网络差不多,但是速度快很多

Main Result

36666be89dd7d4a5653a9f74bcbed74a.png
1f89b27004a43ea432a32ddcd2cae980.png

总结

  YOLOv3是个非正式的版本,作者的改进比较少,主要是融合一些用于提高准确率的方法:

  • 将类别置信度预测改为逻辑独立分类
  • 结合FPN的结构进行多level的预测
  • 提出Darknet-53,将shortcut连接加入到网络中

Conclusion


  YOLO系列是目标检测领域里十分经典的结构,虽然目前已经出了很多更高质量更复杂的网络,但YOLO的结构依然可以给算法工程师们带来很多的启发。这3篇论文看下来,感觉像是一本调参说明书,教你如何提高手上的目标检测网络的准确率,各种trick,十分值得研读

如果本文对你有帮助,麻烦点个赞或在看呗~ 更多内容请关注 微信公众号【晓飞的算法工程笔记】

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值