论文题目:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
发表会议:2017-CVPR
1、相关工作
本文创新点:
- 提出了一类新型网络架构,根据应用需求与资源限制(延迟,大小),构建相匹配的小型网络
- MobileNets主要致力于优化延迟,但也可以产生小型网络
- MobileNets 主要基于深度可分离卷积构成,通过设置两个超参数,实现准确率和延时性之间的平衡
轻量化网络在方法上可以分为两大类,
- 模型压缩:在已经训练好的模型上进行压缩,使得网络携带更少的网络参数
- 直接训练一个小型网络:从改变网络结构出发,设计出更高效的网络计算方式,从而使网络参数减少的同时,不损失网络的性能
模型表现:
2、模型结构
标准卷积与深度可分离卷积对比
宽度超参数与分辨率超参数
网络还引入了两个超参数进一步降低网络运算的消耗,此外还方便使用者根据需求获得合适大小的网络
3、后续改进
3.1、MobileNet-V2
- Linear bottlenecks:作者认为在低维空间,加入Relu会破坏特征,因此在降低分辨率的卷积层不再加入Relu等激活函数,【ps:为魔改找借口,既然是低维不能加非线性,不应该在特征图降到多少之后不设置非线性吗?】
- Inverted Residuals:作者认为MobileNet的深度卷积维度本身就很少了,因此提出先升维,后卷积,再进行降维的操作提取更多有效的特征
3.2、MobileNet-V3
TODO:图中各部分是什么网络?
4、 实验结果及分析
4、代码实现
Imagenet数据集下载地址:https://simon32.github.io/2018/01/09/image-net/
class dw_conv(nn.Module):
def __init__(self, in_dim, out_dim, stride):
super(dw_conv, self).__init__()
self.dw_conv_k3 = nn.Conv2d(
in_dim, out_dim, kernel_size=3, stride=stride, groups=in_dim, bias=False)
self.bn = nn.BatchNorm2d(out_dim)
self.relu = nn.ReLU(inplace=True)
def forward(self, x):
x = self.dw_conv_k3(x)
x = self.bn(x)
x = self.relu(x)
return x
class point_conv(nn.Module):
def __init__(self, in_dim, out_dim):
super(point_conv, self).__init__()
self.p_conv_k1 = nn.Conv2d(in_dim, out_dim, kernel_size=1, bias=False)
self.bn = nn.BatchNorm2d(out_dim)
self.relu = nn.ReLU(inplace=True)
def forward(self, x):
x = self.p_conv_k1(x)
x = self.bn(x)
x = self.relu(x)
return x
本文为深度之眼paper论文班的学习笔记,仅供自己学习使用,如有问题欢迎讨论!关于课程可以扫描下图二维码