ResNet

2020-01-31  本文已影响0人  zelda2333

ResNet和Unet结合Demo

残差网络单元

class ResidualBlock(nn.Module):
    '''
    实现子module: Residual Block
    '''
    def __init__(self, inchannel, outchannel, stride=1, shortcut=None):
        super(ResidualBlock, self).__init__()
        self.left = nn.Sequential(
                nn.Conv2d(inchannel, outchannel, 3, stride, 1, bias=False),
                nn.BatchNorm2d(outchannel),
                nn.ReLU(inplace=True),
                nn.Conv2d(outchannel, outchannel, 3, 1, 1, bias=False),
                nn.BatchNorm2d(outchannel) )
        self.right = shortcut

    def forward(self, x):
        out = self.left(x)
        residual = x if self.right is None else self.right(x)
        out += residual
        return F.relu(out)

文章提出了两种残差结构:

  1. 第一种结构
    对应ResNet34,称为一个building block;


    残差结构
  2. 第二种结构
    称为一个”bottleneck design,用于Resnet50,Resnet101,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。
残差结构

网络架构

图3。展示ImageNet网络架构。左:vgg-19模型(19.6亿触发器)作为参考。中间:一个有34个参数层的普通网络(3.6亿个触发器)。右:有34g1参数层的残差网络(3.6亿触发器)。快捷键点增加尺寸。表1显示更多细节和其他变型。 表1. ImageNet的构架。

参考链接:
Resnet 结构解析
CNN系列:ResNet:图像识别的深度残差学习(Deep Residual Learning for Image Recognition)
深度学习网络篇——ResNet
Resnet34代码

上一篇 下一篇

猜你喜欢

热点阅读