yolov7简化yaml配置文件

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

yolov7代码结构简单,效果还好,但是动辄超过70几个模块的配置文件对于想要对网络进行魔改的朋友还是不怎么友好的,使用最小的tiny也有77个模块

yolov7简化yaml配置文件,YOLO,YOLO,计算机视觉,目标检测

代码的整体结构简单,直接将ELAN结构化写成一个类就能像yolov5一样仅仅只有20几个模块,方便对网络结构进行魔改,看着也不容易头晕。

v7的网络结构可以参看:理解yolov7网络结构_yolov7的常用anchor_athrunsunny的博客-CSDN博客

这里先放一张改好的网络结构运行结果

yolov7简化yaml配置文件,YOLO,YOLO,计算机视觉,目标检测

好,上主菜,这里对tiny的结构进行修改,v7的修改类似就是在ELAN这个类中增加卷积层就行

先创建配置文件yolov7-tiny-ELAN.yaml

# parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple

activation: nn.ReLU()
# 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

# yolov7-tiny backbone
backbone:
  # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True
  [[-1, 1, Conv, [32, 3, 2, None, 1]],  # 0-P1/2

   [-1, 1, Conv, [64, 3, 2, None, 1]],  # 1-P2/4
   [-1, 1, ELAN, [64, 1, 1, None, 1]],  # 2

   [-1, 1, MP, []],  # 3-P3/8
   [-1, 1, ELAN, [128, 1, 1, None, 1]],  # 4

   [-1, 1, MP, []],  # 5-P4/16
   [-1, 1, ELAN, [256, 1, 1, None, 1]],  # 6

   [-1, 1, MP, []],  # 7-P5/32
   [-1, 1, ELAN, [512, 1, 1, None, 1]],  # 8
  ]

