ResNeXt网络详解并使用pytorch搭建模型

1.ResNeXt网络详解

网络创新点:
(1)更新了block

组卷积(Group Convolution)

普通卷积
在这里插入图片描述
假设高和宽为k的输入特征矩阵channel=Cin,使用n个channel=Cin的卷积核进行处理,得到channel=n的输出特征矩阵。

此时需要的参数个数为输入特征矩阵的高x宽xchannelx卷积核个数
输入特征矩阵的高 x 宽 x channel x 卷积核个数

组卷积
在这里插入图片描述
在上图中,假设输入特征矩阵channel=Cin,尺寸为k x k,

将输入特征矩阵的channel划分成g个组,将这g个组分别进行卷积操作,

如果使用n/g个卷积核,就能得到g个组的channel=n/g的输出特征矩阵,

通过GConv所需要的参数为=
其中Cin/g是由于将输入特征矩阵的channel划分成了g组,所以对每一个组的每一个卷积核个数为Cin/g;n/g是由于为了得到channel=n的特征矩阵,对于每个组,就需要使用n/g个卷积核;g是由于划分了g个组。

GConv相比较普通卷积,所需要的参数减少了1/g。

如果分组个数g、输入特征矩阵的channel与输出特征矩阵的channel一致时,此时相当于对输入特征矩阵的每一个channel分配了一个channel为1的卷积核进行卷积,此时就是DWConv

DW卷积:MobileNetv1、v2网络详解

ResNetXt的block

在这里插入图片描述
上图三个block在数学计算上完全等价

在( c )中,首先通过1x1的卷积层将输入特征矩阵的channel从256降维到128;再通过3x3的32组group卷积对其进行处理;再通过1x1的卷积层进行将特征矩阵的channel从128升维到256;最后主分支与捷径分支的输出进行相加得到最终输出。

因此可以将ResNett网络中的Block替换成使用组卷积的Block

ResNetXt的网络结构

在这里插入图片描述
图中ResNeXt-50(32 x 4d)中的32对应group数、4d对应组卷积中每一个组所采用的卷积核个数(4x32=128)。

为什么group数要设置为32:原论文作者得出结论group数越大,错误率越低。

且block层数小于3,组卷积block的就没有意义。

2.使用pytorch搭建模型

(1)model.py

只需要在深层次的ResNet网络中进行修改即可:

    def __init__(self, in_channel, out_channel, stride=1, downsample=None,                     #定义初始函数及残差结构所需要使用的一系列层结构
                 groups=1, width_per_group=64):                                                #resnext多传入groups和width_per_group
        super(Bottleneck, self).__init__()

        width = int(out_channel * (width_per_group / 64.)) * groups                            #计算resnet和rennext网络第一个卷积层和第二个卷积层采用的卷积核个数

        self.conv1 = nn.Conv2d(in_channels=in_channel, out_channels=width,                     #对于resnet,不传入groups和width_per_group两个参数,out_chann
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值