SqueezeNext

论文:SqueezeNext: Hardware-Aware Neural Network Design

Github:https://github.com/amirgholami/SqueezeNext

 

 

BLOCK模块对比:

SqueezeNext_第1张图片

如上图所示,

第一个为ResNet 的BLOCK模块

第二个为SqueezeNet 的BLOCK模块,也就是所谓的Fire Module

第三个为SqueezeNext的BLOCK模块

 

SqueezeNext BLOCK模块设计:

SqueezeNext_第2张图片

假设输入为c个通道,经过第一个1*1卷积模块,通道数减半,经过第二个1*1卷积模块,通道数再次减半,然后经过3*1卷积模块通道数加倍,经过1*3卷积模块通道数保持不变,再经过一个1*1卷积模块,通道数加倍。最终输入通道数和输出通道数保持一致。

 

该模块主要包含3个改进点:

(1)Low Rank Filters :

主要将K*K的卷积替换为1*K+K*1的卷积。从而使得参数量由K2降为2K。

(2)Bottleneck Module :

瓶颈模块,类似于SqueezeNet 中Fire Module里面的squeeze模块。但是和而不同,SqueezeNet 中Fire Module里面只堆叠了一个squeeze模块,而SqueezeNext 中连续堆叠2个该模块,每经过一个瓶颈模块,通道数都减半。

(3)Fully Connected Layers :

全连接层的参数为H × W × Ci × L ,其中L表示分类的数目,H,W,C分别表示最后一层的高,宽,通道数。为了减少这部分的参数量,SqueezeNext 使用了1*1的卷积模块,将最后一层的通道数进行了4倍量的压缩,再接入全连接层,以此来减少参数量。

SqueezeNext_第3张图片

如上图所示,通过增加黑框中的模块,达到了全连接层参数量的降低。

 

 

网络结构:

SqueezeNext 一共包含23层(包括全连接层),主体网络结构分为了SqNxt-23和SqNxt-23v5这两种结构。

SqueezeNext_第4张图片

SqueezeNext_第5张图片

两种结构的区别在于,

Network

Depth

Width

channel-wise(group)

1.0-G-SqNxt-23

[6; 6; 8; 1]

1.0x

2

1.0-SqNxt-23

[6; 6; 8; 1]

1.0x

1

1.0-SqNxt-23v5

[2; 4; 14; 1]

1.0x

1

2.0-SqNxt-23

[6; 6; 8; 1]

2.0x

1

2.0-SqNxt-23v5

[2; 4; 14; 1]

2.0x

1

1.0和2.0的区别在于通道数加倍

传统和v5的区别在于网络结构Depth的区别

带G表示使用了depth-wise conv,不带的表示为传统的卷积。

 

 

结果:

SqueezeNext_第6张图片

从参数量上看,SqNxt的1.0版本网络比原始的SqueezeNet更少,精度更高。

SqNxt的2.0版本比MobileNet的参数更少,精度上TOP-1略低,TOP-5有较大提升。

SqueezeNext_第7张图片

从能量消耗,推断时间,准确性上,也可以看出SqNxt具有明显的优势。

 

总结:

SqNxt,一个运算量和效果都优于SqueezeNet的改进版。

你可能感兴趣的:(深度学习)