[ 图像分类 ] 经典网络模型5——DenseNet 详解与复现


🤵 AuthorHorizon Max

编程技巧篇各种操作小结

🎇 机器视觉篇会变魔术 OpenCV

💥 深度学习篇简单入门 PyTorch

🏆 神经网络篇经典网络模型

💻 算法篇再忙也别忘了 LeetCode


🚀 Dense Convolutional Network

Dense Convolutional Network 就是熟知的 DenseNet(密集卷积网络),获得了 CVPR 2017年 的 Oral ;

对于每一层,前面所有层的特征映射作为输入,并将特征映射作为后续所有层的输入 ;

它缓解了 消失梯度 问题,加强了 特征传播 ,鼓励了 特征重用 ,并大大减少了 参数量


🔗 论文地址:Densely Connected Convolutional Networks


DenseNet


🚀 DenseNet 详解

🎨 DenseNet 网络结构

卷积神经网络(CNN) 已经成为视觉的主要机器学习方法 ;

随着CNN 的不断发展,网络模型越来越深入,一个新的研究问题出现了:

是关于 输入或梯度的信息 通过许多层后,当它到达网络的末端(或开始)时,它可能会 消失 和 "冲刷"


🚩 核心思想

基于此,作者提炼了一个简单的 连接模式

为确保网络中各层之间的信息流动最大化,将所有层(具有匹配的特征图大小)直接连接起来 ;

每一层从所有前面的层获得额外的输入,并将自己的特征映射传递给所有后面的层

在传统的 L层网络 中引入了 L 连接,而在 DenseNet 中引入了 L(L+1) / 2 连接 !

以下是一个生长速率 k = 4 的 5层 dense block ,每一层都以前面所有的特征图作为输入:


A 5-layer dense block

DenseNet

🎨 DenseNet 网络特点

这种连接模式与直觉相反的效果是:它需要的 参数量 比传统卷积网络 更少

除了更好的 参数效率 外,DenseNet的一大优点是改进了整个 网络的信息流和梯度,这使得它们 易于训练

密集连接 具有 正则化效应 ,它减少了训练集规模较小的任务的 过拟合 现象 ;

DenseNet并没有从极 (如 ResNet)或极 (如 GoogLeNet)的架构中获取表征力,而是通过 特征重用 来挖掘网络的潜力,产生 易于训练和高参数效率 的压缩模型 ;

卷积网络传递每一层实现的非线性变换一般都定义一个 批量归一化(BN)修正线性单元(ReLU)池化(Pool)卷积(Conv) 等操作的复合函数 ;

DenseNet 中为三个连续操作的复合函数:批归一化(BN),随后是 修正线性单元(ReLU)3 × 3卷积(Conv)


DenseNet


🚀 DenseNet 复现

# Here is the code :

import torch
import torch.nn as nn
import torch.nn.functional as F
from collections import OrderedDict
from torchinfo import summary


class Bottleneck(nn.Module):
    def __init__(self, in_features, growth_rate, bn_size, drop_rate):
        super(Bottleneck, self).__init__()
        out_features = bn_size * growth_rate
        self.norm1: nn.BatchNorm2d
        self.add_module('norm1', nn.BatchNorm2d(in_features))
        self.relu1: nn.ReLU
        self.add_module('relu1', nn.ReLU(inplace=True))
        self.conv1: nn.Conv2d
        self.add_module('conv1', nn.Conv2d(in_features, out_features,
                                           kernel_size=1, stride=1, bias=False))
        self.norm2: nn.BatchNorm2d
        self.add_module('norm2', nn.BatchNorm2d(bn_size * growth_rate))
        self.relu2: nn.ReLU
        self.add_module('relu2', nn.ReLU(inplace=True))
        self.conv2: nn.Conv2d
        self.add_module('conv2', nn.Conv2d(out_features, growth_rate,
                                           kernel_size=3, stride=1, padding=1,
                                           bias=False))
        self.drop_rate = float(drop_rate)

    def forward(self, x):
        new_features = self.conv1(self.relu1(self.norm1(x)))
        new_features = self.conv2(self.relu2(self.norm2(new_features)))

        if self.drop_rate > 0:
            new_features = F.dropout(new_features, p=self.drop_rate, training=self.training)

        new_features = torch.cat([x, new_features], 1)
        return new_features


