YOLOV5 Focus模块

这篇具有很好参考价值的文章主要介绍了YOLOV5 Focus模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原理
在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张图片,四张图片互补,长的差不多,但是没有信息丢失,这样一来,将W、H信息就集中到了通道空间,输入通道扩充了4倍,即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图。
以yolov5s为例,640 × 640 × 3的图像输入Focus模块,先变成320 × 320 × 12的特征图,再经过一次卷积操作,变成320 × 320 × 32的特征图。

图解如下
YOLOV5 Focus模块

Focus模块代码

class Focus(nn.Module):
    # Focus wh information into c-space
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
        super(Focus, self).__init__()
        self.conv = Conv(c1 * 4, c2, k, s, p, g, act)      # 这里输入通道变成了4倍

    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))

在源码中使用Focus模块配置

# Profile
import torch.nn as nn
from models.common import Focus, Conv, Bottleneck
from utils.torch_utils import profile 

m1 = Focus(3, 64, 3)  # YOLOv5 Focus layer
m2 = nn.Sequential(Conv(3, 32, 3, 1), Conv(32, 64, 3, 2), Bottleneck(64, 64))  # YOLOv3 first 3 layers

results = profile(input=torch.randn(16, 3, 640, 640), ops=[m1, m2], n=10, device=0)  # profile both 10 times at batch-size 16

作者的出发点
YOLOv5的作者创建Focus层的主要目的是减少层数,减少参数,减少FLOPS,减少CUDA内存,增加前进和后退速度,同时最小程度地影响mAP。

作者在YOLOv5上得到的结果
YOLOV5 Focus模块

使用一个普通卷积和Focus作为下采样的对比

  • 一个普通卷积下采样:即将一张640 × 640 × 3的图片输入3 × 3的卷积中,步长为2,输出通道32,下采样后得到320 × 320 × 32的特征图,那么普通卷积下采样理论的计算量为:
    参数数量(params)= 3 × 3 × 3 × 32 +32 +32 = 928 (后面两个32分别为bias和BN层参数)
    计算量(FLOPs) = 3 × 3 × 3 × 32 × 320 × 320 = 88473600(不考虑bias情况下)
  • Focus下采样:将640 × 640 × 3的图像输入Focus结构,先变成320 × 320 × 12的特征图,再经过3 × 3的卷积操作,输出通道32,最终变成320 × 320 × 32的特征图,
    参数数量(params)= 3 × 3 × 12 × 32 +32 +32 =3520 (为了呼应上图输出的参数量,将后面两个32分别为bias和BN层的参数考虑进去,通常这两个占比比较小可以忽略)
    计算量(FLOPs) = 3 × 3 × 12 × 32 × 320 × 320 = 353894400(不考虑bias情况下)
    Focus的计算量和参数量要比一个普通卷积要多一些,是一个普通卷积的4倍,但是下采样时没有信息的丢失。

本文最终结论
如果使用一个Focus层替换一个卷积层,参数量(params)和计算量(FLOPs)是变大了。但是YOLOV5中使用一个Focus代替了原来YOLOV3里的前三层,参数量(params)和计算量(FLOPs)都减少了,所以加速了,对mAP影响极小。

Focus后YOLOv5-6.0版本的大胆改进
YOLOv5-6.0版本中使用了尺寸大小为6 ×6 ,步长为2,padding为2的卷积核代替了Focus模块,便于模型的导出,且效率更高。

名词解释:
- 参数数量(params):指网络模型中需要训练的参数总数。单位通常是M,通常参数用float32表示,所以模型大小是参数数量的4倍。Kh × Kw × Cin × Cout
- 计算量(FLOPs):浮点运算次数,可以用来衡量算法/模型的复杂度,这关系到算法速度。大模型的单位通常为G,小模型单位通常为M;通常只考虑乘加操作的数量,而且只考虑Conv和FC等参数层的计算量,忽略BN和PReLU等,一般情况下,Conv和FC层也会忽略仅纯加操作的计算量,如bias偏置加和shoutcut残差加等,目前技术有BN和CNN可以不加bias。Kh × Kw × Cin × Cout × H × W = 即(当前层filter × 输出的feature map)= params × H × W

