[YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122369993
目录
第1章 网络总体结构
1.1 网络数据处理流程
1.2 网络总体结构
第2章 骨干网自网络
2.1 Focus网络
Focus层是yolov5中首先提出来的网络,这个操作非常类似于yolov2中的PassThrough层:将w-h平面上的信息转换到通道维度,再通过卷积的方式提取不同特征。
采用Focus层的目的应该是下采样(下采样在神经网络中主要是为了减少参数量达到降维的作用,同时还能增加局部感受野),但是相比于使用使用步长为2的卷积层或者池化层,Focus层能够有效减少下采样带来的信息损失,同时减少计算量。
- 假如输入图片大小为[3, 640, 640]
- 首先,对其进行非连续的间隔性的切片操作,如上图的黄色、红色、蓝色、绿色4种切分,这样每张图变成了原来大小的1/4, 即[4,3, 160 ,160] ,其中4表示4组。
- 然后,把所有相同颜色的切片排列在一起。
- 最后,通过concat操作,把所有图片连接到一起变成[12, 160, 160]的图片,即channel=12,size = 160 * 160的图片。
- 最后把这个新的图片送入到卷积神经网络中提取特征。
2.2 Hard-Swish激活函数
(1)Hard-Swish激活函数在网络中的位置
(2)Hard-Swish激活函数定义
(3)Hard-Swish激活函数图像
(4)Hard-Swish激活函数的梯度图像
2.3 CSP1_x网络
该网络结构的目标是:
- 增强了CNN的学习能力,能够在轻量化的同时保持准确性。
- 降低计算瓶颈。
- 降低内存成本。
作者认为在神经网络推理过程中计算量过高的问题是由于网络优化中的梯度信息重复导致的。CSPNet通过将梯度的变化从头到尾地集成到特征图中,在减少了计算量的同时可以保证准确率。
CSPNet不仅仅是一个网络,更是一个处理思想,可以和ResNet、ResNext、DenseNet、EfficientNet等网络结合。
2.4 SPP网络
SPP-Net是一种可以不用考虑图像大小,输出图像固定长度网络结构,并且可以做到在图像变形情况下表现稳定。
SPP-net在YOLO V3开始就引入的一个网络结构。
增加SPP网络后,输入图片的大小可以是任意尺度。
增加SPP网络后,能够支持不同尺度的图片的训练,防止过拟合,增加网络的泛化能力。
第3章 Neck/F-PAN子网络
3.1 YOLO V3的图像金字塔结构
3.2 YOLO V4的路径聚合网络PAN
路径聚合网络能够把图像金字塔获得的不同层的特征,进行了进一步的聚合与融合,得到新的特征,而这些新的特征作为后续分类和定位的特征信息,如下图所示:
YOLO V4新特征的聚合,采用的不是累计和,而是采用的拼接融合,如下图所示:
拼接融合与累计融合相比:
- 拼接融合比累计融合,获得的最终特征的数量更多,需要的内存更大。
3.3 F-PAN
F-PAN的目标是:
- 既能够提取小目标的局部特征,也能够提取大目标的宏观各种。
- 大目标检测时,只需要高层的宏观特征。
- 小目标检测时,不仅仅依靠小目标浅层的局部特征,还依赖高层的宏观各种。
第4章 目标预测(检测)结构化输出
YOLO V5的输出与YOLO V3的结构化输出类似。
4.1 YOLO V3的输出
YOLO V3的前向输出,不是简单的单一尺寸的输出。
它三种不同张量的结构化输出(结构体Struct,而不是联合体Union)
13 * 13 * 3 * 85 = 13*13*255 # 高层特征抽象,检测大目标, 5:定位信息 + 80:分类
26 * 26 * 3 * 85 = 26*26*255 # 中层特征抽象,检测中目标, 5:定位信息 + 80:分类
52 * 52 * 3 * 85 = 52*52*255 # 底层特征抽象,检测小目标, 5:定位信息 + 80:分类
高层:13 * 13, 每个网格指定3个Bounding Box,用于大目标检测,同时能检查13 * 13 * 3 = 507个大目标。
中层:26 * 26, 每个网格指定3个Bounding Box,用于中目标检测,同时能检查26 * 26 * 3 = 26 * 26 * 3 = 2028个中目标。
底层:52 * 52, 每个网格指定3个Bounding Box,用于小目标检测,同时能检查52 * 52 * 3 = 52 * 52 * 3 = 8112个小目标。
这样,网格的总数 = 13 * 13 + 26 * 26 + 52 * 52 = 169(适合大目标) + 676(适合中目标) + 2704(适合小 目标)。
详细参考:
4.2 YOLO V5的输出
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122369993
以上是关于[YOLO专题-23]:YOLO V5 - ultralytics代码解析-网络子结构详解的主要内容,如果未能解决你的问题,请参考以下文章
[YOLO专题-18]:YOLO V5 - ultralytics代码解析-总体架构
[YOLO专题-22]:YOLO V5 - ultralytics代码解析-超参数详解
[YOLO专题-21]:YOLO V5 - ultralytics代码解析-网络配置文件与总体结构
[YOLO专题-19]:YOLO V5 - ultralytics代码解析-dataloader数据加载机制