文章目录[隐藏]
YOLO系列总结反思
回顾了一下之前看过的YOLO系列,本来想自己从头写一个博客,后来发现大佬都写的极其好了,就变成了阅读笔记。
深度学习论文学习流程:
- 首先搜索一下相关的论文讲解
- 在对原论文进行学习
- 代码核心部分:
- 网络搭建
- 数据处理
- loss
YOLO系列理论:
各个系列的YOLO资源如下:
01 YOLOV1
-
- 很好的初步理解,并且可以结合原文有一下补充讲解。
-
-
输入图片划分为
7
×
7
7 \times 7
7×7网格,对每个网格单独进行检测,但是这里有一个问题就是YOLO为什么能够检测比Grid_Cell(网格)大很多的物体?
- 其实YOLO的做法并不是把每个单独的网格输入到模型,而是在训练阶段通过网格对物体的中心点位置进行划分之用,没有对网络进行切片(网格没有脱落整体关系)
-
网络结构基本思想是:预测位置、大小及物体分类都是通过CNN暴力Predict预测出来的。
-
YOLOV1总体价值:
-
L
e
a
k
y
−
R
e
L
U
Leaky-ReLU
Leaky−ReLU:不会直接让负数为0,但会衰减负数的输出
y
=
{
x
x
>
0
0.1
x
o
t
h
e
r
w
i
s
e
y = \begin{cases} x &x>0 \\ 0.1x&otherwise \\ \end{cases}
y={x0.1xx>0otherwise
-
分而治之:用网络来划分图片区域,每块区域独立检测目标
-
端到端的训练:损失函数的反向传播可以贯彻整个网络,这本身也是One-Stage检测方法的游戏
-
-
-
- YOLOV1的思路:直接在输出层回归Bouding box的位置和Bounding Box所属的类别(整张图作为Inputs,将目标检测问题转换为一个回归的问题)
- 最后输出
7
×
7
×
30
7 \times 7 \times 30
02 YOLOV2
-
- 能够比较直接简单的理解YOLOv2模型,但是还是需要进一步看一些其他博客和原文进行补充。
-
- Batch Normalization:模型收敛带来显著的提升,并且同时消除其他正则化的必要。
- High Resolution Classifier:输入图形分辨率的提升问题,显著来看是必然的。
- Anchor机制的引入:但是对其理解还是需要在看一下其他博客(主要是看看Faster-Rcnn的讲解)
- Direct location prediction: 可以参照霹雳吧啦的视频讲解
-
- PassThrough:
03 YOLOV3
-
- 能够比较直接简单的理解YOLOv2模型,但是还是需要进一步看一些其他博客和原文进行补充。
- 附带了IOU系列和 Focal Loss的讲解
- 能够比较直接简单的理解YOLOv2模型,但是还是需要进一步看一些其他博客和原文进行补充。
-
- YOLO系列的每一代提升,很大一部分取决于BackBone网络的提升
- BackBone:整个V3的结果是没有池化层和全连接层的
- 前向传播过程,张量的尺寸变换是通过改变卷积核的步长来实现(充当池化层的作用,相较于YOLOV2)
- OutPut:预测头的改进
- YOLOV3每个网格预测3个Box,所以每个Box需要(x, y, w, h, confidence)五个基本参数和80个类别概率,所以
3
×
(
5
+
80
)
=
255
3 \times(5+80) = 255
- YOLOV1的输出头是
(
7
×
7
×
30
)
(7\times7 \times30)
- YOLOV3每个网格预测3个Box,所以每个Box需要(x, y, w, h, confidence)五个基本参数和80个类别概率,所以
04 YOLOV3-SPP
- YOLO系列-霹雳吧啦Wz
- 可以结合其的代码配套解析,进一步深入理解YOLOV3-SPP
05 YOLOV4
- YOLOv4-小小小绿叶
- YOLOV4-江大白
- 输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练
- Augmentation for small object detection一文中对大中小目标进行了区分
- **BackBone主干网络:**将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock
- Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN结构
- 在YOLOV4中
76
×
76
76 \times 76
38
×
38
38 \times 38
19
×
19
19 \times 19
- 在YOLOV4中
- Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms
- 输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练
06 YOLOV5
-
- Focus:是不是和YOLOV2中的PassThrought类似?
-
-
自适应锚框:Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
-
小目标检测问题(这里有个感受野计算的问题):
-
以网络的输入608*608为例,yolov3、yolov4,yolov5中下采样都使用了5次,因此最后的特征图大小是19*19,38*38,76*76。
-
三个特征图中,最大的7676负责检测小目标,而对应到608608上,每格特征图的感受野是608/76=8*8大小。
-
再将608608对应到76802160上,以最长边7680为例,7680/608*8=101。
即如果原始图像中目标的宽或高小于101像素,网络很难学习到目标的特征信息。
-
-
07 YOLOX
- YOLOX-江大白
- **输入端:**Strong augmentation数据增强
- 最后几个epoch时Moasic、Mixup增强都会被关掉(由于采取了更强的数据增强方式,作者在研究中发现,ImageNet预训练将毫无意义,因此,所有的模型,均是从头开始训练的。)
- **BackBone主干网络:**主干网络没有什么变化,还是Darknet53。
- Neck:没有什么变化,Yolov3 baseline的Neck层还是FPN结构。
- Prediction:Decoupled Head、End-to-End YOLO、Anchor-free、Multi positives。
- Decoupled Head:只是概率Head部分的网络结构就可了吗?
- Anchor-Free:
- 同样输入大小下,参数量减少了
2
/
3
2/3
- 怎么实现预测的?需要反复去理解
- 同样输入大小下,参数量减少了
- Yolov5s和Yolox-s主要区别:
- **输入端:**在Mosa数据增强的基础上,增加了Mixup数据增强效果;
- **Backbone:**激活函数采用SiLU函数;
- **Neck:**激活函数采用SiLU函数
- **输出端:**检测头改为Decoupled Head、采用anchor free、multi positives、SimOTA的方式。
- **输入端:**Strong augmentation数据增强
版权声明:本文为CSDN博主「你好啊:)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Leomn_J/article/details/121773986
暂无评论