GhostNet:More Features from Cheap Operations
GhostNet 认为CNN输出存在大量的冗余特征,没必要一次生成,而是标准卷积过程分解为两个阶段,第一阶段生成少数特征图,第二阶段基于少数特征变换(1x1)得到等量特征图,这种方式降低了卷积的计算量
什么是 GhostNetv1 ?
- 在 CNN 中,对于一个 hwc 的输入,如果使用 的卷积核生成 n 个 h‘w’的特征图,其计算成本为:,GhostNetv1 认为 n 个特征图存在大量冗余,但是冗余特征对 CNN 又是必要的,应该如何降低计算成本呢?
- GhostNetv1 认为既然特征冗余了,那么我首先生成 m 个特征图 (m<<n),然后对每张特征图执行 S 次简单变换,并使得 ,由于简单变换使用深度可分离卷积的"通道卷积",因此提取同样数量的特征图,GhostNet 计算成本更低
- GhostNet 本质创新就是将标准卷积过程分解为两个阶段,第一阶段生成少数特征图,第二阶段基于少数特征变换得到等量特征图
GhostNetv1 的网络结构?
- GhostNet 主要由一堆 Ghost bottleneck 组成,其中 Ghost bottleneck 以 Ghost 模块为构建基础
GhostNetv1 的 Ghost Module?
- 标准卷积:在 CNN 中,对于一个 hwc 的输入,如果使用 的卷积核生成 n 个 h‘w’的特征图,其计算成本为:
- Ghost Module:通过 2 步分解标准卷积,1)通过标准卷积生成 m 个特征图 (M<<N);然后对每个特征图执行 S 次简单变换,公式 是第 i 个原始特征图, 是对第 i 个特征图执行第 j 个线性计算,用于生成第 j 个幻影特征图 , 是第 i 个特征图最后一次线性变换,定义为恒等映射,主要确保 ,Ghost Module 输出的特征图数量和标准卷积一样
GhostNetv1 的 Ghost Module 复杂度分析?
- 假设 Ghost 模块生成与普通卷积层相同数量、相同分辨率的特征图,Ghost 模块比标准卷积少 s 倍成本
- 标准卷积:对于一个 hwc 的输入,如果使用 的卷积核生成 n 个 h‘w’的特征图,其计算成本为:
- Ghost 模块:具有一个恒等映射和 个线性变换,假设线性变换的平均内核大小为 ,则其计算量为:
- 计算成本计算比:
- 参数压缩比:
GhostNetv1 的 Ghost Bottleneck?
- 利用 Ghost 模块的优势,专门为小型 CNN 设计的 Ghost bottleneck(G-bneck),Ghost bottleneck 似乎类似于 ResNet 中的基本残差块(Basic Residual Block),其中集成了多个卷积层和 shortcut
- Ghost bottleneck 主要由两个堆叠的 Ghost 模块组成。第一个 Ghost 模块用作扩展层,增加了通道数。这里将输出通道数与输入通道数之比称为 expansion ratio;第二个 Ghost 模块减少通道数,以与 shortcut 路径匹配。然后,使用 shortcut 连接这两个 Ghost 模块的输入和输出
- 上图是 stride=1 保持分辨率模块和下采样一倍模块,注意这里借鉴了 MobileNetV2,第二个 Ghost 模块之后不使用 ReLU,其他层在每层之后都应用了批量归一化(BN)和 ReLU 非线性激活
参考资料: