超级详细易懂的GhostNet解析

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生成的输入图像的一些特征图,并且存在许多相似的特征图对,就像彼此之间的幽灵一样。超级详细易懂的GhostNet解析_第1张图片

特征图中的冗余(ghost maps)可能是一个成功的深度神经网络的一个重要特征。我们不是避免冗余的特征映射,而是倾向于接受它们,但以一种低成本高效益的方式。

相关工作

目前流行的轻量方法:

模型压缩(性能通常取决于给定的预训练模型)

  1. pruning connection: 连接剪枝,剪掉一些不重要的神经元连接
  2. channel pruning: 通道剪枝,剪掉一些无用的通道
  3. model quantization: 模型量化,在具有离散值的神经网络中对权重或激活函数进行压缩和计算加速
  4. tensor decomposition: 张量分解,通过利用权重的冗余性和低秩性来减少参数或计算
  5. knowledge distillation: 知识蒸馏, 利用大模型教小模型,提高小模型的性能

紧凑模型设计(虽然这些模型在很少的FLOPs下获得了良好的性能,但特征映射之间的相关性和冗余性并未得到很好的利用。)

  1. Xception: depthwise conv operation
  2. MobileNet v1-v3: depthwise separable conv、 inverted residual block、AutoML technology
  3. ShuffleNet v1-v2: channel shuffle operation、channel split

网络设计

Ghost module

- 由普通卷积生成不含冗余的特征图1;
- 由特征图1通过identity和廉价的线性运算Φ生成完整特征图(Φ 是诸如3x3 或 5x5的卷积,并且是逐个特征图进行深度可分离卷积)。

超级详细易懂的GhostNet解析_第2张图片

Ghost module的特点

  1. 与广泛使用的1×1pointwise convolution的单元相比,Ghost module中的主要卷积可以自定义内核大小;
  2. 现有的方法]采用pointwise convolution来跨通道处理特征,然后采用 depthwise convolution来处理空间信息。而Ghost模块则采用普通的卷积方法,首先生成一些内在的特征映射,然后利用廉价的线性操作来增强特征,增加信道;
  3. 在以往的高效架构中,处理每个特征映射的操作仅限于 depthwise convolution or shift operation,而在Ghost模块中的线性操作可以有很大的多样性(文中的线性操作指深度可分离卷积操作);
  4. 将identity与Ghost module中的线性变换并行,以保持与普通卷积输出一致的内在特征图。

复杂度分析

FLOPs(floating point operations):用来衡量算法/模型的复杂度。 FLOPs = Cout∗Hout∗Wout∗Cin∗K∗K

假设有1个identity和s-1个ghost特征图(1个特征图有s-1个冗余),则FLOPs减少s倍:
超级详细易懂的GhostNet解析_第3张图片
分子为普通卷积的复杂度;分母为ghost module的复杂度,红色下划线是普通卷积产生的FLOPs(第一步),蓝色下划线是identity和线性运算产生的FLOPs(第二步)。
其中,s代表每个通道产生的总映射(1个intrinsic feature map和s-1个ghost feature maps),c为输入特征图个数一般较大,s<

Ghost Bottlenecks

超级详细易懂的GhostNet解析_第4张图片
类似于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非线性激活函数。
超级详细易懂的GhostNet解析_第5张图片

Experiments

超级详细易懂的GhostNet解析_第6张图片
超级详细易懂的GhostNet解析_第7张图片
超级详细易懂的GhostNet解析_第8张图片
超级详细易懂的GhostNet解析_第9张图片
目标检测:
超级详细易懂的GhostNet解析_第10张图片
超级详细易懂的GhostNet解析_第11张图片

你可能感兴趣的:(神经网络,计算机视觉,深度学习,目标检测,图像处理)