写在前面:上一篇我们谈到了目标检测中的性能评价指标,其中很重要的一项是速度指标,速度指标跟硬件,网络的参数,和你设计的算法有关,大型网络(例如Resnet152,Densenet)虽然性能优秀,但与之对应带来的是对设备的内存问题,和处理速度问题(具体见下面)。只有解决 CNN 效率问题,才能让 CNN 走出实验室,更广泛的应用于移动端。对于效率问题,通常的方法是进行模型压缩,即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。相比于在已经训练好的模型上进行处理,轻量化模型模型设计则是另辟蹊径。轻量化模型设计主要思想在于设计更高效的「网络计算方式」(主要针对卷积方式),从而使网络参数减少的同时,不损失网络性能。本文就近年提出的一些轻量级网络作一下介绍,主要包括:MobileNet系列(v1-v3)、ShuffleNet系列(v1-v2)、SNet(轻量型目标检测网络ThunderNet的backbone,改进自shufflenetv2)。关于源码,大家在github上应该可以找到。
- 大型网络存在的问题
- 存储问题:数百层网络有着大量的权值参数,保存大量权值参数对设备的内存要求很高。
2. 速度问题:在实际应用中,往往是毫秒级别,为了达到实际应用标准,要么提高处理器性能,要么就减少计算量,大型网络计算量大,处理任务速度慢。
1. mobilenet系列
1.1 mobilenetv1(论文地址)
- 核心思想
MobileNet 由 Google 团队提出,发表于 CVPR-2017,其核心思想主要是深度可分离卷积来替代标准卷积,减少参数量,下面我们就看看深度可分离卷积如何操作的,能够减少参数量。深度可分离卷积其核心思想是:
1.首先进行逐通道的卷积(DW卷积),什么意思呢,就是说我将输入特征图按通道进行分组,有多少个通道就用多少个卷积核(所以此处卷积核通道数是1),与单个通道的特征图卷积,例如我输入特征图的通道数是3,我想通过深度可分离卷积之后得到的输出特征图通道数为256,那么在逐通道卷积这一步我就应该用个3个Dk*Dk*1的卷积核(一般DK=3用的比较多),每一个卷积核在输入特征图中的一个通道上进行卷积。
2. 进行了逐通道卷积之后,再用1x1的卷积(PW卷积),将上面经过卷积之后的特征图所有的通道串起来,什么意思呢,就是我现在这一步,类似于点卷积,对经过逐通道卷积后的所有特征图中的一个像素点,用1x1卷积核去卷积(此处卷积核通道数为输入特征图的通道数,个数取决于你想要得到的输出特征图通道数通道数是几,那么你就去用几个卷积核)还是接着上面的例子,输入特征图通道数为3&#x