一. 背景
在上次我们利用YOLOv3做目标检测的任务中(参考文章:从0开始实现目标检测——实践篇),我们遗留一些问题,其中一个是利用YOLOv5做一次对比,既然是对比,也就是在数据集不变的情况下,基于YOLOv5进行训练,看看整个模型的mAP是否有变化。整个过程也分为以下4步:
- 为什么是YOLOv5 ?
- 安装体验YOLOv5,并跑通基于公开数据训练YOLOv5
- 基于自己的数据训练YOLOv5
- 计算mAP
那么,我们开始吧~
二. 为什么是YOLOv5?
基于对目标检测原理的探究(参考文章:从0开始实现目标检测——原理篇),我们知道了YOLO系列的算法思想:它不使用窗口滑动,而是直接将原始图片分割成互不重合的小方块,然后通过卷积最后生产这样大小的特征图,可以认为特征图的每个元素也是对应原始图片的一个小方块,然后用每个元素来可以预测那些中心点在该小方格内的目标。
YOLO系列的算法都是基于这个思想实现的。对比YOLOv3,YOLOv5在整个神经网络分为4个部分的改进如下:
- Input:数据加载使用了3种数据增强:缩放、色彩空间调整和马赛克增强。
- BackBone:结合了很多先进的图像识别领域的内容和算法,包括:CSPNet、Leaky ReLU和Sigmoid 激活函数。
- Neck:在BackBone和最后的输出层之间往往会插入一些层,这里就加入了SPP-Net、FPN+PAN结构。
- Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数GIOU Loss,加快了收敛速度。
此外,YOLOv5还增加了自适应锚定框的功能,这样就不用根据不同训练数据调整锚定框的大小和位置了。
在这些改进下,YOLOv5在兼顾mAP的同时,有着更短的检测时间,同时YOLOv5s的权重文件大小只有27MB,能够更好的适应嵌入式设备和移动设备。这里有张官方的性能图参考,如下:
简单解释下YOLOv5上新增的技术点中的2个:
SPP-Net:神经网络是需要输入固定尺寸的图片,比如224x224、32x32、96x96等。这样对于我们希望检测各种大小的图片的时候,需要经过crop,或者warp等一系列操作,这都在一定程度上导致图片信息的丢失和变形,限制了识别精确度。而且,从生理学角度出发,人眼看到一个图片时,大脑会首先认为这是一个整体,而不会进行crop和warp,所以更有可能的是,我们的大脑通过搜集一些浅层的信息,在更深层才识别出这些任意形状的目标。SPP-Net对这些网络中存在的缺点进行了改进,基本思想是,输入整张图像,提取出整张图像的特征图,然后利用空间关系从整张图像的特征图中,在池化层中提取各个区域的特征。一个正常的深度网络由两部分组成,卷积部分和全连