• DarkNet网络结构


    一、darknet53网络结构图

    文字版:卷积+(下采样卷积+1残差块)+(下采样卷积+2残差块)+(下采样卷积+8残差块)+(下采样卷积+8残差块)+(下采样卷积+4*残差块)

    在这里插入图片描述

         不难看出,darknet53就是重复堆叠下采样卷积+n*残差块(n为残差块的个数)这个结构而组成的。而更基本的结构就是残差块了,因此我们先构建出残差块,然后重复堆叠上述结构darknet53就完成了。

    二、残差快结构

           残差块结构不止下图这一种,但我们只讨论darknet53中用到的这种。如下图所示,残差块结构由两条支路组成,一条支路将上一层输出的feature map进行卷积等操作,另一条支路将上一层输出的feature map恒等映射,并与刚才卷积操作完的feature map进行逐元素相加,因此两条支路的通道数必须相等。也就是说发生卷积等操作的那条支路(残差路)的输出不能改变feature map的通道数。

    另外,darknet53在所有的卷积之后和激活(leakyrelu)之前会插入bn层(batch normalization)。 

    1. import torch
    2. import torch.nn as nn
    3. # 残差模块
    4. class ResidualBlock(nn.Module):
    5. def __init__(self,inplanes,planes):
    6. # inplanes是下采样卷积完输入到残差支路的通道数,planes是一个列表,planes[0]是残差第一个卷积操作输出通道数,也是第二个卷积操作输入通道数
    7. # planes[1]是残差第二个卷积操作输出通道数
    8. super(ResidualBlock,self).__init__()
    9. # 残差支路的第一个卷积操作:卷积核1*1,步长1,不填充,不加偏置
    10. self.conv1 = nn.Conv2d(inplanes,planes[0],kernel_size=1,stride=1,padding=0,bias=False)
    11. # bn层的输入参数是上一层输出的通道数
    12. self.bn1 = nn.BatchNorm2d(planes[0])
    13. # LeakyReLU的参数是负半轴的斜率,正半轴是1
    14. self.relu1 = nn.LeakyReLU(0.1)
    15. # 残差支路的第二个卷积操作:卷积核3*3,步长1,填充1(p=1),不加偏置
    16. # 卷积输出尺寸计算公式 (n-f+2p)/s+1 此处f=3,p=1,s=1
    17. self.conv2 = nn.Conv2d(planes[0],planes[1],kernel_size=3,stride=1,padding=1,bias=False)
    18. self.bn2 = nn.BatchNorm2d(planes[1])
    19. self.relu2 = nn.LeakyReLU(0.1)
    20. # 【注】darknet的基本操作:卷积+bn+relu
    21. def forward(self,x):
    22. # 恒等映射支路
    23. residual = x
    24. out = self.conv1(x)
    25. out = self.bn1(out)
    26. out = self.relu1(out)
    27. out = self.conv2(out)
    28. out = self.bn2(out)
    29. out = self.relu2(out)
    30. # 将恒等映射与残差路逐元素相加
    31. out = residual + out

     基本结构:下采样卷积+残差块

    下图示下采样卷积+n*残差块结构:

    在这里插入图片描述

           除了第一个单独的卷积+bn+激活操作,一共有5组下采样卷积+n*残差块,按顺序是:(下采+1残差)(下采+2残差)(下采+8残差)(下采+8残差)(下采+4*残差),所以待会儿会出现一个储存残差块个数的列表blocks_num=[1,2,8,8,4]

  • 相关阅读:
    pycharm中添加固定的作者的信息
    第四章. Pandas进阶—数据合并
    vue页面文本禁止复制
    docker
    谷歌(Chrome)无法进行更新
    Java项目:SSHJava基于ssh的教研室资料管理系统前后台
    [附源码]计算机毕业设计JAVA基于web的球类体育馆预定系统
    基于 HarmonyOS 的 HTTPS 请求过程开发示例(ArkTS)
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    环境准备:虚拟环境搭建
  • 原文地址:https://blog.csdn.net/a15608445683/article/details/127914208