目录
一、《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》
二、《MobileNetV2: Inverted Residuals and Linear Bottlenecks》
第二点:对比MobileNet V1与ResNet的网络结构
说明:代码及模型都是基于分类的。可以先看大致看一下模型图,再去看其他部分。
一、《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》
摘要:我们为移动和嵌入式视觉应用提出了一种称为MobileNets的有效模型。 MobileNets基于简化的架构,该架构使用深度可分离卷积来构建轻型深度神经网络。 我们介绍了两个简单的全局超参数,它们可以有效地在延迟和准确性之间进行权衡。 这些超参数允许模型构建者根据问题的约束条件为其应用选择合适大小的模型。 我们对资源和精度进行了广泛的权衡取舍,与ImageNet分类中的其他流行模型相比,我们展示了强大的性能。 然后,我们演示了MobileNets在各种应用程序和用例中的有效性,包括对象检测,细粒度分类,人脸属性和大规模地理定位。
第一点:标准卷积和深度可分离卷积的区别。包括参数对比
1、标准卷积
(1)卷积核的参数量:,其中表示卷积核的大小,M表示输入通道的大小,N表示输出通道的大小。
(2)计算量:,表示特征图的大小
2、深度可分离卷积:depthwise卷积和pointwise卷积
2.1 depthwise卷积
(1)卷积核的参数量:,表示卷积核的大小,M表示输入通道的大小。
(2)计算量:
2.2 pointwise卷积
(1)卷积核的参数量:1x1xMxN
(2)计算量:
3、参数对比
4、以上三种卷积的图示:图来源 可分离卷积
(1)常规卷积运算
(2)Depthwise Convolution
(3)Pointwise Convolution
第二点:理解两个超参数:宽度乘子和分辨率乘子
1.宽度乘子:用α示,该参数用于控制特征图的维数,即通道数。
2.分辨率乘子:用ρ表示,该参数用于控制特征图的宽/高,即分辨率
第三点:分析模型代码以及模型参数变化
1、model.py
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
#标准卷积
def conv_bn(inchannels, outchannels, stride):
return nn.Sequential(
nn.Conv2d(inchannels, outchannels, 3, stride, 1, bias=False),
nn.BatchNorm2d(outchannels),
nn.ReLU(inplace=True)
)
#深度可分离卷积
def conv_dw(inchannels, outchannels, stride):
return nn.Sequential(
nn.Conv2d(inchannels, inchannels, 3, stride, 1, groups=inchannels, bias=False),
nn.BatchNorm2d(inchannels),
nn.ReLU(inplace=True),
nn.Conv2d(inchannels, outchannels, 1, 1, 0, bias=False),
nn.BatchNorm2d(outchannels),
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),