論文中比較模型的性能時(shí)罩旋,需要提供模型的大小裹粤。 衡量模型大小的指標(biāo)有:parameters和 [FLOPs, MACs, MAdds] 中三者之一。
1. FLOPs, MACs, MAdds ?宏蛉?? 三者有什么關(guān)系呢性置?
1.1. MACs 和MAdds
首先拾并,MACs
和MAdds
說的是一個(gè)東西。兩者值是一樣的
1.2. FLOPs
根據(jù)github issue 的回答:
Most of modern hardware architectures uses FMA instructions for operations with tensors.
FMA computes a*x+b as one operation. Roughly GMACs = 0.5 * GFLOPs
太長(zhǎng)不看版:
知道了三者的關(guān)系后鹏浅,接下來會(huì)發(fā)現(xiàn)使用不同的工具統(tǒng)計(jì)出來的這些值是不一樣嗅义。 parameters的計(jì)算方式比較統(tǒng)一,基本一樣隐砸。 而MACs總是有些差異之碗。 接下來就分析一下這些差異的來源。
2. 計(jì)算工具差異
首先很常用的工具:
TensorFlow:
自帶tf.RunMetadata()
季希, 使用例子可以參考(TensorFlow: Is there a way to measure FLOPS for a model?l)
PyTorch:
https://github.com/Lyken17/pytorch-OpCounter
https://github.com/sovrasov/flops-counter.pytorch
MXNet:
TODO
非常感謝這些開源的作者和一同完善的contributors. Respect褪那!
以下是針對(duì)FLOPs 而不是parameters (基本一致)的差別:
BatchNorm | Activaton | return | |
---|---|---|---|
tf.RunMetadata | - | ? | FLOPs |
pytorch-OpCounter | √ | √ | MACs |
flops-counter.pytorch | √ | - | MACs |
最后,
https://github.com/facebookresearch/detectron2
https://github.com/rbgirshick/yacs
https://github.com/facebookresearch/pycls
也都帶有計(jì)算的方式式塌,但是不太了解博敬,以后更新.
pycls 不計(jì)算BatchNorm, Activation的MACs