经典网络结构 (二):VGG

VGG 块

  • VGG 提出了可以通过重复使用简单的基础块来构建深度模型的思路

  • VGG 块的组成规律是:连续使用数个相同的填充为 1、窗口形状为 3 × 3 3×3 3×3 的卷积层后接上一个步幅为 2、窗口形状为 2 × 2 2×2 2×2 的最大池化层卷积层保持输入的高和宽不变,而池化层则对其减半。每经过一个 VGG 块(除了最后一个),都会使通道数翻倍而宽高减半,而由于每个卷积层的窗口大小一样,所以每层的模型参数尺寸和计算复杂度与输入高、输入宽、输入通道数和输出通道数的乘积成正比。VGG 这种高和宽减半以及通道翻倍的设计使多数卷积层都有相同的模型参数尺寸和计算复杂度
    • ( c o m p u t a t i o n a l   c o s t = o u t _ c h a n n e l × o u t _ h × o u t _ w × i n _ c h a n n e l × f i l t e r _ s i z e 2 computational\ cost = out\_channel \times out\_h \times out\_w \times in\_channel \times filter\_size^2 computational cost=out_channel×out_h×out_w×in_channel×filter_size2) (简单计算一下第一个卷积层进行一次前向传播需要进行大约 8 千万次乘法运算)
  • 多个 3 × 3 3×3 3×3 的卷积核进行堆叠,相比更大的卷积核,在获得相同感受野的情况下,所需参数量更少。同时因为拥有更多的激活函数,表达能力也更强
def vgg_block(num_convs, in_channels, out_channels):
    blk = []
    for _ in range(num_convs):
        blk.append(nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1))
        blk.append(nn.ReLU(inplace=True))
        in_channels = out_channels
    blk.append(nn.MaxPool2d(2, 2))
    return blk

VGG 网络

在这里插入图片描述

# VGG 16
# 以 ImageNet 的 3*224*224 图像为例
class VGG(nn.Module):
    def __init__(self, num_classes=1000):
        super(VGG, self).__init__()
        layers = []

        conv_num = [2, 2, 3, 3, 3]
        in_channels = [3, 64, 128, 256, 512, 512]
        for i in range(5):
            layers += vgg_block(conv_num[i], in_channels[i], in_channels[i + 1])
        self.features = nn.Sequential(*layers)
        self.classifier = nn.Sequential(
            nn.Linear(512 * 7 * 7, 4096),
            nn.ReLU(True),
            nn.Dropout(),
            nn.Linear(4096, 4096),
            nn.ReLU(True),
            nn.Dropout(),
            nn.Linear(4096, num_classes),
        )
    def forward(self, x):
        x = self.features(x)
        x = x.view(x.size(0), -1)
        x = self.classifier(x)
        return x

参考文献

  • 《深度学习之 PyTorch 物体检测实战》
  • D i v e Dive Dive I n t o Into Into D e e p Deep Deep L e a r n i n g Learning Learning
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值