经典主干DarkNet53&网络搭建

1. DarkNet53网络介绍

YOLOv3中的backbone,DarkNet53。不同于YOLOv2中的DarkNet19,它由大量的残差组成,DarkNet53在ImageNet上面的表现也证明了该网络的有效行。DarkNet53的网络结构如下。
在这里插入图片描述
YOLO版本的如下:
在这里插入图片描述
Darknet-53中总共有6个单独的卷积层和23个Residual,每个Residual包含2个卷积层(一个1×1,一个3×3),所以Darknet-53中共有52层卷积,可为什么叫做Darknet-53呢?因为Darknet-53在YOLO v3中,前52层只用作特征提取,最后一层是用于输出预测值的,故加上输出那一层称为Darknet-53。

如上图所示,DarkNet53主要由基本的卷积块(ConvBlock = Conv2d + BN +LeakyRelu)、残差块等组成。残差结构如下,它由1x1卷积、3x3卷积组成。
在这里插入图片描述
残差块的输入首先经过一个1×1的卷积层Conv(1×1,stride=1)将通道数降为原来的一半,接着通过3x3卷积将通道数恢复为In_channels。最后3×3卷积的输出与经过Shorcut传递过来的输入Input相加得到最终的Output(此时3×3卷积的输出与Input的形状(In_channels,h,w)相同,可以直接相加)。我们看到,经过Residual运算之后,输入的特征图形状保持不变。

2. DarkNet53网络搭建(YOLO版本)

Step1: 封装基本的卷积块CBL
在这里插入图片描述

#封装CBL
class Conv(nn.Module):
    def __init__(self, c_in, c_out, k, s, p, bias=True):
        '''
        自定义卷积块,一次性完成卷积+归一化+池化
        :param c_in: 输入通道数
        :param c_in: 输出通道数
        :param k:    卷积核大小
        :param s:    步长
        :param p:    填充
        :param bias: 偏置
        '''
        super(Conv, self).__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(c_in, c_out, k, s, p, bias=bias),
            nn.BatchNorm2d(c_out),
            nn.LeakyReLU(0.1),
        )

    def forward(self, x):
        return self.conv(x)

Step2: 封装残差单元
残差块

class ConvResidual(nn.Module):
    def __init__(self, c_in):
        '''
        自定义残差单元,只需给出通道数,该单元完成两次卷积,并进行加残差后返回相同维度的特征图
        '''
        super(ConvResidual, self).__init__()
        c = c_in/2
        # 采用1*1 + 3*3 的形式加深网络深度,加强特征抽取
        self.conv = nn.Sequential(
            Conv(c_in, c, 1, 1, 0), #1x1卷积降通道
            Conv(c, c_in, 3, 1, 1), #3x3拉回通道
        )
    def forward(self, x):
        return x + self.conv(x) #残差

Step3:根据DarkNet53网络图将卷积块与残差块进行组合,以搭建最终的网络。

class DarkNet53(nn.Module):
    def __init__(self):
        super(DarkNet53, self).__init__()
        self.conv1 = Conv(3, 32, 3, 1, 1)  # 一个卷积块 = 1层卷积
        self.conv2 = Conv(32, 64, 3, 2, 1)
        self.conv3_4 = ConvResidual(64) # 一个残差块 = 2层卷积   1
        self.conv5 = Conv(64, 128, 3, 2, 1)
        self.conv6_9 = nn.Sequential(    #4层卷积               2
            ConvResidual(128),
            ConvResidual(128),
        )
        self.conv10 = Conv(128, 256, 3, 2, 1)
        self.conv11_26 = nn.Sequential(*[ConvResidual(256) for i in range(8)])  # 8
        self.conv27 = Conv(256, 512, 3, 2, 1)
        self.conv28_43 = nn.Sequential(*[ConvResidual(512) for i in range(8)])  # 8
        self.conv44 = Conv(512, 1024, 3, 2, 1)
        self.conv45_52 = nn.Sequential(*[ConvResidual(1024) for i in range(4)]) # 4

    def forward(self, x):
        conv1 = self.conv1(x)
        conv2 = self.conv2(conv1)
        conv3_4 = self.conv3_4(conv2)
        conv5 = self.conv5(conv3_4)
        conv6_9 = self.conv6_9(conv5)
        conv10 = self.conv10(conv6_9)
        conv11_26 = self.conv11_26(conv10)
        conv27 = self.conv27(conv11_26)
        conv28_43 = self.conv28_43(conv27)
        conv44 = self.conv44(conv28_43)
        conv45_52 = self.conv45_52(conv44)
        return conv45_52, conv28_43, conv11_26  # YOLOv3用,所以输出了3次特征
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Darknet-53网络结构图如下所示\[3\]: <<图1. Darknet-53网络结构图>> 在Darknet-53中,网络中堆叠了大量的残差结构Residual,并且每两个残差结构之间插着一个步长为2,卷积核大小为3×3的卷积层,用于完成下采样的操作。输入尺寸为416×416,最后卷积层输出的特征图尺寸为13×13,通道数为1024。在YOLO v3中,Darknet-53只用于提取特征,所以没有最后的全局池化层、全连接层和激活函数层,而是输出了三种不同尺寸的特征图(13×13、26×26、52×52)。图2展示了Darknet-53中堆叠的残差单元的结构图。 希望这个回答对您有帮助! #### 引用[.reference_title] - *1* [Darknet53网络结构图及代码实现](https://blog.csdn.net/leiduifan6944/article/details/104857968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [yolov3网络DarkNet53)结构详解以及Pytorch代码实现](https://blog.csdn.net/Just_do_myself/article/details/123583291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐大队队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值