# yolov7-tiny head
head:
  [[-1, 1, SPPCSPCSIM, [256]], # 9

   [-1, 1, Conv, [128, 1, 1, None, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [6, 1, Conv, [128, 1, 1, None, 1]], # route backbone P4
   [[-1, -2], 1, Concat, [1]], # 13

   [-1, 1, ELAN, [128, 1, 1, None, 1]],  # 14

   [-1, 1, Conv, [64, 1, 1, None, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [4, 1, Conv, [64, 1, 1, None, 1]], # route backbone P3
   [[-1, -2], 1, Concat, [1]],

   [-1, 1, ELAN, [64, 1, 1, None, 1]],  # 19

   [-1, 1, Conv, [128, 3, 2, None, 1]],
   [[-1, 14], 1, Concat, [1]],

   [-1, 1, ELAN, [128, 1, 1, None, 1]],  # 22

   [-1, 1, Conv, [256, 3, 2, None, 1]],
   [[-1, 9], 1, Concat, [1]],

   [-1, 1, ELAN, [256, 1, 1, None, 1]],  # 25

   [19, 1, Conv, [128, 3, 1, None, 1]],
   [22, 1, Conv, [256, 3, 1, None, 1]],
   [25, 1, Conv, [512, 3, 1, None, 1]],

   [[26,27,28], 1, Detect, [nc, anchors]],   # Detect(P3, P4, P5)
  ]

在common.py中增加

class ELAN(nn.Module):
    # Yolov7 ELAN with args(ch_in, ch_out, kernel, stride, padding, groups, activation)
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):
        super().__init__()
        c_ = int(c2 // 2)
        c_out = c_ * 4
        self.cv1 = Conv(c1, c_, k=k, s=s, p=p, g=g, act=act)
        self.cv2 = Conv(c1, c_, k=k, s=s, p=p, g=g, act=act)
        self.cv3 = Conv(c_, c_, k=3, s=s, p=p, g=g, act=act)
        self.cv4 = Conv(c_, c_, k=3, s=s, p=p, g=g, act=act)
        self.cv5 = Conv(c_out, c2, k=k, s=s, p=p, g=g, act=act)

    def forward(self, x):
        x1 = self.cv1(x)
        x2 = self.cv2(x)
        x3 = self.cv3(x2)
        x4 = self.cv4(x3)
        x5 = torch.cat((x1, x2, x3, x4), 1)
        return self.cv5(x5)


class SPPCSPCSIM(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=(5, 9, 13)):
        super(SPPCSPCSIM, self).__init__()
        c_ = int(2 * c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])
        self.cv3 = Conv(4 * c_, c_, 1, 1)
        self.cv4 = Conv(2 * c_, c2, 1, 1)

    def forward(self, x):
        x1 = self.cv1(x)
        x2 = self.cv2(x)
        x3 = torch.cat([x2] + [m(x2) for m in self.m], 1)
        x4 = self.cv3(x3)
        x5 = torch.cat((x1, x4), 1)
        return self.cv4(x5)

在yolo.py中的parse_model中增加

        if m in (Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv,
                 BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, nn.ConvTranspose2d, DWConvTranspose2d, C3x, SPPCSPC, RepConv,
                 RFEM, ELAN, SPPCSPCSIM):
            c1, c2 = ch[f], args[0]
            if c2 != no:  # if not output
                c2 = make_divisible(c2 * gw, 8)

            args = [c1, c2, *args[1:]]
            if m in [BottleneckCSP, C3, C3TR, C3Ghost, C3x]:
                args.insert(2, n)  # number of repeats
                n = 1

使用 yolov7-tiny-ELAN.yaml在yolo.py中运行就能看到上面结构精简后的网络结构图。文章来源地址https://www.toymoban.com/news/detail-705714.html

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

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

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

相关文章

  • YOLO系列 --- YOLOV7算法(一):使用自定义数据集跑通YOLOV7算法

    这不就尴尬了。。。刚理解完美团出的YOLO V6算法,V7就出来了。。。而且最关键的是V7还有V4作者的背书,不过好在其实V6和V7都是在YOLO V5的基础上修改的代码,所以代码读起来就比较顺畅。YOLOV7算法打算按照以下的结构进行讲解: YOLOV7算法(一):使用自定义数据集跑通YO

    2024年02月04日
    浏览(31)
  • Yolov5-模型配置文件(yolov5l.yaml)讲解

    配置文件:github.com/ultralytics/ 这部分比较简单,以下是yolov5l的配置文件 nc:类别数,你的类别有多少就填写多少。从1开始算起,不是0-14这样算。 depth_multiple:控制模型的深度。 width_multiple:控制卷积核的个数。 yolov5提供了s、m、l、x四种,所有的yaml文件都设置差不多,只有

    2024年02月10日
    浏览(31)
  • YOLO系列 --- YOLOV7算法(四):YOLO V7算法网络结构解析

    今天来讲讲YOLO V7算法网络结构吧~ 在 train.py 中大概95行的地方开始创建网络,如下图(YOLO V7下载的时间不同,可能代码有少许的改动,所以行数跟我不一定一样) 我们进去发现,其实就是在 yolo.py 里面。后期,我们就会发现相关的网络结构都是在该py文件里面。这篇blog就主

    2024年02月05日
    浏览(33)
  • YOLO系列 --- YOLOV7算法(六):YOLO V7算法onnx模型部署

    有很多人来问我,基于YOLO v7算法训练出来一个权重文件,如何进行部署。所以特地写一篇部署的blog~ 一般,我们基于pytorch深度学习框架训练出来的权重文件是pt格式的,我们可以用python来直接调用这个文件。但是实际工业中,一般都是c++去调用权重文件的,所以我们需要将

    2024年02月07日
    浏览(34)
  • 【YOLO系列】YOLOv7论文超详细解读(翻译 +学习笔记)

    终于读到传说中的YOLOv7了~≖‿≖✧ 这篇是在美团的v6出来不到一个月就高调登场,作者还是我们熟悉的AB大神(对,就是v4那个),读起来又是“熟悉”的感觉(贯穿了我的整个五一假期(╯-_-)╯╧╧)。 其实关于YOLOv7的网络结构还有很多细节值得深入研究,以及代码

    2024年02月02日
    浏览(39)
  • 【YOLO系列】YOLOv5、YOLOX、YOOv6、YOLOv7网络模型结构

    【注】: 本文为YOLOv5、YOLOX、YOLOv6、YOLOv7模型结构图,作图软件为drawio。因精力有限暂时不做结构的详细阐述和具体的代码讲解,后续有机会再做补充。如有需要可以查阅其他博主的文章了解学习。 【另】:希望模型结构图可以帮助到有需要的人,如模型中有错误的地方,欢

    2024年02月07日
    浏览(30)
  • CSDN独家首发!万字长文,YOLOv5/v7/v8算法模型yaml文件史上最详细解析与教程!小白也能看懂!掌握了这个就掌握了魔改YOLO的核心!

    看完这篇你能学会什么? 掌握根据 yaml 文件画出模型结构图的能力 掌握根据模型结构图写 yaml 文件的能力 掌握添加模块后写配置文件 args 参数的能力 掌握修改模型配置文件的能力 模型 尺寸 (像素) mAP val 50-95 mAP val 50 推理速度 CPU b1 (ms) 推理速度 V100 b1 (ms) 速度 V10

    2024年02月02日
    浏览(39)
  • 深入浅出 Yolo 系列之 Yolov7 基础网络结构详解

    从 2015 年的 YOLOV1 ,2016 年 YOLOV2 , 2018 年的 YOLOV3 ,到 2020 年的 YOLOV4 、 YOLOV5 , 以及最近出现的 YOLOV76 和 YOLOV7 可以说 YOLO 系列见证了深度学习时代目标检测的演化。对于 YOLO 的基础知识以及 YOLOV1 到 YOLOV5 可以去看大白的 YOLO 系列,本文主要对 YOLOV7 的网络结构进行一个梳理

    2024年02月04日
    浏览(34)
  • YOLOv5源码逐行超详细注释与解读(5)——配置文件yolov5s.yaml

    在YOLOv5中网络结构采用 yaml 作为配置文件,之前我们也介绍过,YOLOv5配置了4种不同大小的网络模型,分别是 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x ,这几个模型的结构基本一样, 不同的是depth_multiple模型深度和width_multiple模型宽度这两个参数 。 就和我们买衣服的尺码大小排序一样,

    2023年04月16日
    浏览(37)
  • YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml(包括源码+网络结构图)

    前言: Hello大家好,我是小哥谈。 配置文件yolov5s.yaml在YOLOv5模型训练过程中发挥着至关重要的作用,属于初学者必知必会的文件!在YOLOv5-6.0版本源码中,配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小但检测速度

    2024年02月08日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包