当前位置: 首页 > news >正文

5月22日复盘-YOLOV5

5月22日复盘

八、YOLOV5

从YOLOV5开始,就进到了工程化阶段了。

项目:

​ https://github.com/ultralytics/yolov5

1. 与YOLOV4对比

  • 大体结构一致
  • 主干网络是C3-Darknet53
  • 网络最开始增加Focus结构
  • Neck也是采用FPN+PAN,但将卷积变成了CSP
  • 预测损失采用GloU损失

2. Focus模块

先分块,后拼接,再卷积

①、640 x 640 x 3的图像输入Focus结构,采用切片操作,先变成320 x 320 x 12的特征图;

②、再经过一次32个卷积核的卷积操作,最终变成320 x 320 x 32的特征图;

③、目的是加速

计算量的计算公式为:
计算量 = 卷积核尺寸 × 输入通道数 × 输出通道数 × 输出尺寸 2 \begin{aligned}&\text{计算量}=\text{卷积核尺寸}\times\text{输入通道数}\times\text{输出通道数}\times\text{输出尺寸}^2\end{aligned} 计算量=卷积核尺寸×输入通道数×输出通道数×输出尺寸2

F L O P s ( c o n v ) = 3 × 3 × 3 × 32 × 320 × 320 = 88473600 F L O P s ( F o c u s ) = 1 × 1 × 12 × 32 × 320 × 320 = 39321600 \mathrm{FLOPs(conv)}=3\times3\times3\times32\times320\times320=88473600 \\ \mathrm{FLOPs(Focus)}=1\times1\times12\times32\times320\times320=39321600 FLOPs(conv)=3×3×3×32×320×320=88473600FLOPs(Focus)=1×1×12×32×320×320=39321600

3. 整体网络结构

整体结构和YOLOV4非常接近。

在这里插入图片描述

3.1 SiLU 激活函数

  • YOLOv5 的 Backbone 和 Neck 模块和 YOLOv4 中大致一样,都采用 CSPDarkNet 和 FPN+PAN 的结构,但是网络中其他部分进行了调整,其中 YOLOv5 使用的激活函数是 SiLU
  • SiLU(x) = x·Sigmoid(x),具备无上界有下届、平滑、非单调的特性

3.2 bottleneck layery

  • Bottleneck 是用于减少参数和计算量的结构,其设计灵感来自于ResNet,结构如下:

    • 1x1卷积:用于减少特征图的通道数
    • 3x3卷积:用于提取特征,后接一个 Batch Normalization 层和 ReLU 激活函数
    • 1x1卷积:用于恢复特征图的通道数,后接一个BN层
    • 跳跃连接(Shortcut):将输入直接加到输出上,以形成残差连接

在这里插入图片描述

3.3 C3代替CSP

​ YOLOv5中的C3模块在CSP上进行了优化,非常相似但略有不同:

不同点:

  1. 具体实现:YOLOv4中的CSP模块通常使用残差块,而YOLOv5中的C3模块通常使用Bottleneck或BottleneckCSP块。
  2. 性能优化:YOLOv5中的C3模块在具体实现上进行了进一步优化,以提高计算效率和模型性能。

3.4 SPPF

  • 将卷积核大小变成相同,然后将并行变成了串行+并行,2个K5池化=1 个K9池化,3个K5池化=1个K13池化,也就是结果相同的基础上,速度更 快,计算量更小

4. 输出头说明

灵活度较高,支持多种尺寸:

  1. 输入图像尺寸:通常为640 x 640(或者其它尺寸,如416 x 416等)
  2. 输出特征图:YOLOv5 使用大、中、小三个尺寸。
  3. 输出尺寸:
    • 大目标: 通常是输入图像尺寸的 1/32
    • 中目标: 通常是输入图像尺寸的 1/16
    • 小目标: 通常是输入图像尺寸的 1/8

假设输入图像尺寸为640×640,具体的特征图尺寸如下:
∙ 大目标: 640 32 × 640 32 = 20 × 20 ∙ 中目标: 640 16 × 640 16 = 40 × 40 ∙ 小目标: 640 8 × 640 8 = 80 × 80 \bullet\quad\text{大目标:}\frac{640}{32}\times\frac{640}{32}=20\times20\\\bullet\quad\text{中目标:}\frac{640}{16}\times\frac{640}{16}=40\times40\\\bullet\quad\text{小目标:}\frac{640}8\times\frac{640}8=80\times80 大目标:32640×32640=20×20中目标:16640×16640=40×40小目标:8640×8640=80×80
如果输入的图像是416尺寸的,那就和YOLOV3、YOLOV4的头机制一致了。

5. 开源项目

YOLOV5并没有学术论文,是一个开源项目,是 Ultralytics 公司于 2020 年6月9 日发布的。

项目可以在Github搜到:https://github.com/ultralytics/yolov5

预训练模型:

Modelsize (pixels)mAPval 50-95mAPval 50Speed CPU b1 (ms)Speed V100 b1 (ms)Speed V100 b32 (ms)params (M)FLOPs @640 (B)
YOLOv5n64028.045.7456.30.61.94.5
YOLOv5s64037.456.8986.40.97.216.5
YOLOv5m64045.464.12248.21.721.249.0
YOLOv5l64049.067.343010.12.746.5109.1
YOLOv5x64050.768.976612.14.886.7205.7
YOLOv5n6128036.054.41538.12.13.24.6
YOLOv5s6128044.863.73858.23.612.616.8
YOLOv5m6128051.369.388711.16.835.750.0
YOLOv5l6128053.771.3178415.810.576.8111.4
YOLOv5x6 + TTA1280 153655.0 55.872.7 72.73136 -26.2 -19.4 -140.7 -209.8 -

​ 这些模型的结构是一样的,区别在于网络的深度和宽度,网络的深度指的就是C3模块中Bottleneck的数量,网络的宽度是指网络每层输出的通道数。

相关文章:

  • go中len和sizeof区别
  • PT8P2104触控型8Bit MCU
  • Linux Systemd 管理java服务
  • 打卡第二十五天:元组和OS模块
  • 深搜题(如何找到进入下一层深搜的条件)
  • Android 网络全栈攻略(三)—— 从三方库原理来看 HTTP
  • 【Java高阶面经:数据库篇】17、分库分表分页查询优化:告别慢查询与内存爆炸
  • 并发编程之常用原子类
  • 蓝桥杯 10. 安全序列
  • yolo剪枝的几种方法
  • 链表day4
  • RT-Thread源码阅读(1)——基本框架
  • 阿里云 Serverless 助力海牙湾构建弹性、高效、智能的 AI 数字化平台
  • 配置gem5环境:Dockerfile使用
  • SQL的RAND用法和指定生成随机数的范围
  • labview实现两路波形图数据采集
  • DeepSeek快速搭建个人网页
  • 搭建在线教育系统的完整流程:源码选择、功能集成与上线部署指南
  • 人形机器人,进入第一阶段概念设计和起泡沫的阶段
  • 系统性能分析基本概念(4) : 何时停止性能分析
  • 东莞网站设地/网店运营推广平台
  • 深圳网站建设工作室/阜新网站seo
  • 长沙市做网站的网站/app推广引流
  • ps建设网站步骤/永州网络推广
  • 温州网站建设推广服务/流量精灵
  • 夷陵网/百度seo怎么收费