标题 | SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE |
---|---|
作者团队,发表时间 | 伯克利&斯坦福 ICLR-2017 |
文章解决的问题 | 如何设计网络使得模型变小精度不降低 |
解决的方案 | 依据三条设计准则设计fire模块,加入bypass,模型压缩 |
实验与结果 | 1.数据库: ImageNet 2. 训练参数: dropout为0.5,补零padding为1,初始学习率为0.04 3. 训练策略: 4.Result:模型比AlexNet小510倍,精度略有提升 |
总结 |
模型压缩:SVD,Network Pruning,quantization,huffman encoding
CNN 微架构:LeCun(5x5),VGG(3x3),NIN(1X1),Inception module,ResNet Module
CNN宏观架构:Deeper(VGG),ResNet,bypass connections
如上图所示,Fire module分为两个模块,squeeze模块由S1x1个1x1大小的滤波器组成,呼应设计准则1,expand层由e1x1个1x1大小的滤波器和e3x3个3x3大小的滤波器构成,同时保证S1x1 < e1x1+e3x3,呼应设计准则2。
具体网络设计如上图(左边的模型),模型间很少采用pooling层,呼应设计准则3
在fire9之后有dropout为0.5,补零padding为1,初始学习率为0.04
使用韩松的Deep Compression 算法,采用6-bit的参数量化和33%的稀疏,最终模型大小为0.47MB (510×
smaller than 32-bit AlexNet),并且算法准确度并没有损失。
如figure2所示,有三种模型,普通SquezeeNet,加入简单的bypass的SquezeeNet,加入复杂的bypass的SquezeeNet,简单的bypass是将值进行直接相加,并没有增加通道数,而复杂的bypass则通过加入若干个1x1的卷积核实现通道数的增加,增加了信息量,在一定程度上可以弥补S1x1模块造成的信息减少,但是结果证明,简单的bypass的SquezeeNet反而效果最好,这一点作者估计也是懵逼吧!
超参数SR(S1x1/(e1x1+e3x3)), pct (e3x3/(e1x1+e3x3) , base_e为第一个fire module的 ei e i 数值
最终实验选择:
basee b a s e e = 128, incre i n c r e = 128, pct = 0.5, freq = 2, and SR = 0.125
标题 | MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications |
---|---|
作者团队,发表时间 | Google CVPR-2017 |
文章解决的问题 | 如何设计网络使得模型变小精度不降低 |
解决的方案 | deepwise分离卷积层,所有层后都会做BN和Relu,减少卷积层数,减小输入图片大小, |
实验与结果 | 1.数据库: ImageNet,COCO等 2. 训练参数: dropout为0.5,补零padding为1,初始学习率为0.04 3. 训练策略:RMSprop,模型小不做数据增强,不做或者较小的正则化 4.Result:模型比AlexNet小510倍,精度略有提升 |
总结 | MobileNet应用广泛,包括Large Scale Geolocalizaton, Face Attributes,Object Detection,Face Embeddings |
将传统的卷积层N个DxDxM分解为两个卷积:M个DxDx1,N个1x1xM,减少了参数量,并减少了八到九倍的计算量!
定义一个超参数卷积宽度乘法因子a,参数取值为0.25,0.5,0.75,1,减少卷积的个数,这样做能减少 a2 a 2 的参数量与计算量:
定义一个超参数分辨率乘法因子p,p取值为0~1,具体输入图像分辨率为128,160,192,224。
**训练技巧:
1. 用噪声较大的大数据库进行pretrain,然后用精确的小数据库进行finetune!
2. 利用较大规模精确度较高的模型网络的结果数据进行训练,这样的好处在于数据量可以无限大,且训练时不太需要考虑正则化!
标题 | MobileNetV2: Inverted Residuals and Linear Bottlenecks |
---|---|
作者团队,发表时间 | Google CVPR-2018 |
文章解决的问题 | 如何设计网络使得模型变小达到mobile设备的实时性 |
解决的方案 | 通过引入Inverted residuals block,将block改成梭形;在channel少的block最后层不做relu以提高准确率 |
实验与结果 | 1.数据库: ImageNet,COCO等 2. 训练参数: standard weight decay:0.00004 learning rate:0.045, learning rate decay rate of 0.98 per epoch 3. 训练策略:RMSprop, decay and momentum:0.9,standard weight decay:0.00004 4.Result: MobileNetV2可提高ImageNet中的分类精度,大幅提 高目标检测效率(SSD:20倍,YOLOV2:10倍) |
总结 |
作者认为,对于神经网络某层的输入,我们可以将其中感兴趣的信息(manifold of interest)映射到低维子空间,并得出:
1. 经过relu后要是感兴趣的信息都非零,就意味着其仅仅是经过了一个线性变换;
2. 要想保持感兴趣的输入完整信息,就必须要让输入感兴趣的信息位于输入空间的低维子空间
作者发现,使用relu最完美的情况在输入的感兴趣信息全部包含在其激活区域,因此可以完整保留下来。但现实可能并非那么理想,因此在通道较少的情形使用relu可能有害,通道较多的情形因为存在信息的重复,所以适宜使用relu。
作者认为低维度的卷积层足以表达感兴趣区域,而高维度的卷积层表达其中的细节,因此提出将传统的残差块交换一下卷积次序,设计成中间粗两边细的梭形,利用这种设计将感兴趣信息和细节区分开来(allows to separate the network expressiviness (encoded by expansion layers) from its capacity (encoded by bottleneck inputs)),从而达到提高准确率,降低参数数目的目的,如下图:
Bottleneck residual block结构:
relu6指的是将结果限定在0-6区间上,这样float16可以更好的表示参数!
整体网络结构:
标题 | ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices |
---|---|
作者团队,发表时间 | Face++ CVPR-2017 |
文章解决的问题 | 1x1卷积运算量太大 |
解决的方案 | 使用group convolution减少运算量,使用shuttle channel解决group convolution造成的边效应 |
实验与结果 | 1.数据库: ImageNet,COCO等 2. 训练参数: 学习率衰减1e-4,线性衰减,少量的尺度增强,batch size:1024,3x10^5次迭代训练 3. 训练策略:RMSprop,模型小不做数据增强,不做或者较小的正则化 4.Result:模型比AlexNet小510倍,精度略有提升 |
总结 |
作者发现使用 1x1卷积层(pointwise convolutions)运算量特别大,但是使用Group Convolution减少其运算量时group之间会出现边效应,所以引入channel shuttle的概念,将通道顺序重新排列,如下图所示:
ShuffleNet Unit为下图的b,c子图,主要变化是将普通的1x1的卷积层进行分组计算,随后将重新排列通道顺序,stride=2的网络也略有不同!这样设计网络的好处可以大大减少运算量,但参数数量并没有发生变化,所以网络全部采用ShuffleNet Unit效果不一定理想,只在关键层使用!
知识拓展:
CNN中千奇百怪的卷积方式大汇总
标题 | Xception: Deep Learning with Depthwise Separable Convolutions |
---|---|
作者团队,发表时间 | Google CVPR-2017 |
文章解决的问题 | 优化Inception模型 |
解决的方案 | 结合depthwise separable convolution,将1x1卷积结果的通道分块给3x3卷积 |
实验与结果 | 1.数据库: ImageNet,JFT等 2. 训练参数: 学习率衰减1e-5, 3. 训练策略:RMSprop 4.Result:模型大小比Inception V3相同,精度有明显提升 |
总结 | Xception module可以进一步优化 |
Inception module的思想是将空间相关性和跨通道连接进行解耦,通过先进行1x1的卷积操作,然后进行3x3或者5x5的卷积操作,达到减少运算量和参数数量的目的!
进一步将Inception进行极致优化,变成先一次1x1的卷积,对结果进行分块,输入给3x3的卷积层!
depthwise separable convolution与Inception module的区别:
Xception是基于这样的假设:在特征图中,空间相关性和通道相关性可以完全解耦!
Xception的结构实质上是depthwise separable convolution layers和残差连接的线性组合。depthwise separable convolution layers即figure4所示。
训练参数:
On ImageNet:
– Optimizer: SGD
– Momentum: 0.9
– Initial learning rate: 0.045
– Learning rate decay: decay of rate 0.94 every 2 epochs
On JFT:
– Optimizer: RMSprop [22]
– Momentum: 0.9
– Initial learning rate: 0.001
– Learning rate decay: decay of rate 0.9 every 3,000,000 samples
dropout : 0.5
weight decay:L2 regularization) rate of 1e −5
结果:
实验证明:
1. 在逻辑回归层前加入全连接层能提高分类准确率
2. 残差连接的引如能加快网络收敛,提高分类准确率
3. 不使用激活函数反而能加快网络收敛,提高分类准确率,这与Szegedy大神的结论相悖,作者认为Xception网络中3x3
的卷积输入通道变少(因分块,figure4所示),使用激活函数反而会丢失信息!