class Dense_Block(nn.Sequential):               # Dense_Block
    def __init__(self, in_features, growth_rate, num_block, bn_size, drop_rate):
        super(Dense_Block, self).__init__()
        for i in range(num_block):
            layer = Bottleneck(in_features + i * growth_rate,
                               growth_rate, bn_size, drop_rate)
            self.add_module('dense_layer%d' % (i + 1), layer)


class Transition_Layer(nn.Sequential):                     # Transition_Layer
    def __init__(self, in_features, out_features):
        super(Transition_Layer, self).__init__()
        self.add_module('norm', nn.BatchNorm2d(in_features))
        self.add_module('relu', nn.ReLU(inplace=True))
        self.add_module('conv', nn.Conv2d(in_features, out_features,
                                          kernel_size=1, stride=1, bias=False))
        self.add_module('pool', nn.AvgPool2d(kernel_size=2, stride=2))


class DenseNet(nn.Module):
    def __init__(self, block_config, growth_rate, num_init_features, bn_size=4, drop_rate=0, num_classes=1000):
        super(DenseNet, self).__init__()

        # First convolution
        self.features = nn.Sequential(OrderedDict([
            ('conv0', nn.Conv2d(3, num_init_features, kernel_size=7, stride=2, padding=3, bias=False)),
            ('norm0', nn.BatchNorm2d(num_init_features)),
            ('relu0', nn.ReLU(inplace=True)),
            ('pool0', nn.MaxPool2d(kernel_size=3, stride=2, padding=1)),
        ]))

        # Each denseblock
        num_features = num_init_features
        for i, num_layers in enumerate(block_config):
            block = Dense_Block(in_features=num_features, growth_rate=growth_rate, num_block=num_layers,
                                bn_size=bn_size,  drop_rate=drop_rate)
            self.features.add_module('dense_block%d' % (i + 1), block)

            num_features = num_features + num_layers * growth_rate
            if i != len(block_config) - 1:
                trans = Transition_Layer(in_features=num_features,
                                         out_features=num_features // 2)
                self.features.add_module('transition%d' % (i + 1), trans)
                num_features = num_features // 2

        # Final batch norm
        self.features.add_module('norm5', nn.BatchNorm2d(num_features))

        # Classification layer
        self.avg = nn.AvgPool2d(kernel_size=7, stride=1)
        self.classifier = nn.Linear(num_features, num_classes)

    def forward(self, x):
        x = self.features(x)
        x = F.relu(x, inplace=True)
        x = self.avg(x)
        x = torch.flatten(x, 1)
        out = self.classifier(x)
        return out


def DenseNet121(**kwargs):
    return DenseNet(block_config=[6, 12, 24, 16], growth_rate=32, num_init_features=64, **kwargs)


def DenseNet161(**kwargs):
    return DenseNet(block_config=[6, 12, 36, 24], growth_rate=48, num_init_features=96, **kwargs)


def DenseNet169(**kwargs):
    return DenseNet(block_config=[6, 12, 32, 32], growth_rate=32, num_init_features=64, **kwargs)


def DenseNet201(**kwargs):
    return DenseNet(block_config=[6, 12, 48, 32], growth_rate=32, num_init_features=64, **kwargs)


def DenseNet264(**kwargs):
    return DenseNet(block_config=[6, 12, 64, 48], growth_rate=32, num_init_features=64, **kwargs)


def test():
    net = DenseNet121()
    y = net(torch.randn(1, 3, 224, 224))
    print(y.size())
    summary(net, (1, 3, 224, 224), depth=4)


if __name__ == '__main__':
    test()

输出结果:

torch.Size([1, 1000])
==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
DenseNet                                 --                        --
├─Sequential: 1-1                        [1, 1024, 7, 7]           --
│    └─Conv2d: 2-1                       [1, 64, 112, 112]         9,408
│    └─BatchNorm2d: 2-2                  [1, 64, 112, 112]         128
│    └─ReLU: 2-3                         [1, 64, 112, 112]         --
│    └─MaxPool2d: 2-4                    [1, 64, 56, 56]           --
│    └─Dense_Block: 2-5                  [1, 256, 56, 56]          --
│    │    └─Bottleneck: 3-1              [1, 96, 56, 56]           --
│    │    │    └─BatchNorm2d: 4-1        [1, 64, 56, 56]           128
│    │    │    └─ReLU: 4-2               [1, 64, 56, 56]           --
│    │    │    └─Conv2d: 4-3             [1, 128, 56, 56]          8,192
│    │    │    └─BatchNorm2d: 4-4        [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-5               [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-6             [1, 32, 56, 56]           36,864
│    │    └─Bottleneck: 3-2              [1, 128, 56, 56]          --
│    │    │    └─BatchNorm2d: 4-7        [1, 96, 56, 56]           192
│    │    │    └─ReLU: 4-8               [1, 96, 56, 56]           --
│    │    │    └─Conv2d: 4-9             [1, 128, 56, 56]          12,288
│    │    │    └─BatchNorm2d: 4-10       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-11              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-12            [1, 32, 56, 56]           36,864
│    │    └─Bottleneck: 3-3              [1, 160, 56, 56]          --
│    │    │    └─BatchNorm2d: 4-13       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-14              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-15            [1, 128, 56, 56]          16,384
│    │    │    └─BatchNorm2d: 4-16       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-17              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-18            [1, 32, 56, 56]           36,864
│    │    └─Bottleneck: 3-4              [1, 192, 56, 56]          --
│    │    │    └─BatchNorm2d: 4-19       [1, 160, 56, 56]          320
│    │    │    └─ReLU: 4-20              [1, 160, 56, 56]          --
│    │    │    └─Conv2d: 4-21            [1, 128, 56, 56]          20,480
│    │    │    └─BatchNorm2d: 4-22       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-23              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-24            [1, 32, 56, 56]           36,864
│    │    └─Bottleneck: 3-5              [1, 224, 56, 56]          --
│    │    │    └─BatchNorm2d: 4-25       [1, 192, 56, 56]          384
│    │    │    └─ReLU: 4-26              [1, 192, 56, 56]          --
│    │    │    └─Conv2d: 4-27            [1, 128, 56, 56]          24,576
│    │    │    └─BatchNorm2d: 4-28       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-29              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-30            [1, 32, 56, 56]           36,864
│    │    └─Bottleneck: 3-6              [1, 256, 56, 56]          --
│    │    │    └─BatchNorm2d: 4-31       [1, 224, 56, 56]          448
│    │    │    └─ReLU: 4-32              [1, 224, 56, 56]          --
│    │    │    └─Conv2d: 4-33            [1, 128, 56, 56]          28,672
│    │    │    └─BatchNorm2d: 4-34       [1, 128, 56, 56]          256
│    │    │    └─ReLU: 4-35              [1, 128, 56, 56]          --
│    │    │    └─Conv2d: 4-36            [1, 32, 56, 56]           36,864
│    └─Transition_Layer: 2-6             [1, 128, 28, 28]          --
│    │    └─BatchNorm2d: 3-7             [1, 256, 56, 56]          512
│    │    └─ReLU: 3-8                    [1, 256, 56, 56]          --
│    │    └─Conv2d: 3-9                  [1, 128, 56, 56]          32,768
│    │    └─AvgPool2d: 3-10              [1, 128, 28, 28]          --
│    └─Dense_Block: 2-7                  [1, 512, 28, 28]          --
│    │    └─Bottleneck: 3-11             [1, 160, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-37       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-38              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-39            [1, 128, 28, 28]          16,384
│    │    │    └─BatchNorm2d: 4-40       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-41              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-42            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-12             [1, 192, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-43       [1, 160, 28, 28]          320
│    │    │    └─ReLU: 4-44              [1, 160, 28, 28]          --
│    │    │    └─Conv2d: 4-45            [1, 128, 28, 28]          20,480
│    │    │    └─BatchNorm2d: 4-46       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-47              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-48            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-13             [1, 224, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-49       [1, 192, 28, 28]          384
│    │    │    └─ReLU: 4-50              [1, 192, 28, 28]          --
│    │    │    └─Conv2d: 4-51            [1, 128, 28, 28]          24,576
│    │    │    └─BatchNorm2d: 4-52       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-53              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-54            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-14             [1, 256, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-55       [1, 224, 28, 28]          448
│    │    │    └─ReLU: 4-56              [1, 224, 28, 28]          --
│    │    │    └─Conv2d: 4-57            [1, 128, 28, 28]          28,672
│    │    │    └─BatchNorm2d: 4-58       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-59              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-60            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-15             [1, 288, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-61       [1, 256, 28, 28]          512
│    │    │    └─ReLU: 4-62              [1, 256, 28, 28]          --
│    │    │    └─Conv2d: 4-63            [1, 128, 28, 28]          32,768
│    │    │    └─BatchNorm2d: 4-64       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-65              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-66            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-16             [1, 320, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-67       [1, 288, 28, 28]          576
│    │    │    └─ReLU: 4-68              [1, 288, 28, 28]          --
│    │    │    └─Conv2d: 4-69            [1, 128, 28, 28]          36,864
│    │    │    └─BatchNorm2d: 4-70       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-71              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-72            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-17             [1, 352, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-73       [1, 320, 28, 28]          640
│    │    │    └─ReLU: 4-74              [1, 320, 28, 28]          --
│    │    │    └─Conv2d: 4-75            [1, 128, 28, 28]          40,960
│    │    │    └─BatchNorm2d: 4-76       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-77              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-78            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-18             [1, 384, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-79       [1, 352, 28, 28]          704
│    │    │    └─ReLU: 4-80              [1, 352, 28, 28]          --
│    │    │    └─Conv2d: 4-81            [1, 128, 28, 28]          45,056
│    │    │    └─BatchNorm2d: 4-82       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-83              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-84            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-19             [1, 416, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-85       [1, 384, 28, 28]          768
│    │    │    └─ReLU: 4-86              [1, 384, 28, 28]          --
│    │    │    └─Conv2d: 4-87            [1, 128, 28, 28]          49,152
│    │    │    └─BatchNorm2d: 4-88       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-89              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-90            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-20             [1, 448, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-91       [1, 416, 28, 28]          832
│    │    │    └─ReLU: 4-92              [1, 416, 28, 28]          --
│    │    │    └─Conv2d: 4-93            [1, 128, 28, 28]          53,248
│    │    │    └─BatchNorm2d: 4-94       [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-95              [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-96            [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-21             [1, 480, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-97       [1, 448, 28, 28]          896
│    │    │    └─ReLU: 4-98              [1, 448, 28, 28]          --
│    │    │    └─Conv2d: 4-99            [1, 128, 28, 28]          57,344
│    │    │    └─BatchNorm2d: 4-100      [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-101             [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-102           [1, 32, 28, 28]           36,864
│    │    └─Bottleneck: 3-22             [1, 512, 28, 28]          --
│    │    │    └─BatchNorm2d: 4-103      [1, 480, 28, 28]          960
│    │    │    └─ReLU: 4-104             [1, 480, 28, 28]          --
│    │    │    └─Conv2d: 4-105           [1, 128, 28, 28]          61,440
│    │    │    └─BatchNorm2d: 4-106      [1, 128, 28, 28]          256
│    │    │    └─ReLU: 4-107             [1, 128, 28, 28]          --
│    │    │    └─Conv2d: 4-108           [1, 32, 28, 28]           36,864
│    └─Transition_Layer: 2-8             [1, 256, 14, 14]          --
│    │    └─BatchNorm2d: 3-23            [1, 512, 28, 28]          1,024
│    │    └─ReLU: 3-24                   [1, 512, 28, 28]          --
│    │    └─Conv2d: 3-25                 [1, 256, 28, 28]          131,072
│    │    └─AvgPool2d: 3-26              [1, 256, 14, 14]          --
│    └─Dense_Block: 2-9                  [1, 1024, 14, 14]         --
│    │    └─Bottleneck: 3-27             [1, 288, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-109      [1, 256, 14, 14]          512
│    │    │    └─ReLU: 4-110             [1, 256, 14, 14]          --
│    │    │    └─Conv2d: 4-111           [1, 128, 14, 14]          32,768
│    │    │    └─BatchNorm2d: 4-112      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-113             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-114           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-28             [1, 320, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-115      [1, 288, 14, 14]          576
│    │    │    └─ReLU: 4-116             [1, 288, 14, 14]          --
│    │    │    └─Conv2d: 4-117           [1, 128, 14, 14]          36,864
│    │    │    └─BatchNorm2d: 4-118      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-119             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-120           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-29             [1, 352, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-121      [1, 320, 14, 14]          640
│    │    │    └─ReLU: 4-122             [1, 320, 14, 14]          --
│    │    │    └─Conv2d: 4-123           [1, 128, 14, 14]          40,960
│    │    │    └─BatchNorm2d: 4-124      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-125             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-126           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-30             [1, 384, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-127      [1, 352, 14, 14]          704
│    │    │    └─ReLU: 4-128             [1, 352, 14, 14]          --
│    │    │    └─Conv2d: 4-129           [1, 128, 14, 14]          45,056
│    │    │    └─BatchNorm2d: 4-130      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-131             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-132           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-31             [1, 416, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-133      [1, 384, 14, 14]          768
│    │    │    └─ReLU: 4-134             [1, 384, 14, 14]          --
│    │    │    └─Conv2d: 4-135           [1, 128, 14, 14]          49,152
│    │    │    └─BatchNorm2d: 4-136      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-137             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-138           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-32             [1, 448, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-139      [1, 416, 14, 14]          832
│    │    │    └─ReLU: 4-140             [1, 416, 14, 14]          --
│    │    │    └─Conv2d: 4-141           [1, 128, 14, 14]          53,248
│    │    │    └─BatchNorm2d: 4-142      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-143             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-144           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-33             [1, 480, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-145      [1, 448, 14, 14]          896
│    │    │    └─ReLU: 4-146             [1, 448, 14, 14]          --
│    │    │    └─Conv2d: 4-147           [1, 128, 14, 14]          57,344
│    │    │    └─BatchNorm2d: 4-148      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-149             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-150           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-34             [1, 512, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-151      [1, 480, 14, 14]          960
│    │    │    └─ReLU: 4-152             [1, 480, 14, 14]          --
│    │    │    └─Conv2d: 4-153           [1, 128, 14, 14]          61,440
│    │    │    └─BatchNorm2d: 4-154      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-155             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-156           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-35             [1, 544, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-157      [1, 512, 14, 14]          1,024
│    │    │    └─ReLU: 4-158             [1, 512, 14, 14]          --
│    │    │    └─Conv2d: 4-159           [1, 128, 14, 14]          65,536
│    │    │    └─BatchNorm2d: 4-160      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-161             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-162           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-36             [1, 576, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-163      [1, 544, 14, 14]          1,088
│    │    │    └─ReLU: 4-164             [1, 544, 14, 14]          --
│    │    │    └─Conv2d: 4-165           [1, 128, 14, 14]          69,632
│    │    │    └─BatchNorm2d: 4-166      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-167             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-168           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-37             [1, 608, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-169      [1, 576, 14, 14]          1,152
│    │    │    └─ReLU: 4-170             [1, 576, 14, 14]          --
│    │    │    └─Conv2d: 4-171           [1, 128, 14, 14]          73,728
│    │    │    └─BatchNorm2d: 4-172      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-173             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-174           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-38             [1, 640, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-175      [1, 608, 14, 14]          1,216
│    │    │    └─ReLU: 4-176             [1, 608, 14, 14]          --
│    │    │    └─Conv2d: 4-177           [1, 128, 14, 14]          77,824
│    │    │    └─BatchNorm2d: 4-178      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-179             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-180           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-39             [1, 672, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-181      [1, 640, 14, 14]          1,280
│    │    │    └─ReLU: 4-182             [1, 640, 14, 14]          --
│    │    │    └─Conv2d: 4-183           [1, 128, 14, 14]          81,920
│    │    │    └─BatchNorm2d: 4-184      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-185             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-186           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-40             [1, 704, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-187      [1, 672, 14, 14]          1,344
│    │    │    └─ReLU: 4-188             [1, 672, 14, 14]          --
│    │    │    └─Conv2d: 4-189           [1, 128, 14, 14]          86,016
│    │    │    └─BatchNorm2d: 4-190      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-191             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-192           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-41             [1, 736, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-193      [1, 704, 14, 14]          1,408
│    │    │    └─ReLU: 4-194             [1, 704, 14, 14]          --
│    │    │    └─Conv2d: 4-195           [1, 128, 14, 14]          90,112
│    │    │    └─BatchNorm2d: 4-196      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-197             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-198           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-42             [1, 768, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-199      [1, 736, 14, 14]          1,472
│    │    │    └─ReLU: 4-200             [1, 736, 14, 14]          --
│    │    │    └─Conv2d: 4-201           [1, 128, 14, 14]          94,208
│    │    │    └─BatchNorm2d: 4-202      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-203             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-204           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-43             [1, 800, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-205      [1, 768, 14, 14]          1,536
│    │    │    └─ReLU: 4-206             [1, 768, 14, 14]          --
│    │    │    └─Conv2d: 4-207           [1, 128, 14, 14]          98,304
│    │    │    └─BatchNorm2d: 4-208      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-209             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-210           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-44             [1, 832, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-211      [1, 800, 14, 14]          1,600
│    │    │    └─ReLU: 4-212             [1, 800, 14, 14]          --
│    │    │    └─Conv2d: 4-213           [1, 128, 14, 14]          102,400
│    │    │    └─BatchNorm2d: 4-214      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-215             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-216           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-45             [1, 864, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-217      [1, 832, 14, 14]          1,664
│    │    │    └─ReLU: 4-218             [1, 832, 14, 14]          --
│    │    │    └─Conv2d: 4-219           [1, 128, 14, 14]          106,496
│    │    │    └─BatchNorm2d: 4-220      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-221             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-222           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-46             [1, 896, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-223      [1, 864, 14, 14]          1,728
│    │    │    └─ReLU: 4-224             [1, 864, 14, 14]          --
│    │    │    └─Conv2d: 4-225           [1, 128, 14, 14]          110,592
│    │    │    └─BatchNorm2d: 4-226      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-227             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-228           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-47             [1, 928, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-229      [1, 896, 14, 14]          1,792
│    │    │    └─ReLU: 4-230             [1, 896, 14, 14]          --
│    │    │    └─Conv2d: 4-231           [1, 128, 14, 14]          114,688
│    │    │    └─BatchNorm2d: 4-232      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-233             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-234           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-48             [1, 960, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-235      [1, 928, 14, 14]          1,856
│    │    │    └─ReLU: 4-236             [1, 928, 14, 14]          --
│    │    │    └─Conv2d: 4-237           [1, 128, 14, 14]          118,784
│    │    │    └─BatchNorm2d: 4-238      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-239             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-240           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-49             [1, 992, 14, 14]          --
│    │    │    └─BatchNorm2d: 4-241      [1, 960, 14, 14]          1,920
│    │    │    └─ReLU: 4-242             [1, 960, 14, 14]          --
│    │    │    └─Conv2d: 4-243           [1, 128, 14, 14]          122,880
│    │    │    └─BatchNorm2d: 4-244      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-245             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-246           [1, 32, 14, 14]           36,864
│    │    └─Bottleneck: 3-50             [1, 1024, 14, 14]         --
│    │    │    └─BatchNorm2d: 4-247      [1, 992, 14, 14]          1,984
│    │    │    └─ReLU: 4-248             [1, 992, 14, 14]          --
│    │    │    └─Conv2d: 4-249           [1, 128, 14, 14]          126,976
│    │    │    └─BatchNorm2d: 4-250      [1, 128, 14, 14]          256
│    │    │    └─ReLU: 4-251             [1, 128, 14, 14]          --
│    │    │    └─Conv2d: 4-252           [1, 32, 14, 14]           36,864
│    └─Transition_Layer: 2-10            [1, 512, 7, 7]            --
│    │    └─BatchNorm2d: 3-51            [1, 1024, 14, 14]         2,048
│    │    └─ReLU: 3-52                   [1, 1024, 14, 14]         --
│    │    └─Conv2d: 3-53                 [1, 512, 14, 14]          524,288
│    │    └─AvgPool2d: 3-54              [1, 512, 7, 7]            --
│    └─Dense_Block: 2-11                 [1, 1024, 7, 7]           --
│    │    └─Bottleneck: 3-55             [1, 544, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-253      [1, 512, 7, 7]            1,024
│    │    │    └─ReLU: 4-254             [1, 512, 7, 7]            --
│    │    │    └─Conv2d: 4-255           [1, 128, 7, 7]            65,536
│    │    │    └─BatchNorm2d: 4-256      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-257             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-258           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-56             [1, 576, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-259      [1, 544, 7, 7]            1,088
│    │    │    └─ReLU: 4-260             [1, 544, 7, 7]            --
│    │    │    └─Conv2d: 4-261           [1, 128, 7, 7]            69,632
│    │    │    └─BatchNorm2d: 4-262      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-263             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-264           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-57             [1, 608, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-265      [1, 576, 7, 7]            1,152
│    │    │    └─ReLU: 4-266             [1, 576, 7, 7]            --
│    │    │    └─Conv2d: 4-267           [1, 128, 7, 7]            73,728
│    │    │    └─BatchNorm2d: 4-268      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-269             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-270           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-58             [1, 640, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-271      [1, 608, 7, 7]            1,216
│    │    │    └─ReLU: 4-272             [1, 608, 7, 7]            --
│    │    │    └─Conv2d: 4-273           [1, 128, 7, 7]            77,824
│    │    │    └─BatchNorm2d: 4-274      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-275             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-276           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-59             [1, 672, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-277      [1, 640, 7, 7]            1,280
│    │    │    └─ReLU: 4-278             [1, 640, 7, 7]            --
│    │    │    └─Conv2d: 4-279           [1, 128, 7, 7]            81,920
│    │    │    └─BatchNorm2d: 4-280      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-281             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-282           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-60             [1, 704, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-283      [1, 672, 7, 7]            1,344
│    │    │    └─ReLU: 4-284             [1, 672, 7, 7]            --
│    │    │    └─Conv2d: 4-285           [1, 128, 7, 7]            86,016
│    │    │    └─BatchNorm2d: 4-286      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-287             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-288           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-61             [1, 736, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-289      [1, 704, 7, 7]            1,408
│    │    │    └─ReLU: 4-290             [1, 704, 7, 7]            --
│    │    │    └─Conv2d: 4-291           [1, 128, 7, 7]            90,112
│    │    │    └─BatchNorm2d: 4-292      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-293             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-294           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-62             [1, 768, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-295      [1, 736, 7, 7]            1,472
│    │    │    └─ReLU: 4-296             [1, 736, 7, 7]            --
│    │    │    └─Conv2d: 4-297           [1, 128, 7, 7]            94,208
│    │    │    └─BatchNorm2d: 4-298      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-299             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-300           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-63             [1, 800, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-301      [1, 768, 7, 7]            1,536
│    │    │    └─ReLU: 4-302             [1, 768, 7, 7]            --
│    │    │    └─Conv2d: 4-303           [1, 128, 7, 7]            98,304
│    │    │    └─BatchNorm2d: 4-304      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-305             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-306           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-64             [1, 832, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-307      [1, 800, 7, 7]            1,600
│    │    │    └─ReLU: 4-308             [1, 800, 7, 7]            --
│    │    │    └─Conv2d: 4-309           [1, 128, 7, 7]            102,400
│    │    │    └─BatchNorm2d: 4-310      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-311             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-312           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-65             [1, 864, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-313      [1, 832, 7, 7]            1,664
│    │    │    └─ReLU: 4-314             [1, 832, 7, 7]            --
│    │    │    └─Conv2d: 4-315           [1, 128, 7, 7]            106,496
│    │    │    └─BatchNorm2d: 4-316      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-317             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-318           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-66             [1, 896, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-319      [1, 864, 7, 7]            1,728
│    │    │    └─ReLU: 4-320             [1, 864, 7, 7]            --
│    │    │    └─Conv2d: 4-321           [1, 128, 7, 7]            110,592
│    │    │    └─BatchNorm2d: 4-322      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-323             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-324           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-67             [1, 928, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-325      [1, 896, 7, 7]            1,792
│    │    │    └─ReLU: 4-326             [1, 896, 7, 7]            --
│    │    │    └─Conv2d: 4-327           [1, 128, 7, 7]            114,688
│    │    │    └─BatchNorm2d: 4-328      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-329             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-330           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-68             [1, 960, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-331      [1, 928, 7, 7]            1,856
│    │    │    └─ReLU: 4-332             [1, 928, 7, 7]            --
│    │    │    └─Conv2d: 4-333           [1, 128, 7, 7]            118,784
│    │    │    └─BatchNorm2d: 4-334      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-335             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-336           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-69             [1, 992, 7, 7]            --
│    │    │    └─BatchNorm2d: 4-337      [1, 960, 7, 7]            1,920
│    │    │    └─ReLU: 4-338             [1, 960, 7, 7]            --
│    │    │    └─Conv2d: 4-339           [1, 128, 7, 7]            122,880
│    │    │    └─BatchNorm2d: 4-340      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-341             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-342           [1, 32, 7, 7]             36,864
│    │    └─Bottleneck: 3-70             [1, 1024, 7, 7]           --
│    │    │    └─BatchNorm2d: 4-343      [1, 992, 7, 7]            1,984
│    │    │    └─ReLU: 4-344             [1, 992, 7, 7]            --
│    │    │    └─Conv2d: 4-345           [1, 128, 7, 7]            126,976
│    │    │    └─BatchNorm2d: 4-346      [1, 128, 7, 7]            256
│    │    │    └─ReLU: 4-347             [1, 128, 7, 7]            --
│    │    │    └─Conv2d: 4-348           [1, 32, 7, 7]             36,864
│    └─BatchNorm2d: 2-12                 [1, 1024, 7, 7]           2,048
├─AvgPool2d: 1-2                         [1, 1024, 1, 1]           --
├─Linear: 1-3                            [1, 1000]                 1,025,000
==========================================================================================
Total params: 7,978,856
Trainable params: 7,978,856
Non-trainable params: 0
Total mult-adds (G): 2.83
==========================================================================================
Input size (MB): 0.60
Forward/backward pass size (MB): 180.54
Params size (MB): 31.92
Estimated Total Size (MB): 213.06
==========================================================================================


  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Horizon Max

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

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

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

打赏作者

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

抵扣说明:

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

余额充值