参考文章
https://blog.csdn.net/qq_39056987/article/details/112712817
https://github.com/ultralytics/yolov5/discussions/3181文章来源地址https://www.toymoban.com/news/detail-458688.html

到了这里,关于YOLOV5 Focus模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8之C2f模块——与YOLOv5的C3模块对比

      YOLOv8完整工程代码下载:ultralytics/ultralytic   C2f模块源码在ultralytics/nn/modules.py下,源码如下:   YOLOv5的完整工程代码下载:ultralytic/yolov5   C3模块源码在models/common.py下,源码如下: C2f模块和C3模块的对外接口保持一致,都是(ch_in, ch_out, number, shortcut, groups, expans

    2024年02月01日
    浏览(37)
  • YOLOv5实战:如何添加RepVgg模块

    在yolov7 git仓库中,在common.py提供了详细的RepConv,和与之相关的CSPRepBettleneck模块 RepConv及RepBottleNeck代码如下(示例): RepConv代码段比较长,此处省略。 将模块添加到config目录下定义模块的*.yaml文件 定义好模型,还需要对参数进行解析,因此新添加的RepVgg模块也需要参数解析

    2024年02月03日
    浏览(28)
  • 【YOLOv5】Backbone、Neck、Head各模块详解

    Yolov5是一种目标检测算法,采用基于Anchor的检测方式,属于单阶段目标检测方法。相比于Yolov4,Yolov5有着更快的速度和更高的精度,是目前业界领先的目标检测算法之一。 Yolov5基于目标检测算法中的one-stage方法,其主要思路是将整张图像划分为若干个网格,每个网格预测出该

    2024年02月03日
    浏览(34)
  • 在YOLOv5中添加Swin-Transformer模块

    前段时间整理了一个可以添加SwinTransformer Block的YOLOv5代码仓库。不需要任何其他的库包,可以运行YOLOv5程序的环境即可以正常运行代码。 分别进行了SwinTransformer Block、Patch Merging、Patch Embed阶段的代码整理,以使得这些模块可以适配于u版YOLOv5的模型构建代码。 和YOLOv5一样,通

    2024年02月04日
    浏览(57)
  • OpenCV DNN模块推理YOLOv5 ONNX模型方法

    本文档主要描述 python 平台,使用 opencv-python 深度神经网络模块 dnn ,推理 YOLOv5 模型的方法。 文档主要包含以下内容: opencv-python 模块的安装 YOLOv5 模型格式的说明 ONNX 格式模型的加载 图片数据的预处理 模型推理 推理结果后处理,包括 NMS , cxcywh 坐标转换为 xyxy 坐标等 关键方

    2024年02月16日
    浏览(51)
  • YOLOv5/v7 添加注意力机制,30多种模块分析③,GCN模块,DAN模块

    大家好,我是哪吒。 🏆本文收录于,目标检测YOLO改进指南。 本专栏均为全网独家首发,内附代码,可直接使用,改

    2024年02月08日
    浏览(39)
  • YOLOv5/v7 添加注意力机制,30多种模块分析②,BAM模块,CBAM模块

    大家好,我是哪吒。 🏆本文收录于,目标检测YOLO改进指南。 本专栏均为全网独家首发,内附代码,可直接使用,改进的

    2024年02月09日
    浏览(39)
  • YOLOv5/v7 添加注意力机制,30多种模块分析⑤,SOCA模块 ,SimAM模块

    大家好,我是哪吒。 🏆本文收录于,目标检测YOLO改进指南。 本专栏均为全网独家首发,内附代码,可直接使用#x

    2024年02月09日
    浏览(41)
  • YOLOv5改进算法之添加CA注意力机制模块

    目录   1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动   CA(Coordinate Attention)注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息,以便模型可以更好地理解不同位置之间的关系。如下图: 1. 输入特征

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包