赞
踩
很多同学在学习时想到轻量化这一优化方案,但常常面对到一个困境是为什么参数量减少了,速度反而变慢了?在这个博客中,我会对网络中常用的计算量衡量指标进行解析。
目前大部分的轻量级模型在对比模型速度时用的指标是FLOPs,这个指标主要衡量的就是卷积层的乘法操作。
但是实际运用中会发现,同一个FLOPS的网络运算速度却不同,只用FLOPS去进行衡量的话并不能完全代表模型速度。
这是ShuffleNetV2论文里的一张图,网络的运行时间分解不同的组成部分。由图可以得出虽然卷积占用了大部分时间,但其他操作,包括数据I/O和Element-wise(AddTensor、ReLU等)也占用了大量时间。
因此,单单优化网络在执行卷积时所花费的时间有一定的效果,但仍然要关注运行时间的其它组成部分。
来看一下这幅图,这是YoloX中的消融实验图,它给出了五个指标,各位同学自己在写论文的时候,一般这么多指标就够了。毕竟YOLOX这样的SOTA论文才这么多指标。
该图里包含了几个指标:
指标 | 含义 |
---|---|
AP(%) | 这个代表了目标检测算法的检测精度。 |
Parameters | 参数量,指模型含有多少参数。 |
GFLOPs | FLOPs 是浮点运算次数,可以用来衡量算法/模型复杂度GFLOPs。为十亿(1e9)次的浮点运算。 |
Latency | 网络前向传播的时间,1 ms=1e-3 s,10.5ms=0.0105s |
FPS | 每秒传输帧数,FPS=1/Latency,1/0.0105=95.2 |
Parameters 参数量。参数量指的是模型所包含的参数的数量,比如我们模型中使用到的卷积、全连接里面的权值矩阵对应的每一个数字,都是参数量的组成。以YoloV3算法为例,其参数量为62,001,757。一般被缩写为62.00M。
以YoloV3算法为例,其参数量为62,001,757。一般被缩写为62.00M。需要注意的是,模型的参数量并不等于存储空间大小,存储空间的单位是MB(或者KB)而不是M。
再来看一下FLOPs参数,需要注意的是FLOPS和FLOPs是不一样的。
FLOPS是处理器性能的衡量指标,是“每秒所执行的浮点运算次数”的缩写。
FLOPs是算法复杂度的衡量指标,是“浮点运算次数”的缩写,s代表的是复数。
在很多论文里面呢,FLOPs是用来衡量算法复杂度的指标,但算法复杂度往往不等同于算法的运算速度。Efficientdet就是非常典型的例子,FLOPs很小,但速度慢,占用显存大。
Latency指一般是网络预测一张图片所用的时间,按照上图YoloX所示,应该是不包括后处理(without post processing)的。也就是单单包含了网络前传部分的时间。
FPS指的是每秒传输帧数。FPS=1/Latency。在求得上述的Latency 延迟后可以很容易的求出FPS,求个倒数即可。
网络的运算速度和各种各样的因素有关。主要有关于以下几点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。