(一)MobileNet学习笔记

应用场景:移动平台
目标:在不扩大网络规模和运行速度的情况下提高准确率
方法:深度可分离卷积和两个超参数
前期工作:其他的模型在资源受限的情况下只考虑了大小,而mobilenet既考虑了模型大小又考虑了速度

1.depthwise separable convolutions

原文链接
Depthwise Convolution的一个卷积核负责一个通道,得到的Feature map数量与输入层的通道数相同,无法扩展Feature map,没有有效的利用不同通道在相同空间位置上的feature信息。
Pointwise Convolution的卷积核的尺寸为 1×1×M,M为上一层的通道数,将上一步的map在深度方向上进行加权组合。
在这里插入图片描述节约的参数量

先使用depthwise convolution对卷积进行深度分离,也就是一个卷积核负责一个通道,然后又使用point-wise convolutional实现特征图维度扩展

2.Inception model

原文链接

1. Inception v1
inception结构的主要思路是:如何使用一个密集成分来近似或者代替最优的局部稀疏结构
在这里插入图片描述
2. Inception v2
在训练时每层输入数据的分布会发生改变,所以需要较低的学习率和精心设置初始化参数,提出对数据做归一化的想法(BN算法
3. Inception v3
因子分解的思想。用一个多层感知器来代替大尺度滤波器的卷积
在这里插入图片描述在这里插入图片描述
4. Inception v4
当网络更深更宽时,inception网络能否一样高效。基于这个想法,将inception和resnet两者进行融合,进一步改善网络。

Inception加宽了网络模型宽度,每一层由不同尺寸的感受野组成,然后将其concentrate来丰富每一层的信息。BN算法则可以加快收敛速度(在conv之后,relu之前),该论文引用的v2版本。

3.模型架构

在这里插入图片描述

大量的计算和参数都集中在了1×1的卷积层了,后期可以从优化1×1卷积层考虑

四、Pytorch代码

class MobileNet(nn.Module):
    def __init__(self):
        super(MobileNet, self).__init__()

        def conv_bn(inp, oup, stride):
            return nn.Sequential(
                nn.Conv2d(inp, oup, 3, stride, 1, bias=False),
                nn.BatchNorm2d(oup),
                nn.ReLU(inplace=True)
            )

        def conv_dw(inp, oup, stride):
            return nn.Sequential(
                nn.Conv2d(inp, inp, 3, stride, 1, groups=inp, bias=False),
                nn.BatchNorm2d(inp),
                nn.ReLU(inplace=True),
    
                nn.Conv2d(inp, oup, 1, 1, 0, bias=False),
                nn.BatchNorm2d(oup),
                nn.ReLU(inplace=True),
            )

        self.model = nn.Sequential(
            conv_bn(  3,  32, 2), 
            conv_dw( 32,  64, 1),
            conv_dw( 64, 128, 2),
            conv_dw(128, 128, 1),
            conv_dw(128, 256, 2),
            conv_dw(256, 256, 1),
            conv_dw(256, 512, 2),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 512, 1),
            conv_dw(512, 1024, 2),
            conv_dw(1024, 1024, 1),
            nn.AvgPool2d(7),
        )
        self.fc = nn.Linear(1024, 1000)

    def forward(self, x):
        x = self.model(x)
        x = x.view(-1, 1024)
        x = self.fc(x)
        return x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值