北京煜邦电力技术股份有限公司 北京市 100000
摘要:目标检测(Object Detection)是计算机视觉领域的基本任务之一,学术界已有较长时间深入地研究历史。近些年随着深度学习技术的火热发展,目标检测算法也从基于手工特征的传统算法转向了基于深度神经网络的检测技术。本文广泛调研国内外目标检测方法,主要介绍一阶段目标检测算法——YOLO(You Only Look Once)系列的发展历程。
关键词:目标检测,YOLO,发展历程
一、研究背景
从 2006 年以来,在 Hinton、Bengio、Lecun 等人的引领下,大量深度神经网络的论文被发表,尤其是 2012 年,Hinton课题组首次参加 ImageNet图像识别比赛,其通过构建的 CNN 网络AlexNet[1]一举夺魁,从此神经网络开始受到广泛的关注。深度学习利用多层计算模型来学习抽象的数据表示,能够发现大数据中的复杂结构,目前,这项技术已成功地应用在计算机视觉、自然语言处理、语音识别等领域在内的多种模式分类问题上。
目标检测的任务是找出图像或视频中感兴趣的物体,同时能够定位出其位置。Joseph Redmon于2015年提出YOLO算法[2]是单阶段目标检测算法的开山鼻祖,跟R.Girshick于2014年提出的RCNN[3]系列两阶段目标算法一起引领基于深度学习的目标检测算法的发展。两者的主要区别在于两阶段算法需要先生成候选框(一个有可能包含待检物体的预选框),然后进一步实现目标检测。而一阶段算法会直接在网络中提取特征来预测目标所属的类别和位置。两者优缺点及主要算法汇总如下表1所示:
表1 One-stage和Two-stage算法比较
比较内容 | One-stage算法 | Two-stage算法 |
主要算法 | YOLO系列,SSD系列,Retina-Net,DetectNet,SqueezeDet | RCNN系列,SPPNet,R-FCN |
优点 | 速度快;数据处理机制好 | 精度高;共享计算量 |
缺点 | 精度低,小目标的检测效果不好 | 速度慢 |
从目前的研究来看,部署端一般使用One-stage算法,而在One-stage算法中应用最多的是具备实时检测能力的YOLO系列,因此本文着重介绍YOLO系列。
二、YOLO的设计思想
YOLO,即神经网络只需要看一次图片,就能输出结果。其检测流程如下:
三、YOLO系列算法的发展历程
目标检测算法YOLO系列发展至今主要包含了v1、v2、v3、v4和v5以及针对每个版本的改进系列。
3.1 YOLOv1
之前 Two-stage 方法如 R-CNN 把检测问题分成两部分,先生成候选区域,再用分类器对区域分类,多阶段训练导致不易优化。而Joseph Redmon提出的YOLOv1[2],主要贡献在于:开发出实时高性能目标检测的one-stage检测框架,只需要将图像一次性输入到网络中即可预测出图像中目标的位置和类别。
3.2 YOLOv2
针对v1存在的检测目标的准确度不高、定位不准很多目标找不到的两个显著不足,YOLOv2[4]进行了改进。主要的改进之处在于: (1)借鉴RCNN系列,不直接预测框的大小,改为预测基于栅格的偏移值。除此之外,直接预测位置会导致神经网络在一开始训练时不稳定,使用偏移量会使得训练过程更加稳定,性能指标提升了5%左右;(2)把分割输入图像为7*7个栅格改为13*13,每个栅格有5个锚框(anchor)。
3.3 YOLOv3
3.3.1 标准算法
YOLOv3[5]同样吸收了当时学术界的最新成果,在v2的基础上借鉴了残差网络(Residual network,ResNet)思想,使用了darknet-53,解决梯度消失或者梯度爆炸的问题。此外,YOLOv3还解决了一个大问题,即小目标的检测。之前两版模型对小目标检测效果不好的原因在于,事先已经划分好了固定大小的栅格,对于小目标格子偏大,对于大目标格子又偏小。YOLOv3给出的解决方案是分别对输入图像32倍下采样、16倍下采样、8倍下采样,去预测大、中、小目标。32倍下采样每个点感受野更大,所以去预测大目标,8倍下采样每个点感受野最小,所以去预测小目标。结果发现对不同目标预测地更准确了,性能又提升了。
3.3.2 改进算法POLY-YOLO
基于Yolov3存在的标签重写与在输出尺度上锚点分布不平衡的问题,论文作者提出了POLY-YOLO架构进行优化。改动如下:
(1) 网络方面,为了减少参数量,首先减少了通道数目,同时为了提高性能,引入了SE单元来加强特征
(2) 和yolov3的最大区别是输出层是一个,但是也采用了多尺度融合方式
(3)网络部分提出了上采样操作
3.4 YOLOv4
YOLOv43由俄罗斯独立研究员Alexey Bochkovskiy继承了YOLO系列后开发,集百家之长,不断尝试优化。改进之处有(1)输入端:采用Mosaic数据增强;(2)主干网络采用了CSPDarknet53、Mish激活函数、Dropblock等方式;(3)Neck:采用了SPP、FPN+PAN结构;(4)输出端:采用CIOU_Loss、DIOU_nms操作。
3.5 YOLOv5
在YOLOv5网络中,最大的创新点在于将网络结构做成了可选择配置的方式。比如主干网络结构,根据各个网络的宽度、高度不同,可以分为Yolov5s、Yolov5m、Yolov5l、Yolov5x等版本。这种转变,在目标检测领域,引领了一股网络拆分的热潮。
在我们的输电线路缺陷检测任务中,主要采用Yolov5系列模型。我们的数据如下图1所示,有鸟窝、异物、绝缘子自爆等缺陷:
图1:输电线路缺陷检测数据
3.6 YOLOX
在设计算法时,为了对比改进策略的好坏,常常需要选择基准的模型算法。Yolox模型以性能更优的Yolov3_spp为基准。Yolov3_spp在v3基础上加入了spp组件。
Yolox系列与YOLOv5系列相比较,主要区别在于:(1)输入端:在Mosaic数据增强的基础上,增加了Mixup;(2)激活函数采用SiLU函数;(3)输出端:检测头改为解耦合头、采用锚点自适应的方式。
Yolox模型,还可以变为多种可选配的网络,比如标准网络结构和轻量级网络结构。标准网络结构包括Yolox-s、Yolox-m、Yolox-l、Yolox-x、Yolox-Darknet53。轻量级网络结构有Yolox-Nano、Yolox-Tiny。在实际的项目中,可以根据不同项目需求,进行挑选使用。
四、总结与展望
通过本文的调研与总结,可以发现One-stage算法中的YOLO系列在目标检测任务中不断改进与优化,不断地调整以适应不同的框架、不同的部署方式,以满足不同的项目需要。但对于真实场景下的应用还存在一定差距,目标检测这一基本任务仍然是非常具有挑战性的课题,存在很大的提升潜力和空间。我们的检测算法也是需要不断地改进与优化。
参考文献
[1]Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[J]. Advances in neural information processing systems, 2012, 25(2).
[2]Redmon J , pvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[C]. Computer Vision & Pattern Recognition. IEEE, 2016.
[3]R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014
[4]Redmon J , Farhadi A . YOLO9000: Better, Faster, Stronger[C]. IEEE Conference on Computer Vision & Pattern Recognition. IEEE, 2017:6517-6525.
[5]Redmon J , Farhadi A . YOLOv3: An Incremental Improvement[J]. arXiv e-prints, 2018.
[6]Bochkovskiy A , Wang C Y , Liao H . YOLOv4: Optimal Speed and Accuracy of Object Detection[J]. 2020.