YOLO_v7讲解

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

一:特色浅析

和v6一样,对网络结构进行了大量改变,YOLO_v7有许多前人的影子,比如将YOLO_v6的RepConv故技重施,损失函数也和YOLOv5完全一样,都是上、下 、左、右的cell中增量选择targets。当然,其中还是有许多不一样的细节点,如下

  • ELAN模块
  • MPConv混合卷积
  • SPPCSPC
  • ImpConv隐性知识学习
  • Fine-to-Coarse Auxility Loss

下面我主要介绍上面几个细节,以此贯穿整个网络,我先贴上大牛画的结构图,出自该篇博文,特此鸣谢:
YOLO_v7讲解

二:ELAN模块

YOLO_v7讲解yolov7.yaml中的初始化设置 :

   [-1, 1, Conv, [64, 1, 1]],
   [-2, 1, Conv, [64, 1, 1]],
   [-1, 1, Conv, [64, 3, 1]],
   [-1, 1, Conv, [64, 3, 1]],
   [-1, 1, Conv, [64, 3, 1]],
   [-1, 1, Conv, [64, 3, 1]],
   [[-1, -3, -5, -6], 1, Concat, [1]],
   [-1, 1, Conv, [256, 1, 1]],  # 11

三:MPConv混合卷积

YOLO_v7讲解
yolov7.yaml中的初始化设置 :

   [-1, 1, Conv, [256, 1, 1]],  # 11

   # MPConv
   [-1, 1, MP, []],
   [-1, 1, Conv, [128, 1, 1]],
   [-3, 1, Conv, [128, 1, 1]],
   [-1, 1, Conv, [128, 3, 2]],
   [[-1, -3], 1, Concat, [1]],  # 16-P3/8

四:SPPCSPC

YOLO_v7讲解

common.py中的对应代码部分:

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

    def forward(self, x):
        x1 = self.cv4(self.cv3(self.cv1(x)))
        y1 = self.cv6(self.cv5(torch.cat([x1] + [m(x1) for m in self.m], 1)))
        y2 = self.cv2(x)
        return self.cv7(torch.cat((y1, y2), dim=1))

五:ImpConv隐性知识学习

YOLO_v7讲解这一部分直接继承自YOLOR中的显隐性知识学习。一般情况下,将神经网络的浅层特征称为显性知识,深层特征称为隐性知识。而YOLOR的作者(同时也是YOLOv7的作者)则直接把神经网络最终观察到的知识称为显性知识,那些观察不到、与观察无关的知识称为隐性知识。也就是无法学习到的东西,先初始化再更新学习。

model/common.py文件中,定义了两类隐性知识:ImplicitA和ImplicitM,分别和输入相加、相乘:

  • IDetect
def forward(self,  x):
x = self.conv_1✖1(implicitA(x))
x = implicitM(x)
  • ImplicitA
class ImplicitA(nn.Module):
    def __init__(self, channel, mean=0., std=.02):
        super(ImplicitA, self).__init__()
        self.channel = channel
        self.mean = mean
        self.std = std
        self.implicit = nn.Parameter(torch.zeros(1, channel, 1, 1))
        nn.init.normal_(self.implicit, mean=self.mean, std=self.std)

    def forward(self, x):
        return self.implicit + x
  • ImplicitM
class ImplicitM(nn.Module):
    def __init__(self, channel, mean=0., std=.02):
        super(ImplicitM, self).__init__()
        self.channel = channel
        self.mean = mean
        self.std = std
        self.implicit = nn.Parameter(torch.ones(1, channel, 1, 1))
        nn.init.normal_(self.implicit, mean=self.mean, std=self.std)

    def forward(self, x):
        return self.implicit * x

六:Fine-to-Coarse Auxility Loss

YOLO_v7讲解YOLO_v7-W6中才有辅助损失模块。由上图源码可见,采样了P3~P6和C3~C6,并且分别分配targets。值得注意的是,对于辅助特征层上的targets设定是上、下、左、右四个cell都算正样本,同时计算损失时给0.25的权重

笔者也是刚才读了第二遍源码才发现,每一层的损失都加了不同的权重,对于大分辨率的特征层权重最大4,而分辨率最小的只有权重0.02,我猜测是想让检测网络更关注小物体。


  至此我对YOLO_v7中重点流程与细节进行了深度讲解,希望对大家有所帮助,有不懂的地方或者建议,欢迎大家在下方留言评论。

