修改YOLOv5的模型结构

编程入门 行业动态 更新时间:2024-10-09 19:16:21

修改YOLOv5的<a href=https://www.elefans.com/category/jswz/34/1771358.html style=模型结构"/>

修改YOLOv5的模型结构

YOLOv5 模型结构

C3模块结构图

修改目标

修改目标是移除C3模块concat后的卷积操作

YOLOv5的模型存储在项目目录下的models目录中。

  • 一些以yaml为后缀的文件保存了一些模型的超参数,通过不同的参数,形成了yolov5s,yolov5n,yolov5l等不同参数等级,不同性能的网络模型。
  • segment文件夹保存的是用于分割的配置
  • experimental.py 文件中保存了一些实验性质的模块
  • tf.py是tensorflow版本的YOLOv5
  • yolo.py 是pytorch版本的YOLOv5,这个文件中主要存放了yolo专用的模型
  • common.py 是pytorch版本的,YOLO用到的一些基本模块,例如上图中的C3模块、Conv卷积块、Bottleneck瓶颈块等。

要想实现修改C3模块,就要从common.py入手。

common.py的简单介绍

common.py中实现了yolov5所用到的一些模块

  • 将卷积、归一化、和激活函数合并成一个Conv模块
  • 将通道数先缩小后放大的Bottleneck模块
  • 结合跳跃连接、Conv、Bottleneck模块的C3模块
  • 为了下采样、降低计算量用的Focus模块
  • 融合多尺度特征的SPP(Sptaial Pyramid Pooling,空间金字塔)模块

然后在上层又创建了AutoShape进行非模型本身的预处理、后处理过程;创建了Detections用于控制检测的过程,记录状态等;创建了Classify用于二级分类。

修改代码

通过阅读源代码可知,想要删除上图中,concat后面的Conv模块,就要让concat的结果能够满足代码中原本cv3的输出格式。可以发现默认的伸缩因子就是0.5,会把cv1和cv2的输出变成c2的一半。这样concat后刚好就是c2,可以直接移除cv3层。但是有可能会出现c3是奇数的情况,这种时候我将通道大的部分分给了bottleneck模块。
修改后的代码如下:


训练修改后的模型,得到的准确率如下:

对比修改前的模型运行准确率:

对比修改前后的准确率,可以发现这层卷积的影响还是很大的,总体的准确率下降了5%。猜测是连接后的特征图直接进行接下来的处理,不能使C3模块两条向前传播的线路捕捉的特征很好的融合到一起,从而影响模型的准确率。

更多推荐

修改YOLOv5的模型结构

本文发布于:2023-11-17 05:01:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1638442.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模型   结构

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!