yolov5解析|第三篇:如何改进yolov5?(代码片段)

K同学啊 K同学啊     2022-10-20     146

关键词:

大家好,我是K同学啊!

在前面的文章YOLOv5解析 | 第二篇:用YOLOv5训练自己的数据集(超级详细完整版)中我们介绍了使用训练自己的数据集。

这一篇文章,我将带大家一起解析 YOLOv56.0 版本结构并改进模型,先看看我们模型结构图~

由于YOLOv5存在多个版本,所以你在网上可能会看到许多不同版本是网络结构图。(这里放的是最新的YOLOv56.0 版本结构图

文章目录

一、YOLOv5的结构文件

我们如何找到YOLOv5的结构文件?

文件定位:…/models/***.yaml

你将会看到YOLOv5又分为YOLOv5lYOLOv5mYOLOv5nYOLOv5sYOLOv5x五个版本,这五个版本唯一的区别是网络深度(depth_multiple)与宽度(width_multiple)不一样,这里先不展开,你只需要知道这几个家伙都是YOLOv5只是有细微区别即可。下文我将以YOLOv5s为模板展开介绍。

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

二、如何修改网络结构

对于网络结构的修改我们需要改动的文件如下:

  • ./models/yolov5s.yaml
  • ./models/common.py
  • ./models/yolo.py

举例,我现在要将YOLOv5s中的一个C3模块修改为自定义的C3KTongxue模块,我们需要做哪些工作呢?

1. 修改yolov5s.yaml文件

第一步,定位你想修改的那个C3模块的位置,将名字C3修改为C3KTongxue(注意根据你自定义的模块修改相关参数)。

2. 修改common.py文件

第二步,在common.py文件中添加自定义模块C3KTongxue的代码实现类

3. 修改yolo.py文件

第三步,在yolo.py文件中的相关位置添加上自定义模块C3KTongxue(位置已经下图中标明)。

yolov5改进技巧详解(代码片段)

本文以yolov5-7.0的代码进行讲解yolov5的改进技巧。1.使用yolov5-p6以及yolov5-p7模型yolov5官方实现的代码,提供了多种架构的模型配置文件,包括:yolov3-spp,yolov5-bifpn,yolov5-p6,yolov5-p7,yolov5-panet,yolov5-transformer如果想训练不同架构的模型,... 查看详情

yolov5改进之yolov5+gsconv+slimneck(代码片段)

论文题目:Slim-neckbyGSConv:Abetterdesignparadigmofdetectorarchitecturesforautonomousvehicles论文:https://arxiv.org/abs/2206.02424代码:https://github.com/AlanLi1997/Slim-neck-by-GSConv直接步入 查看详情

目标检测yolov5:模型构建解析(代码片段)

...在看一些目标检测的最新论文和代码,大多数都是在YOLOv5的基础上进行魔改。改的最多的基本是原版本的网络结构,这篇博文就从源码角度来解析YOLOv5中,模型是如何构建出来的。本文使用的是YOLOv5-5.0版本。模型的... 查看详情

yolov5改进助力涨点

🚀🚀🚀对YOLOv5进行一系列改进,助力模型涨点(具体源码可以私信我)看到都会回复YOLOv5改进损失函数(EIOU、alphaIOU等)📈添加注意力机制(CBAM、SE等)📌结合最新特征金字塔网... 查看详情

yolov5/v7进阶实战|目录|安卓|pyqt5|剪枝✂️|蒸馏⚗️|flaskweb|改进教程

YOLOv5/v7进阶实战|目录|安卓|PyQt5|剪枝|蒸馏|FlaskWeb本专栏包含超多YOLO算法进阶使用教程;我会用最简练的语言让你用最低的时间成本掌握下面的内容,使用过程中有任何问题都可以与本人联系~专栏地址:点击跳转整体... 查看详情

翻译:yolov5新版本——改进与评估(代码片段)

2020年6月25日,第一个正式版YOLOv5由Ultralytics发布。在这篇文章中,我们将讨论第一个YOLOv5版本中部署的新技术,并分析新模型的初步性能结果。6/25-YOLOv5的初始版本显示了最先进的对象检测的前景(引用YOLOv5存储... 查看详情

yolov5全面解析教程②:如何制作训练效果更好的数据集(代码片段)

撰文| Fengwen,BBuf本文主要介绍One-YOLOv5使用的数据集格式以及如何制作一个可以获得更好训练效果的数据集。本节教程的数据集标准部分翻译了Ultralytics/YOLOv5wiki中对数据集相关的描述(https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Tra... 查看详情

python基于融合spd-conv改进yolov5与原生yolov5模型实践路面裂痕裂缝检测

...升模型的检测效果,今天正好有时间就想基于SPD融合yolov5s模型来开发路面裂痕裂缝检测模型,同时与原生的yolov5s模型进行对比分析,首先看下效果图。接下来看下数据情况。标注文件如下:原生yolov5s模型文件如... 查看详情

yolov5解析|第一篇:快速部署yolov5模型(代码片段)

大家好,我是『K同学啊』!拖了好久,终于要开始目标检测系列了。自己想过好几次,想尽快出几期目标检测算法的博客教程,但是一直苦于不知道如何写,才能让大家轻松、快速、高效的入门目标检测... 查看详情

目标识别yolov5针对小目标检测的改进模型/添加帧率检测(代码片段)

问题背景众所周知,YOLOv5会对输入的图片进行放缩,并进行32倍下采样。对于一些分辨率很高的遥感/无人机图片,小目标难以被训练识别。本篇博文就来尝试这篇博文YOLOV5模型和代码修改——针对小目标识别所提到的... 查看详情

yolov5解析|第二篇:用yolov5训练自己的数据集(超级详细完整版)(代码片段)

大家好,我是K同学啊!我们接着上一篇文章YOLOv5解析|第一篇:快速部署YOLOv5模型配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据。(在开始本教程前,记得先跑一遍入门篇,确保其他... 查看详情

yolov5解析|第二篇:用yolov5训练自己的数据集(超级详细完整版)(代码片段)

大家好,我是K同学啊!我们接着上一篇文章YOLOv5解析|第一篇:快速部署YOLOv5模型配置完YOLOv5需要的环境后,今天我们试着用YOLOv5训练自己的数据。(在开始本教程前,记得先跑一遍入门篇,确保其他... 查看详情

改进yolov5系列:增加swin-transformer小目标检测头(代码片段)

💡统一使用YOLOv5代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含【Backbone特征主干】、【Neck特征融合】、【Head检测头】、【注意力机制】、【IoU损失... 查看详情

改进yolov5系列:首发结合最新extendedefficientlayeraggregationnetworks结构,高效的聚合网络设计,提升性能

查看详情

改进yolov5系列:4.yolov5_最新mobileone结构换backbone修改,超轻量型架构,移动端仅需1ms推理!苹果最新移动端高效主干网络(代码片段)

🚀🚀🚀YOLOv5改进,适用于YOLOv7、YOLOv4、Scaled_YOLOv4、YOLOv3、YOLOR一系列YOLO算法的模块改进🎈🎈🎈QAQ一系列YOLO算法改进Trick排列组合!很多Trick排列组合助力论文实验🏆数据集涨点🏆创新 查看详情

改进yolov5系列:8.增加acmix结构的修改,自注意力和卷积集成(代码片段)

...进🏆、创新点改进👇💡YOLOAir项目:基于YOLOv5代码框架,结合不同模块来构建不同的YOLO目标检测模型。🌟本项目包含大量的改进方式,降低改进难度,改进点包含Backbone、Neck、Head、注意力机制、IoU损失函数... 查看详情

yolov5坐标相关的判断与转换,评价指标,训练结果解析

文章大纲工程化实现为什么推荐yolov5yolo坐标归一化像素坐标转yoloyolo坐标转像素坐标yolov5坐标的输出,抠图评价指标训练与模型优化参考文献与学习路径工程化实现为什么推荐yolov5可以看看下面的issue,这是我在使用中发现的,y... 查看详情

yolov5坐标相关的判断与转换,评价指标,训练结果解析

文章大纲工程化实现为什么推荐yolov5yolo坐标归一化像素坐标转yoloyolo坐标转像素坐标yolov5坐标的输出,抠图评价指标训练与模型优化参考文献与学习路径工程化实现为什么推荐yolov5可以看看下面的issue,这是我在使用中发现的,y... 查看详情