ShuffleNetV2论文阅读笔记

阅读: 评论:0

ShuffleNetV2论⽂阅读笔记
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 阅读笔记
本⽂主要是对⽬前⼀些主流⽹络进⾏多组对⽐实验,并从这些对⽐实验中进⾏⼀定的理论分析和总结,最后得出4条关于 CNN ⽹络结构设计的准则来帮助神经⽹络可以更⾼效。下⾯先贴出⽂中观点:
Guideline 1(G1): 输⼊通道数与输出通道数保持相等可以最⼩化内存访问成本(memory access cost,MAC)。
Guideline 2(G2): 分组卷积中使⽤过多的分组数会增加内存访问成本(MAC)
Guideline 3(G3): ⽹络结构太复杂(分⽀和基本单元过多)会降低⽹络的并⾏程度
Guideline 4(G4): Element-wise 的操作消耗也不可忽略(包括ReLU,Tensor的相加,偏置的相加等等操作)
接下来就基于以上4条准则进⾏分开描述,最后⽂章基于上述准则在shuffleNet的基础上,提出了 shuffleNet V2,并通过⼤量实验验证了⽹络结构的有效性。
1. 引⾔
⾸先在了解⽂章之前需要清楚的是⽬前⼀些有效⽹络的主要⼿段是通过分离卷积(depth-wise convolution)和 分组卷积(Group convolution),⽽且⽂章中主要对⽹络计算复杂性的标准是 浮点运算操作的数量 (即 FLOPs),但是⽂中通过实验发现,FLOPs 并不能和 ⽹络的计算速度成正⽐。
上图就是表⽰在 4 种⽹络都有相近的 FLOPs 但是⽹络的速度在不同的平台上都不相同。所以仅通过 FLOPs 来衡量不是很准确。因为⼀些因素并没有考虑进去,⼀个就是内存访问成本(memory access cost,MAC),例如当框架在执⾏分组卷积等操作时,运算能⼒强劲时可能可以忽略,但是在⼀些计算能⼒有限的平台上⾯就⽆法忽略了;还有⼀个就是⽹络的并⾏化程度,在相同的 FLOPs 下,⽹络并⾏化程度更⾼的⽹络速度更快。
相同 FLOPs 的不同⽹络在在不同平台下的运⾏时间也是不⼀样的:
如上图,可以看到相同的⽹络在不同的平台上各个部分消耗的时间⽐例也是不⼀样的(即有些操作对GPU结构友好但是对ARM结构并不友好,反之亦然),所以为了更准确的衡量⽹络的效率,⽹络也应该针对⾃⼰的⽬标平台来进⾏对⽐和测量。本⽂也基于此,所有的实验都在GPU 和 ARM 两个平台上
进⾏测试,来全⽅⾯表现 shuffleNet V2 的有效性。
2. ⽹络设计准则
本⽂实验硬件条件: GPU 为⼀块 GeForce GTX 1080Ti; ARM 结构为 ⾼通骁龙 810 芯⽚。(Tips: Table 1,2,3,4 中的 Batches/sec 栏数值都是越⼤越好 )
Guideline 1:
**这个准则是在探索输⼊通道与输出通道间的⽐例关系对⽹络速度的影响。**通过在 GPU 和 ARM 平台上对⽐ shuffleNet 和 MobileNet v2 两个⽹络中 1x1 卷积层不同的输⼊输出通道⽐例所得到的数据得出的结论:
这⾥⾸先设输⼊通道为 c1,输出通道为 c2,输出特征图尺⼨为 hxw,所以每⼀个 1x1 卷积层的 FLOPs 就是:
车架总成B=hw*c1c2。这⾥内存访问成本 MAC = hw(c1+c2)+c1c2,所以经过如下推导就可以得到:
电虾机电路图
太阳能热水器控制器即:
所以c1和c2值相等的得到上式的最⼩值,基于实验和理论得到准则1(G1):当输⼊通道与输出通道⽐例为 1:1 时, MAC最⼩,可以使⽹络的速度更快。
Guideline 2:
这个准则探索分组卷积的分组数对⽹络速度的影响。 其中对于分组卷积,这⾥的 FLOPs 为:B=hw*c1c2/g,这⾥的 g 表⽰为分组数。
由上⾯推导可得,h,w,c1,B都是固定的,随着分组数g的增加, MAC 也会随之增加。并通过实验验证:
所以得到以上准则2: 分组数越多,MAC 就会越⼤,⽹络结构就会越慢。
所以⽂章中也给出建议:分组数应该根据实际课题以及应⽤的平台谨慎选择。单纯的通过增加分组卷积来增加通道数从⽽增加精确度是⼀个不明智的选择。
Guideline 3:
这个准则是探索⽹络的分⽀数以及每个基本结构包含的卷积层个数对⽹络速度的影响。铣床主轴
以上是在实验中使⽤的基本⽹络结构,分别将它们重复10次,然后进⾏实验。实验结果如下:胃蝇
ruu可以看到 在 GPU 上只包含 1-fragment 的速度是 4-fragment 的3倍。
Guideline 4:
由上⾯的饼状图可以看见,例如⼀些 ReLU ,Tensor 相加,Bias相加的操作,甚⾄是分离卷积(depthwise convolution)都定义为element-wise 操作的话,**这些操作的时间也是不可忽略。**并且通过除去跨层链接和 ReLU,在 GPU 和 ARM 结构上都获得了接近20% 的提速。
总结:
基于以上的对⽐实验,可以得到⼀个有效的⽹络应该包含:
(1) 卷积层使⽤相同的输⼊输出通道数
(2) 意识到使⽤⼤的分组数所带来的坏处
(3) 降低⽹络结构的离散程度(减少分⽀以及所包含的基本单元)
(4) 减少 element-wise 操作
所以本⽂基于上述的4条准则,以及shuffleNet,提出了 ShuffleNet V2的⽹络结构。
##3. ShuffleNet V2
⾸先指出 shuffleNet 存在的问题:
depthwise convolution 和 瓶颈结构增加了 MAC,⽤了太多的 group,跨层连接中的 element-wise Add 操作也是可以优化的点。所以在 shuffleNet V2 中增加了⼏种新特性。
所谓的 channel split 其实就是将通道数⼀分为2,化成两分⽀来代替原先的分组卷积结构(G2),并且每个分⽀中的卷积层都是保持输⼊输出通道数相同(G1),其中⼀个分⽀不采取任何操作减少基本单元数(G3),最后使⽤了 concat 代替原来的 elementy-wise add,并且后⾯不加 ReLU 直接(G4),再加⼊channle shuffle 来增加通道之间的信息交流。 对于下采样层,在这⼀层中对通道数进⾏翻倍。 在⽹络结构的最后,即平均值池化层前加⼊⼀层 1x1 的卷积层来进⼀步的混合特征。
最后⽂章把精度与准确度归结为2点,⼀个符合上述提升⽹络有效性的准则,来更好的利⽤特征以及增加⽹络的容量,还有⼀个就是直接跨层连接相当于特征的重利⽤,并通过图⽰对⽐,说明了⾃⼰⽹络重利⽤,但是没有很⼤的增加⽹络的冗余性。
4. 实验
最后通过⼤量的对⽐实验,包括将上述的准则直接对现有的⼀些 start-of-the-art 模型进⾏修改,验证所提出的4个准则的正确性,还有就是 ShuffleNet V2 的有效性,和包括在⽬标检测⽅⾯的良好的泛化特性。 这⾥就不多赘述,具体可以参见论⽂。
####⽂中在⽬标检测的实验对⽐中也抛出了⼀个问题:如何增加⽹络的感受野也是⼀个值得探讨的问题。
5. 后记
看完论⽂不得不佩服,⽂中所做的对⽐实验真的很充⾜,不论是⽂章开始每个准则的提出(且不论是先有理论想法再进⾏的实验,还是先进⾏实验发现了部分特性然后再展开研究,提出理论的),还是最后的有效性的对⽐实验。 ⽂中部分技巧,例如 channel split 然后其中⼀半通道直接 concat 到结尾来保持最后的通道数不变,然后对另⼀半通道进⾏⼀些操作; 还有将通道 concat 起来以后进⾏ grou
p=2 的channel shuffle 的操作,来增加通道之间的混合,我都有在⾃⼰尝试的⽹络结构中试验过,不过都是在不同情境下独⽴的去添加进⽹络进⾏实验,碍于种种原因,效果都不尽如⼈意,现在⾃⼰得⽹络也没有⼀个满意的结果。现在在这个⽂中看到这么熟悉的操作,奈何⾃⼰还是才疏学浅,不免很是⼼痛。⽽且⽂中很多准则的验证,完全是抛弃准确率的前提下,测试速度对⽐数据就⾏,设计⼀些简单的但是具有代表性的结构就可以去实验来佐证或者是验证⾃⼰的⼀些想法,不⽤思维总局限于从复杂的⽹络或者基于别⼈的⽹络开始实验,那样不确定因素还是有很多,很容易得到得结果就不是⾃⼰想要得。 Anyway ,感慨良多,还是要加油啊!

本文发布于:2023-05-13 18:30:18,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/97984.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:通道   分组   实验   操作   增加   准则   结构   卷积
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图