ShuffleNet系列之ShuffleNet_v1

简介: shuffleNet_v1在MobileNet_v1后,MobileNet_v2前提出。ShuffleNet系列也是针对移动端部署而提出的模型。  ShuffleNet_v1结合了深度可分离卷积和分组卷积,提出了包含pointwise group convolution 和channel shuffle两项操作的ShuffleNet Unit。其中depthwise separable convolution来源于Xception,分组卷积概念来源于AlexNet, 在ResNeXt和DeepRoots中得到很好的应用。

导言:


     shuffleNet_v1在MobileNet_v1后,MobileNet_v2前提出。ShuffleNet系列也是针对移动端部署而提出的模型。


  ShuffleNet_v1结合了深度可分离卷积和分组卷积,提出了包含pointwise group convolution 和channel shuffle两项操作的ShuffleNet Unit。其中depthwise separable convolution来源于Xception,分组卷积概念来源于AlexNet, 在ResNeXt和DeepRoots中得到很好的应用。

 

Shuffle channels for group convolution


       在Xception和ResNeXt中使用了depthwise separable convolutions或group convolution来构建Block,以便平衡模型的表示能力和计算量。但这两者都没有完全考虑1x1卷积,因为它需要比较大的复杂性。例如,ResNeXt中group convolution只使用了3x3,这导致ResNeXt中的residual单元中的点卷积占了93.4%。在小网络中,由于内存限制,昂贵的点卷积只能使用有限的通道数,这可能会影响精度。

 

      为了解决这个问题,shufflenet提出了通道稀疏连接。即在卷积过程中将通道数分成g组,每组只在子组内部进行连接。如下左图所示为正常的通道上的连接,右图为分组后的通道连接。


image.png

这样的分组会出现一个问题,如果分组太多,将导致输出层的每层通道都直接从上一层某一个或几个通道卷积而来(如下左图所示),这将会阻止通道组之间的信息流动并削弱模型的表示能力。解决的办法就是让不同组进行连接(如下图中所示),让不同通道组的信息充分流动。


image.png

而shuffleNet中提出更好的办法就是直接将组的顺序打乱(如上图右所示),再进行按组连接。注意:这样打乱顺序后仍然是可微的,因此这中结构可嵌入网络模型进行端到端训练。

ShuffleNet Unit


ShuffleNet中使用了残差连接,ShuffleNet Unit在残差连接的基础上调整而来。


image.png


 左图为残差单元,shuffleNet Unit将1x1 卷积替代为1x1分组卷积,并在shortcut path上添加了3x3平均池化,并将逐元素相加代替为通道拼接,这样可以扩大通道数尺寸而不用增加计算成本。此外,shuffleNet Unit取消了Depthwise convolution后的ReLU, 最早是Xception中提出只能使用线性变换,而MobileNet_v2中解释了在Depthwise conv后使用ReLU会丢失较多的信息,我在公众号中详细介绍了MobileNet_v2关于使用ReLU会丢失信息的内容,可关注公众号了解。因此,最终的ShuffleNet Unit如右图所示。

 

   ShuffleNet Unit相比于ResNet和ResNeXt,计算量减少了很多,因此在同样的计算量下,ShuffleNet可使用更宽的feature map。


   如给定通道数为C, feature map大小为H x W, bottleneck channels为M, 则ResNet的计算量为HW( 2CM + 9M^2) FLOPs,ResNeXt的计算量为 HW( 2CM + 9M^2/g),而ShuffleNet Unit的计算量为 HW( 2CM/g + 9M) FLOPs,这里g是分组的数量。这里计算量可根据上方三个图来计算,如仍不知怎样得来的,可扫描文末二维码关注公众号,有一篇《FLOPS与FLOPs的区别》介绍了如何计算FLOPs。

 

   此外,即便depthwise conv在理论上有较低的复杂性,但实际上它很难在低功耗移动设备上有效实施,这可能是由于与其他密集操作相比,计算/内存访问比更差。因此,在ShuffleNet Unit中depthwise conv仅仅在bottleneck上使用,以尽可能地减少开销。

 

ShuffleNet结构


image.png

最后一栏的Complexity是FLOPs,在Stage2,在第一个点卷积层没有使用分组卷积,这是因为输入通道数相当小。每一Stage都在上一Stage的通道数上加倍。g越大表示在有限的计算量中编码信息越多,但不能太大,否则会出现前面提到的问题。


结论


image.png

这里ShuffleNet后的数字表示卷积核数的比例因子s。这个比例因子s可用来控制模型大小。计算量会是原来的s^2倍。


image.png

  实验证明分组数越多,错误率会越低,且有shuffle比没有shuffle错误率更低。


image.png

ShuffleNet比同计算量的其他模型错误率更低。


image.png

  ShuffleNet2x比MobileNet_v1效果更好(计算量更少,且错误率更低)。

 

如有错误或疑问,欢迎留言指出。






相关文章
|
人工智能 自然语言处理 搜索推荐
编程助手
【4月更文挑战第20天】编程助手
370 2
|
11月前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
12月前
|
SQL 安全 算法
ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏)
ChatGPT高效提问—prompt实践(漏洞风险分析-重构建议-识别内存泄漏)
171 0
|
人工智能 搜索推荐
AI能力更加原子化,业务流程迈向“无感智能”
【1月更文挑战第7天】AI能力更加原子化,业务流程迈向“无感智能”
499 1
AI能力更加原子化,业务流程迈向“无感智能”
|
机器学习/深度学习 TensorFlow Go
美团视觉GPU推理服务部署架构优化实战
美团视觉GPU推理服务部署架构优化实战
350 0
|
开发框架 自然语言处理 数据库连接
|
JavaScript 前端开发 定位技术
地图开发实战案例:高德地图loca API 文字LabelsLayer效果
地图开发实战案例:高德地图loca API 文字LabelsLayer效果
480 0
|
算法 安全 数据安全/隐私保护
现代密码学 | 02:流密码——2
现代密码学 | 02:流密码——2
1066 0
|
机器学习/深度学习 存储 人工智能
如何玩转Kubeflow Pipelines
通过机器学习工作流,可以有效的将各个子系统串联起,每一个业务场景可以通过一个端到端的机器学习工作流来描述,同时通过工作流也可以追溯每一次模型产出或模型上线的元信息(例如数据、配置、base model等)。 在工业界,比较成熟的机器学习工作流是Google 的Vertex AI Pipeline和Amazon的Sagemaker Pipeline,大家如果感兴趣可以自行去他们的官网体验。 本文将要介绍的是开源机器学习工作流的解决方案Kubeflow Pipelines