YOLO,You Only Look Once,只需看一眼即可识别图像中物品及其位置。属于one-stage 目标检测模型。
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
two-stage 模型:R-CNN系列,包含 fast R-CNN, faster R_CNN,R-FCN和LibraR-CNN。
1) 定位候选框(位置)
2) 将含有单个物体的候选框进行分类(类别)
one-stage 模型:Yolo系列
快!
简称 | 时间 | 作者 | 论文/代码 |
---|---|---|---|
YOLOV1 | 2016.5 | Joseph Redmon | 《You Only Look Once:Unifified, Real-Time Object Detection》 |
YOLOV2 | 2016.12 | Joseph Redmon | 《YOLO9000: Better, Faster, Stronger》 |
YOLOV3 | 2018.4 | Joseph Redmon | 《YOLOv3: An Incremental Improvement》 |
YOLOV4 | 2020.4 | Alexey Bochkovskiy | 《YOLOv4: Optimal Speed and Accuracy of Object Detection》 |
YOLOV5 | 2020.5 | Ultralytics公司 | yolov5 github |
YOLOVX | 2021.8 | 旷视科技研究院 刘松涛 | 《YOLOX: Exceeding YOLO Series in 2021》 github |
YOLOV6 | 2022.06 | 美团 | gitHub |
YOLOV7 | 2022.07.6 | Chien-Yao Wang、Alexey Bochkovskiy, Hong-Yuan Mark Liao | 《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》 github |
将目标检测建模成回归任务,同时预测边界区域和类别。可以端到端训练。
将目标检测建模成回归任务,同时预测边界区域和类别。可以端到端训练。
Intersection over Union 交并比
Intersection:两个框子相交的面积
Union:两个框相并的面积
224×224 ImageNet1000-class数据集 前20层+平均池化层+全连接层
预训练的前20层后追加 随机初始化的4个卷积层 和 2个全连接层。
数据集: PASCAL VOC 2007 and 2012
参数: batch size 64, momentum 0*.9,decay 0.*0005, dropout layer rate = .5 after the first connected layer
训练输入: 448×448
训练输出:每个单元格预测一个类别,构建训练数据。 其中w,h为相对原始图像的缩放比例,在0到1之间。(x,y)为相对网格的偏移值,也在(0,1)之间。
训练阶段, 如果选中区域中不包含物体,则为0,如果包含物体,则为IOU
因为不包含对象的单元格较多,因为会增加权重
输入:448×448×3 固定尺寸
**模型结构:**参见Figure3
输出:共预测7×7×2=98个边界框,示例S=7, B=2, C=20 预测一个边界框(x,y,w,h,p)输出为7×7×(2×5 +20)
非极大值抑制,筛选出最终的结果。在RCNN算法中提出。
1)设定目标框的置信度阈值,常用的阈值是0.5左右
2)根据置信度降序排列候选框列表
3)选取置信度最高的框A添加到输出列表,并将其从候选框列表中删除
4)计算A与候选框列表中的所有框的IoU值,删除大于阈值的候选框
5)重复上述过程,直到候选框列表为空,返回输出列表
Yolov2中网络结构发生了改变,采用DarkNet19网络(有19个卷积层)。去掉全连接层,进行了5次降采样,减少计算量。
Yolov2版本中每个网格要预测 5 个bbox,但是这5个bbox的大小是通过原始图片聚类得到的,将原始图像中物体框通过K-means算法聚成5类,然后取这五类的平均值作为bbox的大小。这样得出的box的大小更符合实际情况,检测效果更好。
距离计算
数据集: ImageNet 1000 class classifification dataset
输入:224 × 224×3
模型结构:
输出:采用global avgpooling做预测
输入:448 × 448×3
输出:13x13x(5*(5+classnum))
10epochs微调
模型结构:
Better, Faster, Stronger
Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用dropout。
Yolov1在训练时用的图片大小时224×224,在检测时Yolov1输入的是448×448大小的图片 ,这样可能会导致模型前后不一致,影响效果。
Yolov2增加了10个epochs 448×448分辨率的微调,然后在detection network上微调。
使用anchor boxes预测边界框。
Yolov1将输入图像分成7×7的网格,每个网格预测2个Bounding Box,因此一共有98个Box。
Yolov2使用了anchor boxes,每个Cell可预测出5个Anchor Box,共13×13×个boxes。
预测中心点在网格中的相对位置,使用sigmoid函数将预测值约束到网格中。
训练过程中每间隔一定的iterations之后改变模型的输入图片大小。增强模型的鲁棒性。
在YOLOv2中没有全连接层,只有卷积层和池化层,因此模型可以接受任意尺寸的输入。采用不同size的样本来训练网络。具体做法为:训练过程中每间隔一定的iterations之后改变模型的输入图片大小。因为下采样率为32,所以选择的尺寸都是32的倍数,具体的范围为
这样的训练过程使得模型能够从不同分辨率的输入中学习,从而对不同分辨率的输入只需要修改对最后检测层就能够进行预测。
YOLOv2输入为416×416,5次池化最终输出为13×13×1024。对于大目标来说,最终的特征图足以提取其特征;
但对于小目标,多次卷积池化后特征不明显,因此需要更精细的特征图(Fine-Grained Features)。YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息
其中,passthrough layer拆分方式如下图所示:
Yolov3 将原来的 darknet-19 改进为darknet-53,引入resnet(残差网络)
使用交叉熵损失函数,而不是softmax
是真正的多尺度,一共有3种尺度,每个尺度有3个先验框,共9个。
分别是13×13,26×26,52×52三种分辨率,分别负责预测大,中,小的物体边框,这种改进对小物体检测更加友好。
Yolov3和Yolov4两个版本的作者发生了变化。
Yolov4则是在Yolov3算法的基础上增加了很多实用的技巧,使得它的速度与精度都得到了极大的提升。
Yolov4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。
核心思想:三个尺寸特征的融合
CBL-CBL模块由Conv+BN+Leaky_relu激活函数组成。
CBM-CBM是Yolov4网络结构中的最小组件,由Conv+BN+Mish激活函数组成。
Res unit-借鉴ResNet网络中的残差结构,用来构建深层网络,CBM是残差模块中的子模块示。
CSPX-借鉴CSPNet网络结构,由卷积层和X个Res unint模块Concate组成而成。
SPP-采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合
在模型训练阶段,做了一些改进操作,主要包括Mosaic数据增强、cmBN、SAT自对抗训练;
融合其它检测算法中的一些新思路,主要包括:CSPDarknet53、Mish激活函数、Dropblock;
目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层,Yolov4中添加了SPP模块、FPN+PAN结构;
(80+5)*3=225
输出层的锚框机制与YOLOv3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的DIOU_nms。
数据集: ImageNet image
输入数据: Mosaic
训练过程:
数据集: MS COCO
训练过程:cmBN
Mosaic数据增强方法则采用了4张图片,并且按照随机缩放、随机裁剪和随机排布的方式进行拼接而成
BN是对当前mini-batch进行归一化,CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,而CmBN则是仅仅在这个Batch中进行累积。
1)生成对抗样本
2)使用对抗样本进行训练
Cross Stage Partial Network 论文链接
resnet -> desenet -> cspnet
优点:减少计算量
CSPNet的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。
CSP模块先将基础层的特征映射划分为两部分,
然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。
是Relu的变体,函数形式如下所示:
其中a为固定参数,通常取0.01。
优点:缓解Relu导致神经元死亡的问题。
缺点:非线性没有ReLU 强大。
使用场景:不适合分类任务,适合回归任务,卷积神经网络隐藏层使用。
Mish激活函数是Leaky_relu算法的基础上改进而来的,更加平滑一些,可以进一步提升模型的精度。
优点:有上限,无下限,光滑,非单调
缺点:计算量大
Dropblock是一种解决模型过拟合的正则化方法,它的作用与Dropout基本相同。Dropout的主要思路是随机的使网络中的一些神经元失活,从而形成一个新的网络。如下图所示,最左边表示原始的输入图片,中间表示经过Dropout操作之后的结果,它使得图像中的一些位置随机失活,Dropblock的作者认为:由于卷积层通常是三层结构,即卷积+激活+池化层,池化层本身就是对相邻单元起作用,因而卷积层对于这种随机丢弃并不敏感。除此之外,即使是随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。最右边表示经过Dropblock操作之后的结果,我们可以发现该操作直接对整个局部区域进行失活(连续的几个位置)。
Spatial Pyramid Pooling(空间金字塔池化结构) 论文链接
通过融合不同大小的最大池化层来获得鲁棒的特征表示。 采用全局最大池化,可以使输出固定。
深层网络容易响应语义特征,浅层网络容易响应图像特征几何信息
FPN, Feature Pyramid Networks,高维度向低维度 捕获强语义特征。
**PAN, **Path Aggregation Network 低纬度向高纬度 传递定位信息。
采用CIOU
特征 | |
---|---|
IOU | 交并比 |
GIOU | 交并比,外接矩形 |
DIOU | 交并比,中心点距离 |
CIOU | 交并比,中心点距离, 长宽比 |
但以下情况无法处理
generalized IoU
相比IOU 添加中心对角距离
Distance-IoU 参考论文
相比IOU 添加中心对角距离和长宽比