精华内容
下载资源
问答
  • YOLOV5网络结构

    万次阅读 多人点赞 2020-07-22 14:08:57
    YOLOV5网络结构 github代码地址:ultralytics\yolov5,v5还在开发当中,目前的网络结构如下图,要是网络结构有更新,笔者也会更新结构图。 下图括号中四个数字代表:(输入通道、输出通道、卷积核大小、步长); 两个...

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


    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)
      ]
    
    展开全文
  • 卷积神经网络的网络结构——Hourglass

    万次阅读 多人点赞 2018-07-14 22:26:45
    后续的很多人体姿态估计方法都借鉴了hourglass网络结构,并进行了改进,可以说hourglass的网络结构算是受到了业界的认可。 简介: 本文使用全卷积神经网络,对给定的单张RGB图像,输出人体关键点的精确...
    《Stacked Hourglass Networks for Human Pose Estimation》
    • ECCV2016,密歇根大学的研究团队,Hourglass。
      后续的很多人体姿态估计方法都借鉴了hourglass网络结构,并进行了改进,可以说hourglass的网络结构算是受到了业界的认可。

    简介:

    本文使用全卷积神经网络,对给定的单张RGB图像,输出人体关键点的精确像素位置,使用多尺度特征,捕捉人体各关节点的空间位置信息。网络结构形似沙漏状,重复使用top-down到bottom-up来推断人体的关节点位置。每一个top-down到bottom-up的结构都是一个stacked hourglass模块。
    这里写图片描述
    1.基本块
    使用Residual Module 作为基本的网络单元
    这里写图片描述
    1x1 的卷积降维256->128 ,3x3 的卷积,1x1的卷积升维128->256

    2.单个沙漏网络的拓扑结构是对称的
    最终一共使用了8个沙漏网络。每个沙漏网络的输入都为 64x64。
    输入图片大小为256x256,一开始经过一次7x7 stride2 的conv ,紧接着跟随一个residual module和 max pooling将像素值从156下降到64(较少hourglass内部计算量)。其中所有的残差模块输出256个特征图。
    这里写图片描述

    3.如上图,在每次pooling之后都会有1个basic building block 加到之后 upsampling中相同大小的map中。(这里可以看出每个pooling前的feature map都是256 channel的,up sampling的时候也是256 channel的)

    4.中继监督
    Hourglass网络输出heatmap的集合(蓝色),将这与ground truth进行误差计算,其中使用1x1的卷积层进行处理是为了保证通道数相同,这是一种保证通道数相同很常见的方法,对每一个hourglass网络都添加loss,这就相当于是8个loss一起监督。
    这里写图片描述

    模块化详细解读:

    Residual模块
    本文使用的初级模块称为Residual Module,旁路相加结构。
    这里写图片描述
    第一行为卷积路,由三个核尺度不同的卷积层(白色)串联而成,间插有Batch Normalization(浅蓝)和ReLU(浅紫);
    第二行为跳级路,只包含一个核尺度为1的卷积层;如果跳级路的输入输出通道数相同,则这一路为单位映射。
    所有卷积层的步长为1,pading为1,不改变数据尺寸,只对数据深度(channel)进行变更。
    Residual Module由两个参数控制:输入深度M和输出深度N。可以对任意尺寸图像操作。
    设计原则:channel大的卷积,kernel要小;kernel大的卷积,channel要小;模块化思想。
    作用:Residual模块提取了较高层次的特征(卷积路),同时保留了原有层次的信息(跳级路)。不改变数据尺寸,只改变数据深度。可以把它看做一个保尺寸的高级“卷积”层。

    Hourglass子网络
    Hourglass是本文的核心部件,由Residual模块组成。根据阶数不同,有不同的复杂程度。
    一阶Hourglass:
    这里写图片描述
    上下两个半路都包含若干Residual模块(浅绿),逐步提取更深层次特征。但上半路在原尺度进行,下半路经历了先降采样(红色/2)再升采样(红色*2)的过程。
    降采样使用max pooling,升采样使用最近邻插值。
    注:另一种进行升采样的方法是反卷积层(Deconv)
    二阶Hourglass:
    把一阶模块的灰框内部分替换成一个一阶Hourglass(输入通道256,输出通道N),得到二阶Hourglass:
    这里写图片描述
    两个层次的下半路组成了一条两次降采样,再两次升采样的过程。两个层次的下半路则分别在原始尺寸(OriSize)和1/2原始尺寸,辅助升采样。
    四阶Hourglass:
    本文使用的是四阶Hourglass:
    这里写图片描述
    每次降采样之前,分出上半路保留原尺度信息;
    每次升采样之后,和上一个尺度的数据相加;
    两次降采样之间,使用三个Residual模块提取特征;
    两次相加之间,使用一个Residual模块提取特征。
    由于考虑了各个尺度的特征,本文不需要像CPM3方法一样独立地在图像金字塔上多次运行,速度更快。
    作用:n阶Hourglass子网络提取了从原始尺度到尺度 1 / 2 n 1/2^{n} 1/2n的特征。不改变数据尺寸,只改变数据深度。

    完整网络结构:

    一级网络:
    以一个Hourglass(深绿色)为中心,可以从彩色图像预测K个人体部件的响应图:
    这里写图片描述
    原始图像经过一次降采样(橙色),输入到Hourglass子网络中。Hourglass的输出结果经过两个线性模块(灰色),得到最终响应图。期间使用Residual模块(浅绿)和卷积层(白色)逐步提取特征。
    更正:两个Linear应该是卷积操作,输出应该是H/4W/4K。
    二级网络:
    本文使用的完整网络包含两个Hourglass:
    这里写图片描述
    对比上图,二级网络重复了一级网络的后半结构。第二个Hourglass的输入包含三路:

    • 第一个Hourglass的输入数据
    • 第一个Hourglass的输出数据
    • 第一级预测结果
      这三路数据通过串接(concat)和相加进行融合,它们的尺度不同,体现了当下流行的跳级结构思想。
      对于H×W×3的输入图像,每一个hourglass级都会生成一个H/4×W/4×K的响应图。对于每个响应图,都比较其与真值的误差作为代价。体现了中继监督(intermediate supervision)的思想。

    总结

    本文的设计基于模块到子网络再到完整网络的思想。一阶hourglass网络就是一个最简单的旁路相加,上半路在原尺度进行,下半路先经历下采样再进行上采样。对于二阶hourglass网络,就是在一阶的基础上将一阶网络嵌套进来。至于之后的高阶hourglass就是一层一层嵌套,从本质上说子模块都是一样的。
    特点:

    • 使用模块进行网络设计
    • 先降采样,再升采样的全卷积结构
    • 跳级结构辅助升采样
    • 中继监督训练
      整个hourglass不改变特征的尺度,只改变特征的深度。

    参考:
    1.https://blog.csdn.net/shenxiaolu1984/article/details/51428392
    2.https://blog.csdn.net/qq_36165459/article/details/78321529


    注:博众家之所长,集群英之荟萃。

    在这里插入图片描述

    展开全文
  • YOLO v3网络结构分析

    万次阅读 多人点赞 2018-07-26 12:07:09
    (卷积的strides默认为(1,1),padding默认为same,当strides为(2,2)时padding为valid) 看完上图应该就能自己搭建出Darknet-53的网络结构了,上图是以输入图像256 x 256进行预训练来进行介绍的,常用的尺寸是...

    先给出个链接,不想看文章的可以看下我在bilibili上的视频讲解:

    1.  YOLO系列理论视频合集

    2.  YOLOv3 SPP网络源码讲解(pytorch版)

    3.  YOLOv3 SPP网络代码仓库(pytorch版)

     

    相信阅读了YOLO v3论文的小伙伴们会发现为什么这次的论文篇幅这么少?除去参考文献就四面?Excuse me?我是下了篇假文献吧。读完后感觉内容确实不多,而且总感觉写的不够细致,很多地方都比较模糊,可能是作者想让大家去观摩他的代码吧。

    本人是小白,看后表示有点蒙。于是在Github上搜了大牛们基于Tensorflow搭建的YOLOv3模型进行分析(本人只接触过TF,所以就不去看caffe的源码了)。接下来我会根据我阅读的代码来进一步分析网络的结构。Github YOLOv3大牛代码链接

    1.Darknet-53 模型结构

    在论文中虽然有给网络的图,但我还是简单说一下。这个网络主要是由一系列的1x1和3x3的卷积层组成(每个卷积层后都会跟一个BN层和一个LeakyReLU)层,作者说因为网络中有53个convolutional layers,所以叫做Darknet-53(2 + 1*2 + 1 + 2*2 + 1 + 8*2 + 1 + 8*2 + 1 + 4*2 + 1 = 53 按照顺序数,最后的Connected是全连接层也算卷积层,一共53个)。下图就是Darknet-53的结构图,在右侧标注了一些信息方便理解。(卷积的strides默认为(1,1),padding默认为same,当strides为(2,2)时padding为valid)

     

     

    看完上图应该就能自己搭建出Darknet-53的网络结构了,上图是以输入图像256 x 256进行预训练来进行介绍的,常用的尺寸是416 x 416,都是32的倍数。下面我们再来分析下YOLOv3的特征提取器,看看究竟是在哪几层Features上做的预测。

    2.YOLOv3 模型结构

    作者在论文中提到利用三个特征层进行边框的预测,具体在哪三层我感觉作者在论文中表述的并不清楚(例如文中有“添加几个卷积层”这样的表述),同样根据代码我将这部分更加详细的分析展示在下图中。注意:原Darknet53中的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是256x256,下图是以YOLO v3 416模型进行绘制的,所以输入的尺寸是416x416,预测的三个特征层大小分别是52,26,13。

    在上图中我们能够很清晰的看到三个预测层分别来自的什么地方,以及Concatenate层与哪个层进行拼接。注意Convolutional是指Conv2d+BN+LeakyReLU,和Darknet53图中的一样,而生成预测结果的最后三层都只是Conv2d。通过上图小伙伴们就能更加容易地搭建出YOLOv3的网络框架了。

    3.目标边界框的预测

    YOLOv3网络在三个特征图中分别通过(4+1+c)\times k个大小为1\times1的卷积核进行卷积预测,k为预设边界框(bounding box prior)的个数(k默认取3),c为预测目标的类别数,其中4k个参数负责预测目标边界框的偏移量,k个参数负责预测目标边界框内包含目标的概率,ck个参数负责预测这k个预设边界框对应c个目标类别的概率。下图展示了目标边界框的预测过程(该图是本人重新绘制的,与论文中的示意图有些不同,个人感觉自己绘制的更便于理解)。图中虚线矩形框为预设边界框,实线矩形框为通过网络预测的偏移量计算得到的预测边界框。其中\small (c_{x},c_{y})为预设边界框在特征图上的中心坐标,\small (p_{w},p_{y})为预设边界框在特征图上的宽和高,\small (t_{x}, t_{y},t_{w},t_{h})分别为网络预测的边界框中心偏移量\small (t_{x},t_{y})以及宽高缩放比\small (t_{w},t_{y})\small (b_{x},b_{y},b_{w},b_{h})为最终预测的目标边界框,从预设边界框到最终预测边界框的转换过程如图右侧公式所示,其中\small \sigma (x)函数是sigmoid函数其目的是将预测偏移量缩放到0到1之间(这样能够将预设边界框的中心坐标固定在一个cell当中,作者说这样能够加快网络收敛)。

    下图给出了三个预测层的特征图大小以及每个特征图上预设边界框的尺寸(这些预设边界框尺寸都是作者根据COCO数据集聚类得到的):

    4.损失函数的计算

    关于YOLOv3的损失函数文章中写的很粗略,比如坐标损失采用的是误差的平方和,类别损失采用的是二值交叉熵,本人在github上也找了很多YOLO v3的公开代码,有的采用的是YOLOv1或者YOLOv2的损失函数,下面给出本人认为正确的损失函数(这里偷个懒,公式都是从本人之前写的论文中截图的)。

    YOLOv3的损失函数主要分为三个部分:目标定位偏移量损失\small L_{loc}(l,g),目标置信度损失\small L_{conf}(o,c)以及目标分类损失\small L_{cla}(O,C),其中\small \lambda _{1},\lambda _{2},\lambda _{3}是平衡系数。

    4.1目标置信度损失

    目标置信度可以理解为预测目标矩形框内存在目标的概率,目标置信度损失\small L_{conf}(o,c)采用的是二值交叉熵损失(Binary Cross Entropy),其中\small o_{i}\in \{0,1\},表示预测目标边界框i中是否真实存在目标,0表示不存在,1表示存在。\small \hat{c_{i}}表示预测目标矩形框i内是否存在目标的Sigmoid概率(将预测值\small c_{i}通过sigmoid函数得到)。

    4.2目标类别损失

    目标类别损失\small L_{cla}(O,C)同样采用的是二值交叉熵损失(采用二值交叉熵损失的原因是,作者认为同一目标可同时归为多类,比如猫可归为猫类以及动物类,这样能够应对更加复杂的场景。但在本人实践过程中发现使用原始的多类别交叉熵损失函数效果会更好一点,原因是本人针对识别的目标都是固定归于哪一类的,并没有可同时归于多类的情况),其中\small O_{ij}\in \{0,1\},表示预测目标边界框i中是否真实存在第j类目标,0表示不存在,1表示存在。\small \hat{C}_{ij}表示网络预测目标边界框i内存在第j类目标的Sigmoid概率(将预测值\small C_{ij}通过sigmoid函数得到)。

    4.3目标定位损失

    目标定位损失\small L_{loc}(l,g)采用的是真实偏差值与预测偏差值差的平方和,其中\small \hat{l}表示预测矩形框坐标偏移量(注意网络预测的是偏移量,不是直接预测坐标),\small \hat{g}表示与之匹配的GTbox与默认框之间的坐标偏移量,\small (b^{x},b^{y},b^{w},b^{h})为预测的目标矩形框参数,\small (c^{x},c^{y},p^{w},p^{h})为默认矩形框参数,\small (g^{x},g^{y},g^{w},g^{h})为与之匹配的真实目标矩形框参数,这些参数都是映射在预测特征图上的。

    先写这么多吧,以后如果有什么需要补充的在补充,有问题还请指出,谢谢!

     

     

     

     

     

    展开全文
  • Yolov3、v4、v5、Yolox模型权重及网络结构图资源下载

    万次阅读 多人点赞 2020-08-09 10:27:27
    大白在之前写过关于...而且文章中很多网络结构高清图,有些同学也想要下载,因此大白将整体的资源汇总,便于大家下载。 下载方式:关注微信公众号《江大白》,回复关键词 Yolo,提取下面所有资源的下载方式。 Yolov

    对于Yolo相关的算法,大白从Yolov3、Yolov4、Yolov5、Yolox的角度,制作了一些文章和视频

    ① Yolov3资料

    【视频】深入浅出Yolov3(上)深入浅出Yolov3(下)

    ② Yolov4资料

    【视频】深入浅出Yolov4(上)深入浅出Yolov4(下)

    【文章】《深入浅出Yolo系列之Yolov4核心基础知识完整讲解》

    ③ Yolov5资料

    【文章】《深入浅出Yolo系列之Yolov5核心基础知识完整讲解》

    ④ Yolox资料

    【文章】《深入浅出Yolo系列之Yolox核心基础知识完整讲解》

    【文章】《深入浅出Yolox之自有数据集训练超详细教程》



    在上面的文章和视频中,有一些图片、权重、数据集等资源,很多同学想要进行下载。

    因此大白将所有资源整理汇总,便于大家下载。

    1 下载资源汇总

    1.1 网络模型及结构图图片

    【包含内容】

    (1) Yolov3、Yolov4、Yolov5、Yolox网络结构图的图片

    (2) Yolov3、Yolov4、Yolov5、Yolox代码及模型权重

    【下载方式】

    (1)关注微信公众号江大白

    (2)回复关键词图片,即可下载。

    1.2 网络结构图PPT文件

    【包含内容】

    (1) Yolov3、Yolov4、Yolov5网络结构图的PPT文件

    注意:Yolox结构图的PPT文件,暂不提供下载

    【下载方式】

    (1)关注微信公众号江大白

    (2)回复关键词结构图,按照流程,即可下载,修改使用,已授权。

    1.3《人工智能算法岗江湖武林秘籍》PDF下载方式

    【包含内容】

    国内45家大厂,超3500篇算法面经,详细汇总,将近800页PDF文件,详情点击查看。

    【下载方式】

    (1)关注微信公众号江大白

    (2)回复关键词算法,即可收到网盘下载链接。

    1.4 《30天入门人工智能》视频课程

    【包含内容】

    大白花费一年时间,准备的31节视频课程,从工作实战的角度,深入浅出的讲解各个知识点。

    【查看方式】

    腾讯课堂链接点击查看

    1.5 Yolox训练数据集及权重

    【包含内容】

    人头数据集、Yolox的代码、7个模型权重及onnx文件

    【下载方式】

    (1)关注微信公众号江大白

    (2)回复关键词Yolox,即可收到网盘下载链接。


    2 下载资源图示详情

    下面大白将以上的资料进行展开,以图示的方式,便于大家查看下载。

    2.1 网络模型及结构图图片

    ① Yolov3、Yolov4、Yolov5、Yolox网络结构图

    (1)Yolov3网络结构图

    在这里插入图片描述

    (2)Yolov4网络结构图

    在这里插入图片描述

    (3)Yolov5网络结构图

    在这里插入图片描述

    (4)Yolox-Darknet53网络结构图

    在这里插入图片描述

    (5)Yolox-s网络结构图

    在这里插入图片描述

    ② Yolov3、Yolov4、Yolov5、Yolox代码及模型权重
    在这里插入图片描述

    2.2 网络结构图PPT文件

    内容:Yolov3、Yolov4、Yolov5网络结构图的PPT文件
    在这里插入图片描述

    2.3 《人工智能算法岗江湖武林秘籍》PDF文件

    在这里插入图片描述

    2.4 《30天入门人工智能》视频课程框架

    在这里插入图片描述

    2.5 Yolox训练数据集及权重

    在这里插入图片描述

    展开全文
  • YOLOv3网络结构和解析

    万次阅读 多人点赞 2019-05-09 23:03:07
    YOLOv3网络结构细致解析 基于keras-yolov3,原理及代码细节的理解 论文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf yolov3官网:https://pjreddie.com/darknet/yolo/ Keras版本推荐:...
  • Yolov5s可视化网络结构

    万次阅读 多人点赞 2020-07-29 11:03:32
    Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:...
  • 二层网络结构模型: 核心层和接入层(没有汇聚层) 三层网络结构模型: 核心层、汇聚层和接入层 二层网络的组网能力非常有限,所以一般只是用来搭建小局域网, 二层网络结构模式运行简便交换机根据MAC地址表进行...
  • UNet网络结构

    万次阅读 2020-03-01 12:35:24
    UNet是医学图像处理方面著名的图像分割网络,...其网络结构如下: 可以看出,该网络结构主要分为三部分:下采样,上采样以及跳跃连接。首先将该网络分为左右部分来分析,左边是压缩的过程,即Encoder。通过卷积和...
  • 第二章:深度学习网络结构

    千人学习 2018-12-20 17:31:35
    本章介绍深度学习网络结构
  • (2)画神经网络结构图工具: NN-SVG 、ConvNetDraw 1、神经网络可视化工具:Netron 地址:下载地址 netron 参考:参考 2、画神经网络结构图工具: NN-SVG 、ConvNetDraw 地址:下载地址 参考:参考 ...
  • 什么是网络,网络类型,网络结构

    千次阅读 2020-05-03 14:00:53
    什么是网络,网络类型,网络结构 1,什么是网络 网络有很多种形式:局域网(LAN),广域网(WAN),城域网(MAN),园区网(CAN),以太网,令牌环网,光纤分布式数据接口网(FDDI),异步传输模式网(ATM),帧中继网,T1...
  • ResNet网络结构解析

    千次阅读 2019-05-15 09:58:03
    ResNet是识别、检测中常用的backbone,看检测相关论文的时候重点都在方法创新上,并没有特别在意网络结构,但是到自己跑实验改网络的时候就涉及到结构细节问题,于是详细的看了下ResNet网络结构。下图是ResNet的网络...
  • SegNet网络结构

    千次阅读 2019-06-04 10:25:40
    @SegNet网络结构 刚刚接触深度学习–semantic segmentation相关的研究,对SegNet的网络结构进行了学习,虽然已经有了很多的解释,还是想要自己写一下,将整体结构做一个梳理。博客底部附有参考链接,感谢大神们的...
  • 说到深度学习一般网络结构越深网络的效果就会越好。因为越深的网络可以得到更多的语义信息。 上图可以看出来随着网络结构的加深网络的分类,识别效果也就越好。事实是这样吗?人们对chan常规的网络直接堆叠很多层...
  • 图像识别-AlexNet网络结构详解

    千次阅读 多人点赞 2020-05-21 10:24:03
    图像识别-AlexNet网络结构详解,基于caffe prototxt文件,绘制网络结构图,并详细解析网络结构
  • RegNet网络结构与搭建

    千次阅读 多人点赞 2021-03-04 10:28:29
    目录前言设计设计空间RegNet网络结构详解RegNet结构框架RegNet block详解RegNetX模型详细参数RegNetY模型详细参数 前言 原论文名称:Designing Network Design Spaces 原论文下载地址:...
  • 《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》 2016,Google,Inception V4,Inception ResNet V1、V2 ...Residual connection不同于传统网络结构,且在2015 ILS...
  • ResNet网络结构详解与模型的搭建

    万次阅读 多人点赞 2020-03-07 13:37:55
    1. ResNet网络结构详解视频 2. 使用Pytorch搭建ResNet网络并基于迁移学习训练 3. 使用Tensorflow搭建ResNet网络并基于迁移学习训练 ResNet网络是在2015年由微软实验室提出,斩获当年ImageNet竞赛中分类任务第一...
  • Yolov4网络结构

    千次阅读 2020-04-26 00:53:35
    结构图 目前官方放出的cfg配置文件网络结构为CSPDarknet53+PAnet-SPP+Yolov3 head 结构,根据权重文件做出的网络结构图如下:
  • GoogLeNet网络结构

    万次阅读 多人点赞 2019-04-30 17:50:59
    GoogLeNet的网络结构 表格: 注:上表中的“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积操作之前使用了1x1卷积的数量。 GoogLeNet网络结构明细表解析如下: 0、输入 原始输入图像为224x224x3,且都进行了零...
  • VGG网络结构分析

    万次阅读 2018-01-17 21:40:55
    本节主要对VGG网络结构做一个详细的解读,并针对它所在Alexnet上做出的改动做详解的分析。 首先,附上一张VGG的网络结构图: 由上图所知,VGG一共有五段卷积,每段卷积之后紧接着最大池化层,作者一共实验了6种...
  • VGG19 基本网络结构

    万次阅读 2018-11-15 23:07:47
    VGG19 基本网络结构图 VGG19论文可参考网上论文,Keras中使用plot_model可参考网上内容。 keras 中利用plot_model可绘制网络的结构图,Vgg19的网络结构图如下(输出根据自己的应用进行了一些修改): ...
  • Yolov5m可视化网络结构

    万次阅读 2020-07-29 11:04:48
    Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:...
  • YOLO v3 网络结构分析

    千次阅读 2019-05-19 19:46:43
    YOLO v3 网络结构分析 微信公众号:幼儿园的学霸 个人的学习笔记,关于OpenCV,关于机器学习, …。问题或建议,请公众号留言; 最近在看Tensorflow,没有经过实践的学习总感觉很心虚,因此打算做点什么。所以,那就...
  • GoogLeNet网络结构学习

    万次阅读 2017-10-20 16:23:05
    1.背景介绍 GoogLeNet, 一个22层的深度网络,2014年ILSVRC挑战赛冠军,将Top5 的错误率...论文地址:Going deeper with convolutions。   ...2.网络结构 GoogLeNet网络的整体结构如下:GoogLeNet清晰版本3.主要创新
  • 深度学习-VGG16网络结构详解

    万次阅读 多人点赞 2020-06-03 14:38:50
    附上,官方的vgg16网络结构图: 介绍结构图 首先需要看懂上图中的一些式子含义,如conv3-64,conv3-125 conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128; input
  • Yolov5x可视化网络结构

    万次阅读 2020-07-29 11:06:10
    Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:...
  • Caffe神经网络结构汇总

    千次阅读 2017-06-01 15:58:50
    自2012年Alexnet赢得了ImageNet竞赛以来,深度学习(神经网络)得到了飞速发展,产生了许多的神经网络结构,本文主要总结Caffe中使用的神经网络(分类的神经网络),本文的神经网络作者都使用Caffe训练过,并在Kaggle...
  • Yolov5l可视化网络结构

    万次阅读 2020-07-29 11:05:35
    Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:...
  • 贝叶斯网络结构学习方法简介

    万次阅读 多人点赞 2017-12-14 16:56:46
    题目:贝叶斯网络结构学习方法简介  贝叶斯网络(Bayesiannetwork, BN)结构学习就是从给定的数据集中学出贝叶斯网络结构,即各节点之间的依赖关系;只有确定了结构才能继续学得网络参数,即表示各节点之间依赖强弱...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,585,461
精华内容 634,184
关键字:

网络结构