GhostNet的不完全解析
CVPR2020 & IJCV2022(the extended version)
Noah’s Ark Lab, Huawei Technologies
论文地址: https://arxiv.org/abs/1911.11907
源码:https://github.com/huawei-noah/ghostnet.
摘要
由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络(CNNs)是很困难的。特征图中的冗余性是这些成功cnn的一个重要特征,但在神经结构设计中很少被研究。
本文提出了一种新的ghost模块,从廉价的操作中生成更多的特征映射。基于一组内在特征映射,应用一系列成本低廉的线性变换来生成许多幽灵特征映射,可以充分揭示内在特征背后的信息。
提出的ghost模块可以作为即插即用组件来升级现有的卷积神经网络。 Ghost bottlenecks被设计为堆栈的ghost模块,可以很容易地建立轻量级的GhostNet。
在基准测试上进行的实验表明,所提出的Ghost模块是baseline模型中卷积层的一个令人印象深刻的替代方案,我们GhostNet可以在ImageNet ILSVRC-2012分类数据集上以相近的计算成本比MobileNetV3获得更高的识别性能(例如75.7%的top-1精度)。
研究动机
在主流的深度神经网络提取的特征图中,丰富甚至冗余的信息通常保证了对输入数据的全面理解。例如,图1展示了由ResNet-50生成的输入图像的一些特征图,并且存在许多相似的特征图对,就像彼此之间的幽灵一样。
特征图中的冗余(ghost maps)可能是一个成功的深度神经网络的一个重要特征。我们不是避免冗余的特征映射,而是倾向于接受它们,但以一种低成本高效益的方式。
相关工作
目前流行的轻量方法:
模型压缩(性能通常取决于给定的预训练模型)
- pruning connection: 连接剪枝,剪掉一些不重要的神经元连接
- channel pruning: 通道剪枝,剪掉一些无用的通道
- model quantization: 模型量化,在具有离散值的神经网络中对权重或激活函数进行压缩和计算加速
- tensor decomposition: 张量分解,通过利用权重的冗余性和低秩性来减少参数或计算
- knowledge distillation: 知识蒸馏, 利用大模型教小模型,提高小模型的性能
紧凑模型设计(虽然这些模型在很少的FLOPs下获得了良好的性能,但特征映射之间的相关性和冗余性并未得到很好的利用。)
- Xception: depthwise conv operation
- MobileNet v1-v3: depthwise separable conv、 inverted residual block、AutoML technology
- ShuffleNet v1-v2: channel shuffle operation、channel split
网络设计
Ghost module
- 由普通卷积生成不含冗余的特征图1;
- 由特征图1通过identity和廉价的线性运算Φ生成完整特征图(Φ 是诸如3x3 或 5x5的卷积,并且是逐个特征图进行深度可分离卷积)。
Ghost module的特点
- 与广泛使用的1×1pointwise convolution的单元相比,Ghost module中的主要卷积可以自定义内核大小;
- 现有的方法]采用pointwise convolution来跨通道处理特征,然后采用 depthwise convolution来处理空间信息。而Ghost模块则采用普通的卷积方法,首先生成一些内在的特征映射,然后利用廉价的线性操作来增强特征,增加信道;
- 在以往的高效架构中,处理每个特征映射的操作仅限于 depthwise convolution or shift operation,而在Ghost模块中的线性操作可以有很大的多样性(文中的线性操作指深度可分离卷积操作);
- 将identity与Ghost module中的线性变换并行,以保持与普通卷积输出一致的内在特征图。
复杂度分析
FLOPs(floating point operations):用来衡量算法/模型的复杂度。 FLOPs = Cout∗Hout∗Wout∗Cin∗K∗K
假设有1个identity和s-1个ghost特征图(1个特征图有s-1个冗余),则FLOPs减少s倍:
分子为普通卷积的复杂度;分母为ghost module的复杂度,红色下划线是普通卷积产生的FLOPs(第一步),蓝色下划线是identity和线性运算产生的FLOPs(第二步)。
其中,s代表每个通道产生的总映射(1个intrinsic feature map和s-1个ghost feature maps),c为输入特征图个数一般较大,s<<c; n/s指经过普通卷积输出的intrinsic feature map;d×d为线性操作的平均核大小,具有与k×k相似的大小。
Ghost Bottlenecks
类似于ResNet残差块的设计,代码中identity中有一个深度可分离卷积操作。第一个ghost module作为expansion layer,用于增加通道数目,(输出c/ 输入c) 称为expansion ratio;第二个ghost module用于减少通道数目,使其与输入通道数匹配,进行shortcut。
根据MobileNetV2建议:第二个ghost module之后不再使用ReLU,在每层之后应用BN。
GhostNet
由ghost module堆叠而成,G-bneckt表示Ghost Bottleneck。#exp表示expansion size。#out表示输出通道数。SE表示是否使用SE模块。
与MobileNetV3相比,由于其延迟较大,我们不使用hard-swish非线性激活函数。
文章来源:https://www.toymoban.com/news/detail-456683.html
Experiments
目标检测:
文章来源地址https://www.toymoban.com/news/detail-456683.html
到了这里,关于超级详细易懂的GhostNet解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!