YOLOv5代码注释版更新啦,注释的是最近的2021.07.14的版本,且注释更全
github: https://github.com/Laughing-q/yolov5_annotations

YOLOV5网络结构

  • 粗略图
    • yolov5-1.0~4.0
    • yolov5-5.0
  • 详细图
    • yolov5-3.0
    • yolov5-4.0
    • yolov5-5.0

github代码地址: ultralytics\yolov5,v5还在开发当中,目前的网络结构如下图,要是网络结构有更新,笔者也会更新结构图。

2020.7.24:
才画出这个图,作者就更新了v2.0版本,改了网络结构。。。。
所以以下的结构图只适用于yolov5_v1.0版本。
之后笔者再更新v2.0版本的结构图。
2020.7.28:
笔者今天仔细看了一下新的结构yaml配置文件,发现其实网络结构没有变(之前笔者只是大概的看了一下github上的commit记录,看到很多删除和添加,就以为改动很大。。。),他只是把下图中neck部分的第一个BottleneckCSP (1024,1024) x3纳入到了backbone里,然后把output中的卷积Conv2d放到了models/yolo.py/Detect()类里计算,如果更新结构图的话也只是把neck最下面的BottleneckCSP块移到SPP块的下面,所以就暂时不更新结构图了,以下结构图依然适用。
v2.0版本yolov5x mAP有提升,但yolov5s mAP却下降了,目前主要的改变是:训练策略的改变,包括余弦退火的公式更新了,以及类别损失cls_loss的系数gain,对数据进行仿射变换(dataset.py数据增强部分)的超参数进行调整,三个output的损失比重balance的调整。


2020.8.15
yolov5更新了v3.0版本
主要做出的变化是,采用了hardswish激活函数替换CONV(下图右下角模块)模块的LeakyReLu,但是注意:BottleneckCSP模块中的LeakyReLu未被替换,采用了CIOU作为损失函数(但这个更新好像是还在v2.0版本过渡的时候已经更新),还更改了一个默认超参数:translate=0.5 → 0.1(数据增强的仿射系数)。


2020.8.16
结构图已更新,将上述2020.7.28提到的的BottleneckCSP模块纳入到backbone中,并更新CONV模块的激活函数hardswish.


2020.12.25
有读者发现网络结构图有些细节画错了,BottleneckCSP处最后应该是CONV模块,SPP模块concat通道应该是(c_in*2),已更新。


2021.01.06
更新yolov5-4.0网络结构,C3结构替换BottleneckCSP。CONV的激活函数换成SiLU,目前发现的其他改变是三个output的损失比重balance的调整balance = [4.0, 1.0, 0.4] → [4.0, 1.0, 0.3]


2021.04.25
更新yolov5-5.0网络结构,增加一层通道数768的特征图 level,spp模块中的池化由[5,9,13]→[3,5,7]。
(直接照着新的yolov5l6.yaml画的,如果有错请指正,谢谢)

下图括号中四个数字代表:(输入通道、输出通道、卷积核大小、步长);
两个数字代表:(输入通道、输出通道);
一个数字代表:(输出通道);
且上采样是采用nearst插值,两倍上采样;
x N表示堆叠此模块N次。

粗略图

yolov5-1.0~4.0

yolov5-5.0

详细图

yolov5-3.0

v2.0和v1.0就是把下图中CONV模块中hardswish换成leakyrelu即可

yolov5-3.0网络结构图

yolov5-4.0

yolov5-4.0网络结构图

yolov5-5.0

yolov5-5.0网络结构图

至于Focus的部分附上代码帮助理解:

def forward(self, x):  # x(b,c,w,h) -> y(b,4c,w/2,h/2)return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1))

