| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> MobilenetV1、V2、V3系列详解 -> 正文阅读 |
|
[人工智能]MobilenetV1、V2、V3系列详解 |
Mobilenet系列模型作为当前主流的端侧轻量级模型被广泛应用,很多算法都会使用其作为backbone提取特征,这一章对Mobilenet系列模型做一个总结。 一、MobilnetV1????????MobilenetV1提出了深度可分离卷积(Depthwise Convolution),它将标准卷积分解成深度卷积以及一个1x1的卷积即逐点卷积,大幅度减少了运算量和参数量。下面看一下普通卷积和深度可分卷积的对比: 普通卷积: ? 深度可分离卷积: DW卷积:对每个输入通道(输入深度)应用一个滤波器 PW卷积:(就是普通的卷积,只不过卷积核的大小为1x1),一个简单的1×1卷积,然后被用来创建一个线性组合的输出的深度层 ?两种卷积计算量对比: 普通卷积层的特征提取与特征组合一次完成并输出,而深度可分离卷积先用厚度为1的3*3的卷积核(depthwise分层卷积),再用1*1的卷积核(pointwise 卷积)调整通道数,将特征提取与特征组合分开进行。 ? mobileNetV1的网络结构如下,前面的卷积层中除了第一层为标准卷积层外,其他都是深度可分离卷积(Conv dw + Conv/s1),卷积后接了一个7*7的平均池化层,之后通过全连接层,最后利用Softmax激活函数将全连接层输出归一化到0-1的一个概率值,根据概率值的高低可以得到图像的分类情况。? ?二、MobileNetV2mobilenetV2相对于V1的主要优化点为:
倒残差结构:? ? ? ??对于倒残差结构的理解,主要在于对 这里要注意,只有stride=1且输入特征矩阵与输出特征矩阵shape相同时,才有shortcut连接。
?Linear Bottlenecks线性瓶颈结构,就是末层卷积使用线性激活的瓶颈结构(将 ReLU 函数替换为线性函数),论文中的解释如下图: 下面来看一下mbv2的模型结构: ? 三、MobileNetV3mbv3的主要亮点为:
mbv3的bneck如下图: (NL 代表使用非线性激活函数,并不特指) SE模块:在bottlenet结构中加入了SE结构,并且放在了depthwise filter之后,如下图。因为SE结构会消耗一定的时间,所以作者在含有SE的结构中,将expansion layer的channel变为原来的1/4,这样作者发现,即提高了精度,同时还没有增加时间消耗。并且SE结构放在了depthwise之后。实质为引入了一个channel级别的注意力机制,其细节如下: 更新激活函数:使用h-swish替换swish,swish是谷歌自家的研究成果,颇有点自卖自夸的意思,这次在其基础上,为速度进行了优化。swish与h-swish公式如下所示,由于sigmoid的计算耗时较长,特别是在移动端,这些耗时就会比较明显,所以作者使用ReLU6(x+3)/6来近似替代sigmoid,观察下图可以发现,其实相差不大的。利用ReLU有几点好处,1.可以在任何软硬件平台进行计算,2.量化的时候,它消除了潜在的精度损失,使用h-swish替换swith,在量化模式下回提高大约15%的效率,另外,h-swish在深层网络中更加明显。 重新设计耗时层结构:(1)减少第一个卷积层的卷积核个数(32—>16),减少卷积核的个数但是准确率没变,计算量反而会降低,检测速度更快 (2)精简Last Stage 将延迟时间减少了7毫秒,这是运行时间的11%,并将操作数量减少了3000万MAdds,几乎没有损失准确性。 ?(笔者曾经试着在mbv2的模型基础上将last stage参考mbv3的来改动,即将最后的conv放到pooling后面,但是实验结果在笔者的任务上变差了很多。。。所以这里提到的不会损失准确性,笔者保持怀疑态度,大概是和mbv3其他的修改合到一起才能保证不损失精度?) MobileNetV3-Large 模型结构 NBN是不使用bn层的 SE打钩才使用注意力机制 exp size对应倒残差块刚开始1*1卷积输出的深度 out对应倒残差块最后的深度。 mbv3-small的模型结构: 最后附上原论文实验结果: 写在最后?虽然论文中的结果,mbv3比mbv2在速度和效果上都要好,但是在笔者的一个任务中表现却并非如此,mbv3的模型初始化时间和推理时间比v2都要慢一些(分析过程见:端侧模型性能优化——Flops与访存量的坑_Turned_MZ的博客-CSDN博客),至于效果,mbv2也比mbv3好一些,因此在使用这些网络时,还是需要具体任务具体分析。 ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:51:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |