【深度学习-图像识别】基于GhostNet进行ImageNet上1000类别的图像识别

(一)论文地址:

https://arxiv.org/abs/1911.11907

检测效果

运行demo.py

在这里插入图片描述
(需要代码和模型权重的请私戳我哦,联系方式见文章末)

(二)核心思想:

作者为了进一步压缩 CNN 网络结构,提出了一个 Ghost module,其核心是通过简单的线性变换,在内在特征图的基础上,生成更多可以完全揭示内在特征信息的幽灵👻特征图(ghost feature map),从而以较小的计算代价生成更多特征;

作者提出的 Ghost module 可以看作一个即插即用组件,用于升级现有的卷积神经网络,其核心是在输出通道数不变的情况下,减小卷积层的通道数并采用一个线性变换来升维,以此减小参数;

同时作者也提出了一个 Ghost Bottleneck 模块用来堆叠 Ghost module,并以此构建了一个新的网络 GhostNet,实现了 75.7% top-1 准确率,在比 MobileNetV3 准确率还高的基础上,进一步压缩了模型;

(三)特征冗余:

在训练好的深度神经网络的特征图中,丰富甚至冗余的信息常常保证了对输入数据的全面理解;

在这里插入图片描述
例如 ResNet-50,如果把特征图可视化,可以看到有许多相似甚至相同的特征图,就像彼此的幽灵一样;

作者认为这些相似的特征图并非冗余的,而是对检测和识别非常重要的,因此作者并没有去想办法去除这种冗余,而是采取了一种更为节省计算消耗的方式去生成这些幽灵特征图,由此搭建的网络就称之为——GhostNet;

(四)传统卷积的问题:

现在通用的一个减小卷积层参数的方法是 MobileNet 提出的深度分离卷积:
在这里插入图片描述
虽然深度分离卷积大大减小了参数量,但是随后用来升维或者降维并融合特征的 1×1 卷积仍然占用了客观的计算消耗和内存,生成的幽灵特征图也证明它有很大的改进空间;

针对这个问题,作者提出了可以减小卷积层使用的卷积核数目:

假设输入为 XRc×h×wX\in R^{c×h×w},其中 cc 为通道数,h,wh,w 分别为特征图的高度和宽度;

那么任意卷积层生成 nn 个 feature map 的操作就可以表示为:

Y=Xf+bY=X*f+b

其中 * 是卷积操作,bb 是偏置,YRh×w×nY\in R^{h^{'}×w^{'}×n} 是输出的特征层,fRc×k×k×nf\in R^{c×k×k×n} 是卷积核,那么计算消耗 FLOPs 就是:

n×hw×c×k×kn × h^{'}· w^{'}·× c × k × k

在这里插入图片描述
然而对于通常情况下 n,c=256,512n,c=256,512,计算消耗会非常大;

作者提出,可以通过控制卷积核中 nn 的大小来减小计算量,并通过一个简单的线性变换起到升维的作用;

(五)Ghost Module for More Features

这里作者简介了 Ghost Module,可以将其作为替换卷积层的模块;
在这里插入图片描述
此时设置一个中间量 YRh×w×mY^{'}\in R^{h^{'}×w^{'}×m},其中 m<nm<n

这时:Y=XfY^{'}=X*f^{'}

其中偏执 bb 被去掉,其他的超参数(如步长、卷积核大小)等保持不变;

此时再将 YY^{'}中的 mm 个特征图分离,对每个特征图分别进行一次线性变换,使每个特征图生成 ss 个幽灵特征图,用公式表示为:

yi,j=Φi,j(yi),i=1,,m,j=1,,sy_{i,j}=\Phi_{i,j}(y^{'}_i),\forall i=1,…,m, j=1,…,s

其中 yiy^{'}_iYY^{'} 的第 ii 个特征图,Φi,j\Phi_{i,j} 是生成第 jj 个幽灵特征图 yi,jy_{i,j} 的线性操作;

这样我们就得到了通道数为 n=msn=m*s 的特征层 YY

(六)Ghost bottleneck:

在这里插入图片描述
作者提出了两种 Ghost Module 的堆叠结构,主要是用来替换 ResNet 中的残差结构;

网络的整体结构如图:
在这里插入图片描述

SE 表示是否使用 SE 模块;

(七)实验结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

联系我们:

权重文件需要的请私戳作者~

(长期接私活~)
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章