本文主要用于介绍旷世于2017年提出的一种轻型网络ShuffleNet。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/pdf/1707.01083
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
本文提出了一种计算效率极其高效的CNN架构模型,名为“ShuffleNet”,该网络是专门被设计用于那些计算资源有限的设备。新的架构采用了2种新的操作,pointwise group convolution和channel shuffle,极大的减少了计算的时间耗时,同时还保证了高的准确性!在ImageNet的图片分类实验和MS COCO的目标检测上都比MobileNet的表现要好。在一台ARM芯片的手机设备上,shuffleNet相比于AlexNet快了13倍,同时还维持了很好的正确率。
------------------第二菇 - 核心思想------------------
作者认为现有的一些先进架构比如Xception和ResNeXt正变的越来越低效,因为大量的卷积消耗了大量的计算资源,因此论文才提出来了逐点群卷积(pointwise group convolution)的概念,但是该种卷积方式也有很大的弊端,即通道之间的信息不再有连接,因此,为了克服这种弊端,作者又提出了一种混合通道(channel shuffle)的操作办法。
2.1 Channel Shuffle for Group Convolutions
熟悉卷积操作的同学,应该能理解卷积耗时的地方,因为每一次都需要对每一个通道进行卷积后再进行相加操作,而这也正是最耗时的地方,因此我们需要一种通道稀疏的连接(channel sparse connections)。因此,逐点组卷积的意思就是对输入的通道进行分组,每一个卷积核只负责其对应的输入通道,从而减少了通道之间的连接操作(By ensuring that each convolution operates only on the corresponding input channel group, group convolution significantly reduces computation cost. )。最极端的操作,其实就是。。。一个输入通道对应一个卷积核哈哈哈(差不多类似MobileNet里提出的Depthwise Conv)。。。因此,这里有个巨大的弊端就是,通道之间的信息不能够融会贯通了,这是很致命的~如下图左1所示,
示意图.jpg这里就有一种融合的办法啦,那我们从别的通道里面拿信息不就好啦~如上图b所示,当然这是很好的想法,但是其在操作层面,其实是比较麻烦的~因此,作者提出了一种更高效的解决办法,那就是如上右图所示的,channel shuffle operation,其具体的操作我们可以描述为,
1)假设输出为,代表group数量
2)reshape为,再转置为
3) 再展开分组
以上过程,我从网上盗了一张示意图【1】,用以加深大家的理解,
混洗通道操作示意图.jpg至此,整一套“骚”操作已经介绍完毕了,接下来我们具体看一下每一个单元的具体架构。
2.2 ShuffleNet Unit
直接上一张原论文中的图,
单元模块架构图.jpg图应该是画的比较直观了~其他的一些模型架构就不展开了,有兴趣的同学看原论文,写的很清晰了~主要是理解了channel shuffle的操作,其它就都很简单~(ps. 参考文献1的博主还献上了源码解析)
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想已经说清楚了。本论文主要提出了一种轻型的网络架构ShuffleNet,并实验证明了该网络的可行性,为后续发展奠定了基础。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对整个ShuffleNet网络,尤其是其中的channel shuffle操作做了细致的阐释。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁
参考文献:
【1】https://blog.csdn.net/u011974639/article/details/79200559
网友评论