这几个量真的是到处都可以看到,那么他们之间到底存在什么样的关系呢?这篇文章就来捋一捋.
首先是模型的参数量,这个参数量很重要,但是真的没用.为什么呢?有一些结构根本不存在参数,但是需要计算啊,这个时候你一大堆的maxPool跟人家去比较,你需要计算这个时间,但是你的参数量又体现不出来.所以说这个参数量,是一个没用的指标.

那么它在计算的时候,实际上就是统计包含参数的运算,比如Conv, BatchNorm等.
接着就是这个FLOPs,到底是个什么妖魔鬼怪?这个就是说,你的卷积要经过多少次浮点数的运算,这个指标一般能够反应出模型的快慢.因为统一到这个指标下之后,就等于和硬件没有关系了.

那么这个MACs又是个什么妖魔鬼怪?. 这个东西指的是内存访问次数,比如在分组卷积里面,不同的kernel大小的MACs的计算量是不一样的,这就是说,你要考虑速度,如果仅仅考虑FLOPs还不够,还要加上MACs.这就是为什么Mobilenet系列,我们的参数量很少,FLOPs看起来也不高,但是GPU的加速不明显,就是MACs还不够低.因为分组卷积里面,g越大,速度越慢.

image.png

参考

  1. https://github.com/Lyken17/pytorch-OpCounter