什么是轻量化?
-
减少模型中的计算次数
CNN中主要包含卷积层,激活层,池化层等操作,其中卷积层的计算量远远大于其他层
可能实现的方法:
1.减少卷积层的数量(网络深度)
2.减少卷积层的输出通道数(网络宽度)
3.减少某个卷积层中的feature map的尺寸(减小图片分辨率)
4.减小卷积核的尺寸 -
降低计算的位宽(神经网络的量化)
在CNN计算时,使用更低的位宽.(训练用32bit)
比如16bit(推理上),8bit(工程上),4bit,2bit,甚至是1bit.
为什么要轻量化?
-
模型中的计算次数越少,单位时间内(1秒内)能够完成更多次模型前向计算,能够提高FPS(单位时间内能够推理的图片数量).
-
模型中的位宽越低,硬件处理单元能够同时进行更多次的运算,从而减少推理时间,提高FPS.
本质上,是为了在成本固定时(平台计算能力固定)在兼顾网络性能的前提下,进一步减少网络推理所需的硬件资源,达到最高的收益(FPS).
如何衡量网络的计算量?
- FLOPS:浮点运算次数,1个乘法=1FLOPS,1个加法=1FLOPS
- MACs:乘加次数,1个乘法和1个加法=1MACs
1GFLOPs=1000MFLOPs=10^9FLOPs
1TFLOPs=1000GFLOPs
计算关系同样适用于MACs