GhostNet
pdf:https://arxiv.org/abs/1911.11907
代码:https://github.com/iamhankai/ghostnet
简介
作者发现当CNN的提取的特征层很多的时候,有大部分的特征其实是相关的(如figure-1所示),
彼此之间的区别不大,并且因为卷积的特性,模型的参数量和计算量是与特征纬度正相关的。因此为了在维持模型性能的前提下,进一步的减少模型的参数量和计算量,作者提出了使用线性核和卷积核组合的方法进行计算。先使用维度较少的卷积层计算特征,再利用线性层计算与卷积层输出相关的特征。这种方法可以成倍的减少网络的参数和计算量,并尽量维持网络的性能。
ghost module
GhostNet由许多的ghost module组成,每个ghoset module分为两个部分,第一个部分是常规的卷积,不过与普通的ResNet不同的是,ghost module输出的维度是res module的1/s。第二部分是利用m个线性核计算卷积特征的相关特征(论文里面称作ghost feature),因为有多个线性核所以每个卷积特征也会有多个ghost feature,最终的输出纬度还是n = 卷积的特征维度 + ghost feature的特征维度。假设本来的resnet的卷积核大小为k*k*n,那么ghost module的卷积核大小就为k*k*n/s,线性核大小为d*d,那么理论上ghost module的提升速度的倍数就如下所示:
同理参数量也减少了s倍。
ghost net
ghost net整体结构与resnet相似,只不过吧res block替换成了ghost block,每个ghost block由两个ghost module组成,前一个负责提升特征维度,后一个用于对齐shortcut的维度。 当需要pooling时,网络会使用一个stride为2的深度可分离卷积替代pooling层。与mobileNet V2一样,网络去掉了第二个ghost module
后面的非线性层。
试验结果
可以看到相比mobileNet V3,在计算量更小一些的情况下,ghostNet的效果更好一些,不过参数量会多一些。