轻量化网络:SqueezeNet模型网络结构

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/chaipp0607/article/details/82561460

SqueezeNet是轻量化网络的代表结构之一,不太严格的说,在轻量化模型这个范畴中,Squeezenet是最早的一个,其针对ImageNet数据集分类任务的模型大小只有4.8M,这还包括了最后512*1000分类的全连接层。
论文如下:SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
这个论文刚刚出现的时候,是非常惊艳的,因为16年时,一个模型动不动就有大几十兆,而一个不到0.5M的模型可以得到alxnet相似的准确率是很难得的,这使得模型向移动端部署成为可能。

网络结构

首先把caffe关于SqueezeNet的结构定义deploy.prototxt中的内容复制到该链接中,就可以看到网络的整体结构。
SqueezeNet中核心的构成是Fire module,整个网络是通过一个个的Fire module连接组合而成。
Fire module结构如下:
fire module

首先上一层的特征图会经过11的卷积核进行降维,这一点和bottleneck版的resnet是很像的,经过压缩的特征图会分别送入的11卷积核和3*3的卷积核中进行升维,让网络具有宽度,最后这两部分的特征图会进行通道串接,注意是串接操作,而不是resnet中的相加,而这种串接操作和inception很像。
整个Squeezenet模型,Fire moudel模块一共有8个,随着网络的加深,特征图的通道数量也依次变多,分别为128,128,256,256,384,384,512,512,通道上升的很有规律。

为什么模型小?

Squeezenet模型为什么小呢,没别的,因为参数少,Squeezenet全部采用常规的空间卷积操作,在参数数量上和其他模型计算方法是一样的,所以它的模型体量小就是因为卷积核用的少,但是它并没有像论文题目中写的那样小的不超过0.5M,而是4.8M。从4.8到0.5是因为采用了模型压缩方法,但是Squeezenet本身和模型压缩是没有关系的,注意一个细节是,这个论文的二作者是song han,也就是deep compression的作者,这也就可以解释,为什么song han的deep compression和DSD算法的基础模型都用的squeezenet。
其实如果不是squeezenet模型结构,我们即便把resnet的参数控制的足够好,也是可以得到体量很小,并且准确率不错的网络结构的。

创新点

SqueezeNet模型单从结构上来说其实并没有什么太出彩的点,提出的Fire module结构其实也是在借鉴Inception网络,然后模型的体积很小,但是也不是论文名字所说的0.5M,而应该是4.8M左右,整体网络结构设计也有一些残差网络和Inception网络中bottleneck的影子,所以说仔细一看,网络的本身不像论文的名字一样惊艳。
但是,很重要的一点,深度学习再以非常快的速度发展,我们站在2018年去看2016年的模型结构本身就是不公平的,个人觉得,Squeezenet被人熟知的一个很重要的原因是它真正意义上在探索模型的体量和准确率之间的平衡,它最开始关注模型的大小的问题,而不是提高准确率。这是因为这篇论文的团队是UC Berkeley大学中专注嵌入式设备部署的一个课题组。

SqueezeNet变体

Squeezenet到现在已经出现了2年多了,已经出现了有很多以它为基础模型的变体网络,比如:
在Squeezenet上加入残差直连
在Squeezenet上进行Deep Compression
Squeezenet用于目标检测和语义分割
最后,如果你对Squeezenet模型有兴趣的话,强烈建议去看一看上面第三个链接,这是UC Berkeley的Squeezenet课题组在分享他们自己的工作。

猜你喜欢

转载自blog.csdn.net/chaipp0607/article/details/82561460