【】一个移动端网络架构MobileNets系列(2)

目前,深度学习领域主要分为两大类。一个是 Researcher,研究强大而复杂的模型网络和实验方法,追求更高的性能;另一个是工程师,旨在集成算法更稳定、更高效,部署在不同的硬件平台上。

因此,如何为这些移动算力设备设计高效、精简的网络架构就显得尤为重要。2017年以来,出现了很多优秀实用的轻量级网络架构神经网络bp算法程序c语言实现,但还没有一个通用的项目来整合这些网络架构。本项目可作为即插即用的工具包,直接调用即可直接使用各种轻量级网络结构。

本项目主要为移动端网络架构提供一个基础工具神经网络bp算法程序c语言实现,避免重复造轮子。未来,我们会针对特定的视觉任务,整合更多的移动终端网络架构。希望该项目不仅能让深度学习初学者快速上手,更好地服务于科研、学术和产业研发界。

Github地址:

欢迎各位轻量级网络研究学者将自己工作的核心代码整理到本项目中,以促进科研界的发展。我们会在readme中注明代码作者~

后续会不断更新模型的一系列轻量化处理方法,包括:剪枝、量化、知识蒸馏等。

一、安全使用

pip 安装 light_cnns

二、项目目录

三、MobileNets 系列

本节主要总结了基于MobileNets的一系列改进,MobileNets是谷歌提出的一种适用于手机的网络架构。对于每个网络架构,我将主要总结每个不同模型的核心创新点、模型结构图和代码实现。

移动网络V1

MobileNets:用于移动视觉应用的高效卷积神经网络

论文地址:

MobileNetv1 模型是 Google 为移动设备提出的轻量级卷积神经网络。使用的核心思想是深度可分离卷积。具体结构如下:

代码

进口火炬

从 light_cnns 导入 mbv1

模型 = mbv1()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

移动网络2

MobileNetV2:倒置残差和线性瓶颈

论文地址:

mobilenetv2采用特征复用结构(残差结构),先进行Expansion操作,再进行Projection操作,最后构建倒残差网络模块(即Inverted Residual Block)。

· 增强的梯度传播,显着减少推理过程中所需的内存占用。

· 使用RELU6(最高输出为6)激活函数,使得模型在低精度计算下更加鲁棒。

· 投影层转为低维空间后,第二次pointwise卷积后的ReLU6改为Linear结构,保留了特征多样性,增强了网络的表达能力(Linear Bottleneck)

网络模型结构如下:

代码

进口火炬

从 light_cnns 导入 mbv2

模型 = mbv2()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

移动网络3

搜索 MobileNetV3

论文地址:

核心改进:

· 网络架构基于NAS实现的MnasNet(效果优于MobileNetV2)

· 论文有大、小两个版本,适用于不同的场景;

· 继承了MobileNetV1的深度可分离卷积

· 继承了MobileNetV2具有线性瓶颈的倒置残差结构

· 引入基于挤压和激励结构的轻量级注意力模型(SE)

· 使用了新的激活函数 h-swish(x)

· 在网络结构搜索上,结合两种技术:资源受限的NAS(平台感知型NAS)和NetAdapt算法,获得最优卷积核和通道数

· 修改了MobileNetV2网络后端输出的head部分;

具体网络结构如下:

代码实现导入火炬

从 light_cnns 导入 mbv3_small

#from light_cnns 导入 mbv3_large

模型小 = mbv3_small()

#model_large = mbv3_large()

model_small.eval()

打印(model_small)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型小(输入)

打印(y.size())

MobileNext Rethinking Bottleneck Structure for Efficient Mobile Network Design 论文地址:

深入分析了MobileNetV2核心模块的逆残差模块存在的问题,提出了一种新颖的SandGlass模块,可以方便地嵌入到现有的网络架构中,提高模型的性能。Sandglass Block可以保证更多的信息从底层传递到顶层,进而有利于梯度的回归;执行两个深度卷积以编码更多空间信息。

网络模型结构如下:

代码实现导入火炬

从 light_cnns 导入 mobilenext

模型 = mobilenext()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

图片[1]-【】一个移动端网络架构MobileNets系列(2)-老王博客

打印(y.size())

四、ShuffleNets 系列

ShuffleNetv1

ShuffleNet:用于移动设备的极其高效的卷积神经网络

论文地址:

网络模型结构如下:

代码实现导入火炬

从 light_cnns 导入 shufflenetv1

模型 = shufflenetv1()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

ShuffleNetv1

ShuffleNet V2:高效CNN架构设计的实用指南

论文地址:

网络模型结构如下:

代码

进口火炬

从 light_cnns 导入 shufflenetv2

模型 = shufflenetv2()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

五、华为诺亚轻量级网络系列

AdderNet:在深度学习中我们真的需要乘法吗?

一个几乎不包含乘法的神经网络。与卷积网络不同,本文使用 L1 距离来衡量神经网络中特征和滤波器之间的相关性。由于L1距离只包含加法和减法,神经网络中大量的乘法运算可以用加法和减法代替,从而大大降低了神经网络的计算成本。此外,论文还设计了一种具有自适应学习率的改进梯度计算方案,以保证滤波器优化速度和更好的网络收敛性。在 CIFAR 和 ImageNet 数据集上的结果表明,AdderNet 在分类任务上可以达到与 CNN 相似的准确度。

网络模型结构如下:

代码

进口火炬

从 light_cnns 导入 resnet20

模型 = resnet20()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

GhostNet:来自廉价运营的更多功能

论文地址:

论文提供了一个全新的 Ghost 模块,旨在通过廉价的操作生成更多的特征图。作者在一组原始特征图的基础上,通过一系列的线性变换,生成了许多能够以很小的代价从原始特征中提取所需信息的“Ghost特征图”。Ghost模块是即插即用的,通过堆叠Ghost模块得到Ghost瓶颈,然后构建一个轻量级的神经网络-GhostNet。在ImageNet分类任务中,GhostNet在类似计算的情况下Top-1准确率为75.7%,高于MobileNetV3的75.2%

网络模型结构如下:

代码

进口火炬

从 light_cnns 导入鬼网

模型 = 鬼网()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

六、列轻量级注意力网络架构

为高效的移动网络设计协调注意力

论文地址:

针对如何有效提高移动网络的卷积特征表达能力以及通道注意力(如SE)机制可以有效地对通道之间的相关性进行建模而忽略位置信息的问题,本文提出了一种新颖的注意力机制:Coordinate Attention,它通过提取水平和垂直注意力特征图来模拟通道之间的长距离依赖关系,水平和垂直注意力也可以有效地提供准确的空间位置信息。

代码

进口火炬

从 light_cnns 导入 mbv2_ca

模型 = mbv2_ca()

模型.评估()

打印(模型)

输入 = 火炬.randn(1, 3, 224, 224)

y = 模型(输入)

打印(y.size())

本文来自:公众号【深度学习技术前沿】作者:慕如峰

Iconscout 商店的插图

-结束-

扫码观看!

本周新品!

关于我的“门”

江门是一家专注于技术驱动型初创企业的发现、加速和投资的新型风险投资机构。旗下子公司涵盖江门创新服务、江门科技社区和江门创投基金。

江门成立于2015年底,创始团队由微软创投中国创始团队原团队组建。为微软甄选并深度孵化了126家创新科技型创业公司。

如果您是科技领域的初创企业,不仅想获得投资,还想获得一系列持续且有价值的投后服务,欢迎向我“门”发送或推荐项目:

bp@thejiangmen.com

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论