总结一下,如何在不改变模型的情况下,再将模型提高5倍的速度。为了探索不同的网络结构对速度影响,我做了很多对比实验,在求取平均的情况下,我们基本上可以对一些影响速度的关键因素给出一个定量的关系。
很多人说道网络加速,多考虑把模型缩减,剪之,或者蒸馏,但是我就想问,值得吗?暂且不谈其他的,有几个因素你事先其实可以完全先做了。网络提升速度可以达到5倍多。这什么概念,对比结果可以这样来看:

Depthwise vs Group
CPU: 388ms vs 391ms
GPU: 8ms vs 34ms

这是采用Depthwise卷积和普通卷积的inference对比,我详细测试了CPU和GPU情况下的速度差异,结果显示,即便你的模型不更改丝毫,在GPU下,你的推理速度可以从34ms提升到8ms。这基本上就实现了一个数量级的加速。效果十分客观。

这是我在测试caffe的MobileNet SSD时候的结果,也就是说,这是一个检测的运行时间,可想而知,这个速度非常快,最关键的是,精度不损失一丝一号。

总的来说,两个办法可以让你的模型速度更快:

  • 去掉bn层,也就是合并到conv里面,不需要单独计算;
  • 将group conv改为depthwise, 速度提升明显
  • 多线程,caffe里面的卷积操作实际上是没有多线程优化的,这个只能用在你只有CPU的情况,可以考虑用ncnn去加速

caffe CPU推理是很慢的,没有优化,ncnn有多线程加速,会快大概3倍, 这里我已经告诉大家核心的要义了,遇到了瓶颈?记得来回帖哦!