)
Paper reading: GhostNet:More Features from Cheap Operations1. 关于GhostNet的motivation这篇文章其实是一篇对于工业应用很实际的一篇文章我们就不是单纯的从翻译文章来讨论这个问题而是从实际应用加上理论这样可能更加直观一些。可以看到这篇文章是华为实验室完成的华为的海思芯片如3559a等是可以直接应用caffe模型进行部署的虽然现在只支持caffe 1.0但是在前端AI中也算是有着举足轻重的地位。但是这么小的芯片必然是不能够和后端什么2080Ti这种洪水猛兽所抗衡的inference的时间自然会有所增加据前端的同事说NNIENeural Network Inference Engine还无法像GPU一样支持并行操作所以很多模型只能串行做inference这对于时效性要求很高的情况下是很难解决的。那么对于一个实际的产品想要优化其性能不就是通过两个方面嘛一个是硬件层面一块卡不行来两块实在不行弄个集群总能跑的快第二个方面就是软件方面之前写过一点点cuda代码同样一个算法你优化之前和优化之后性能可能相差上千倍这个是很有可能的。这篇文章也是从软件的层面来进行优化的据产线同事说在inference的时候最后只能使用单batchsize理想很丰满现实很残酷工业上的实际落地确实要比学术界要考虑更多的实际问题成本、时效、内存等等一系列。言归正传这篇文章是主要是考虑减少内存和计算量这个方面来进行模型优化的那么为什么可以进行模型优化呢那必然是feature map的信息冗余了你才可以说我可以扔掉一部分的重复的信息并且也不至于会影响最终的效果。于是作者拿出了ResNet-50中的一层feature map可以看到共有30个feature map中间有三对feature map是肉眼可以观察到的包含的信息是比较类似的这又是什么意思呢也就是说对应的卷积核学到的信息是类似的换言之有些卷积核我们就可以不用了而是用简单的线性变换通过一个feature map来生成另一个相似的feature map省去了使用大量卷积的运算也减少了大量卷积的参数这个也就达到了这篇文章的两个目的减少了卷积核的数量可以减少参数量也就减少了内存损耗而减少了卷积运算也就减少了计算量从理论上是完成可行的。2.总得会计算参数量和计算量才会看懂这篇文章吧上面一些见解就算是introduction的部分吧related work LZ就不说了写上的话感觉也就是单纯的翻译文章那不如直接看原文算啦。好了重头戏来了那么华为到底是怎么样来减少内存和计算量的呢要减少内存和计算量第一步是不是得会算这两个数。计算量的计算方式乍一看肯定会有点蒙LZ解释一下就好啦其中c是输入feature map的通道数k是指kernel sizeh‘是输出feature map的高度w’是输出feature map的宽度n是输出feature map的通道数可以这样想输出的feature map的每个像素是通过c·k·k卷积得到的所以输出的feature map上每个像素对应的计算量就是c·k·k共有h’·w’·n个像素就可以得到上述的计算公式了。参数量的计算可以看到卷积神经网络主要的参数全连接的参数是巨大的其次就是卷积核的参数本文主要就是针对卷积核来进行压缩的我们就简单计算一下卷积核的参数这个就相当直观了就是卷积核的参数量当然还有bias但是简单起见bias就忽略不计了毕竟数量和卷积核参数比起来数量基本可忽略不计了。3. Ghost Module Part对LZ来说最重要的部分这也是本文的精髓所在参数怎么减少计算量怎么减少就是依赖这张图。下图(a)就是我们常见的卷积神经网络而图(b)就是本文的核心点。其实主要的工作看上去就很简单了举个例子假设我们原来想要产生64个通道的feature map现在我们就先产生个16个通道的也就是图(b)的左边conv操作那么剩下的64-1648个通道的feature map我们怎么生成呢通过Φ\PhiΦ来进行生成就可以了通过3x3或者5x5的depthwise的卷积就可以进行对应的操作并且使用padding为samestride1的条件下feature map的大小并不会产生变化那我们需要多少个Φ\PhiΦ呢当然是48个啦我们可以简单计算下我们需要的参数是16个卷积核的参数加上或者5x5x48这个参数量减少了近3/4那么内存也就相应减少了3/4计算量也是近3/4那么确实这样的操作是能够减少内存占用率和计算量的。最后将生成的48个单层feature map和原来卷积生成的feature map 进行concat得到最终64个通道的feature map。那么效果呢原始计算量和和改进后计算量的比例计算为其中s是指原来定义的通道数和后来想要生成通道数的比例。因为sc所以做了个近似。原始卷积参数量和改进后的参数量的比例计算为4. GhostNetGhostNet也采用和ResNet的机制使用shortcut操作并且一个bootleneck包含两个ghostmodule第一个用来增加channel数第二个用来恢复原始 channel数。可以看下GhostNet的具体结构其中SE module其实是增加了一个channel attention的机制具体到底哪一层用哪一层不用估计也得试出来。。。5.结论文章既然能发出来自然结果还是不错的但在具体的任务上效果如何还有待测试LZ要去亲测了。。。