注意:backbone最后一个BottleneckCSP(C3)和neck部分开始的BottleneckCSP(C3)模块便不再使用shortcut残差连接,对应下面配置文件里的False(意为shortcut=False)。
附上yolov5l的配置文件:

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
anchors:- [116,90, 156,198, 373,326]  # P5/32- [30,61, 62,45, 59,119]  # P4/16- [10,13, 16,30, 33,23]  # P3/8# YOLOv5 backbone
backbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, BottleneckCSP, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 9, BottleneckCSP, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, BottleneckCSP, [512]],[-1, 1, Conv, [1024, 3, 2]], # 7-P5/32[-1, 1, SPP, [1024, [5, 9, 13]]],]# YOLOv5 head
head:[[-1, 3, BottleneckCSP, [1024, False]],  # 9[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P4[-1, 3, BottleneckCSP, [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, BottleneckCSP, [256, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 18 (P3/8-small)[-2, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, BottleneckCSP, [512, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 22 (P4/16-medium)[-2, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, BottleneckCSP, [1024, False]],[-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 26 (P5/32-large)[[], 1, Detect, [nc, anchors]],  # Detect(P5, P4, P3)]

附上v2.0和v3.0版本的配置文件:

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
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 backbone
backbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4[-1, 3, BottleneckCSP, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 9, BottleneckCSP, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, BottleneckCSP, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, BottleneckCSP, [1024, False]],  # 9]# YOLOv5 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, BottleneckCSP, [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, BottleneckCSP, [256, False]],  # 17[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, BottleneckCSP, [512, False]],  # 20[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, BottleneckCSP, [1024, False]],  # 23[[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

v4.0

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
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 backbone
backbone:# [from, number, module, args][[-1, 1, Focus, [64, 3]],  # 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, 9, 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, 1, SPP, [1024, [5, 9, 13]]],[-1, 3, C3, [1024, False]],  # 9]# YOLOv5 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)]

v5.0

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple# anchors
anchors:- [ 19,27,  44,40,  38,94 ]  # P3/8- [ 96,68,  86,152,  180,137 ]  # P4/16- [ 140,301,  303,264,  238,542 ]  # P5/32- [ 436,615,  739,380,  925,792 ]  # P6/64# YOLOv5 backbone
backbone:# [from, number, module, args][ [ -1, 1, Focus, [ 64, 3 ] ],  # 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, 9, C3, [ 256 ] ],[ -1, 1, Conv, [ 512, 3, 2 ] ],  # 5-P4/16[ -1, 9, C3, [ 512 ] ],[ -1, 1, Conv, [ 768, 3, 2 ] ],  # 7-P5/32[ -1, 3, C3, [ 768 ] ],[ -1, 1, Conv, [ 1024, 3, 2 ] ],  # 9-P6/64[ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ],[ -1, 3, C3, [ 1024, False ] ],  # 11]# YOLOv5 head
head:[ [ -1, 1, Conv, [ 768, 1, 1 ] ],[ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ],[ [ -1, 8 ], 1, Concat, [ 1 ] ],  # cat backbone P5[ -1, 3, C3, [ 768, False ] ],  # 15[ -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 ] ],  # 19[ -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 ] ],  # 23 (P3/8-small)[ -1, 1, Conv, [ 256, 3, 2 ] ],[ [ -1, 20 ], 1, Concat, [ 1 ] ],  # cat head P4[ -1, 3, C3, [ 512, False ] ],  # 26 (P4/16-medium)[ -1, 1, Conv, [ 512, 3, 2 ] ],[ [ -1, 16 ], 1, Concat, [ 1 ] ],  # cat head P5[ -1, 3, C3, [ 768, False ] ],  # 29 (P5/32-large)[ -1, 1, Conv, [ 768, 3, 2 ] ],[ [ -1, 12 ], 1, Concat, [ 1 ] ],  # cat head P6[ -1, 3, C3, [ 1024, False ] ],  # 32 (P6/64-xlarge)[ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ],  # Detect(P3, P4, P5, P6)]

YOLOV5网络结构相关推荐

  1. YOLOV5网络结构各个模块延伸

    文章目录 1. 整体网络结构 YOLOV3 YOLOV4 YOLOV5 2. 模块 2.1 SPP (Spatial Pyramid Pooling) 1. 整体网络结构 摘自 https://zhu ...

  2. pytorch 研究修改YOLOV5网络结构(记录)

    pytorch 和 paddle 差不多,但是 pytorch 国际使用,应用范围广.paddle 更加适用与公司应用开发,非常容易上手,便于应用,但是不太适合研究(研究者很少使用). git提供的都 ...

  3. 干货 | 当 YOLOv5 遇见 OpenVINO,实现自动检测佩戴口罩

    YOLOv5网络 YOLOv5代码链接: https://github.com/ultralytics/yolov5 YOLOv5 于2020年6月横空出世!一经推出,便得到CV圈的瞩目,目前在各大目 ...

  4. 干货|深入浅出YOLOv5

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|机器学习算法工程师 之前已经对Yolov4的相关基础知识做 ...

  5. 当YOLOv5遇见OpenVINO

    1YOLOv5网络 YOLOv5 于2020年6月发布!一经推出,便得到CV圈的瞩目,目前在各大目标检测竞赛.落地实战项目中得到广泛应用. YOLOv5在COCO上的性能表现: YOLOv5代码链接: ...

  6. 【深度学习】当YOLOv5遇见OpenVINO!

    一.YOLOv5网络 YOLOv5代码链接:https://github.com/ultralytics/yolov5 YOLOv5 于2020年6月发布!一经推出,便得到CV圈的瞩目,目前在各大目标 ...

  7. 吸烟行为检测系统(Python+YOLOv5深度学习模型+清新界面)

    摘要:吸烟行为检测软件用于日常场景下吸烟行为监测,快速准确识别和定位吸烟位置.记录并显示检测结果,辅助公共场所吸烟安全报警等.本文详细介绍吸烟行为检测系统,在介绍算法原理的同时,给出Python的实现 ...

  8. 当YOLOv5遇见OpenVINO!

    一.YOLOv5网络 YOLOv5代码链接:https://github.com/ultralytics/yolov5 YOLOv5 于2020年6月发布!一经推出,便得到CV圈的瞩目,目前在各大目标 ...

  9. 基于YOLOv5的中式快餐店菜品识别系统

    基于YOLOv5的中式快餐店菜品识别系统[金鹰物联智慧食堂项目] 摘要 本文基于YOLOv5v6.1提出了一套适用于中式快餐店的菜品识别自助支付系统,综述了食品识别领域的发展现状,简要介绍了YOLOv ...

  10. (20)目标检测算法之YOLOv5计算预选框、详解anchor计算

    目标检测算法之YOLOv5计算预选框.详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度 众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置 ...

最新文章

  1. mysql查看历史连接数_MySQL如何查看连接数和连接状态
  2. windows批处理的感叹号和变量延迟扩展
  3. flex使用FlexPrintJob打印问题
  4. Celex Update CodeForces - 1358C(打表找规律)
  5. Mysql5.7.20使用group by查询(select *)时出现错误--修改sql mode
  6. P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案
  7. ASP.NET企业开发框架IsLine FrameWork系列之七--AppLogProvider日志框架(上)
  8. 大数据技术在发展 挑战与机遇并存
  9. 美妆类短视频如何定位?可以考虑三个方向,吸粉引流指日可待
  10. Linux批量修改文件名称
  11. mpu6050 z轴校准_MPU6050校准
  12. 封装60秒倒计时vue组件
  13. 计算机目录的制作步骤,怎么用word2003制作目录
  14. java rgb yuv_RGB,CMY(K),YUV,YIQ,YCbCr顏色的轉換算法(java實現)
  15. 智力测验题(面试用)
  16. 最小生成树问题:算法分析 Java 实现
  17. 日语语法(二):名词
  18. HC32L130基于Xmodem协议实现IAP串口在线升级
  19. 适合学生党的蓝牙耳机选哪个?学生党最爱的几款蓝牙耳机
  20. elementui表格获取mysql数据_vue+element-ui表格封装tag使用slot插槽标签

热门文章

  1. 【seaborn】sns.set() 绘图风格设置
  2. 【VirtualBoxUbuntu】VirtualBox中Ubuntu虚拟机磁盘碎片整理并压缩磁盘空间
  3. [NOI 2010]航空管制
  4. mysql 联合主键的作用
  5. 惠普电脑u盘重装系统步骤_惠普笔记本系统重装|惠普笔记本电脑U盘重装系统步骤教程...
  6. 数字化教学资源平台html,数字化教学资源
  7. spring boot + Spring Security 入门
  8. Technorati 2008 年度博客状况报告(第一部分)
  9. 脑机接口:互联网遥远的疆界
  10. HTMLCSS精华知识点——基础标签