我是努力在CV泥潭中摸爬滚打的江南咸鱼,我们一起努力,不留遗憾!文章来源地址https://www.toymoban.com/news/detail-473434.html

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

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

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

相关文章

  • 【YOLO系列】YOLOv5、YOLOX、YOOv6、YOLOv7网络模型结构

    【YOLO系列】YOLOv5、YOLOX、YOOv6、YOLOv7网络模型结构

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

    2024年02月07日
    浏览(19)
  • 改进YOLOv5:自研网络新结构,可作为创新点 | ALFNet YOLO | 创新必备

    在计算机视觉领域,深度学习已经取得了显著的进展,尤其是在目标检测任务中。然而,随着网络结构不断加深和复杂化#

    2024年02月03日
    浏览(11)
  • YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py

    YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py

    在上一篇中,我们简单介绍了YOLOv5的配置文件之一 yolov5s.yaml ,这个文件中涉及很多参数,它们的调用会在这篇 yolo.py 和下一篇 common.py 中具体实现。 本篇我们会介绍 yolo.py ,这是YOLO的特定模块,和网络构建有关。 在 YOLOv5源码中,模型的建立是依靠 yolo.py 中的函数和对象完

    2023年04月15日
    浏览(22)
  • 图像分割UNet (1) : 网络结构讲解

    图像分割UNet (1) : 网络结构讲解

    UNet 论文:Convolutional Networks for Biomedical Image Segmentation 这篇论文主要是针对生物医学影像这个领域提出的,所以一提到UNet一般都会联想到医学影像。 UNet它是一个encoder - decoder的结构,那么encoder对应就是这个u型网络左边这半部分,也就是我们特征提取及下采样这部分。decode

    2024年02月07日
    浏览(11)
  • 敏捷交换机的特色:iPCA网络包守恒算法

    iPCA iPCA (Packet Conservation Algorithm for Internet) ,网络包守恒算法)是一种基于直接测量方式检测网络质量状况的管道监控类技术,它可以测量网络的丢包、时延、时延抖动和流量,并通过逐跳检测,完成故障精确定位。针对现有的检测手段存在故障定位时间长、故障定界模糊和评

    2024年02月07日
    浏览(6)
  • YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

    本文给大家带来的改进机制是利用 YOLO-MS 提出的一种针对于实时目标检测的 MSBlock 模块 (其其实不能算是Conv但是其应该是一整个模块) , 我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个类

    2024年02月01日
    浏览(16)
  • YOLOv5网络模型的结构原理讲解(全)

    YOLOv5网络模型的结构原理讲解(全)

    YOLOv5有几种不同的架构,各网络模型算法性能分别如下: YOLOv5是一种目标检测算法,其模型结构主要包括以下组成部分: 输入端:YOLOv5的Head网络由3个不同的输出层组成,分别负责检测大中小尺度的目标。 Backbone网络:YOLOv5使用CSPDarknet53作为其主干网络,其具有较强的特征提

    2024年02月05日
    浏览(11)
  • 【Linux】在ubuntu18.04系统中配置网络信息(超有用,完美解决,只看这一篇就行了)

    【Linux】在ubuntu18.04系统中配置网络信息(超有用,完美解决,只看这一篇就行了)

    最近用centos搭建hadoop集群已经熟练了,但是学习场景中更多的使用的是ubuntu环境,就安装了ubuntu的环境进行搭建,结果ubuntu在很多地方与centos操作有较大区别,首先网络配置就让我折腾了半天,现在我将我已成功配置好的经验分享给大家 1.首先打开我们的VMware虚拟机,左上角

    2024年02月13日
    浏览(15)
  • YOLO-NAS讲解

    2024年02月03日
    浏览(8)
  • 简单有趣的轻量级网络 Shufflenet v1 、Shufflenet v2(网络结构详解+详细注释代码+核心思想讲解)——pytorch实现

    简单有趣的轻量级网络 Shufflenet v1 、Shufflenet v2(网络结构详解+详细注释代码+核心思想讲解)——pytorch实现

         这期博客咱们来学习一下Shufflenet系列轻量级卷积神经网络,Shufflenet v1 、Shufflenet v2。 本博客代码可以直接生成训练集和测试集的损失和准确率的折线图,便于写论文使用。 论文下载链接: Shufflene系列轻量级卷积神经网络由旷世提出,也是非常有趣的轻量级卷积神经网

    2024年02月01日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包