github 公式 Web サイトからの転載:
PyTorch モデルの MAC / FLOP をカウントします。
THOP: PyTorch-OpCounter
インストールする方法
pip install thop
(現在はGithub アクションに継続的に統合されています)
また
pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git
使い方
-
基本的な使い方
from torchvision.models import resnet50 from thop import profile model = resnet50() input = torch.randn(1, 3, 224, 224) macs, params = profile(model, inputs=(input, ))
-
サードパーティモジュールのルールを定義します。
class YourModule(nn.Module): # your definition def count_your_model(model, x, y): # your rule here input = torch.randn(1, 3, 224, 224) macs, params = profile(model, inputs=(input, ), custom_ops={ YourModule: count_your_model})
-
出力の可読性を向上させる
を呼び出して
thop.clever_format
、より適切な形式の出力を提供します。from thop import clever_format macs, params = clever_format([macs, params], "%.3f")
最近のモデルの実績
実装は から適応されていますtorchvision
。Benchmark/evaluate_popular_models.pyを使用すると、次の結果が得られます。
モデル | パラムス(M) | MAC(G) |
---|---|---|
アレックスネット | 61.10 | 0.77 |
vgg11 | 132.86 | 7.74 |
vgg11_bn | 132.87 | 7.77 |
vgg13 | 133.05 | 11.44 |
vgg13_bn | 133.05 | 11.49 |
vgg16 | 138.36 | 15.61 |
vgg16_bn | 138.37 | 15.66 |
vgg19 | 143.67 | 19.77 |
vgg19_bn | 143.68 | 19.83 |
レスネット18 | 11.69 | 1.82 |
レスネット34 | 21.80 | 3.68 |
深刻50 | 25.56 | 4.14 |
レスネット101 | 44.55 | 7.87 |
レスネット152 | 60.19 | 11.61 |
ワイドレスネット101_2 | 126.89 | 22.84 |
ワイドレスネット50_2 | 68.88 | 11.46 |
モデル | パラムス(M) | MAC(G) |
---|---|---|
resnext50_32x4d | 3月25日 | 4.29 |
resnext101_32x8d | 88.79 | 16.54 |
デンスネット121 | 7.98 | 2.90 |
densenet161 | 28.68 | 7.85 |
デンスネット169 | 14.15 | 3.44 |
densenet201 | 20.01 | 4.39 |
スクイーズネット1_0 | 1.25 | 0.82 |
スクイーズネット1_1 | 1.24 | 0.35 |
mnasnet0_5 | 2.22 | 0.14 |
mnasnet0_75 | 3.17 | 0.24 |
mnasnet1_0 | 4.38 | 0.34 |
mnasnet1_3 | 6.28 | 0.53 |
モバイルネット_v2 | 3.50 | 0.33 |
シャッフルネット_v2_x0_5 | 1.37 | 0.05 |
シャッフルネット_v2_x1_0 | 2.28 | 0.15 |
シャッフルネット_v2_x1_5 | 3.50 | 0.31 |
シャッフルネット_v2_x2_0 | 7.39 | 0.60 |
インセプション_v3 | 27.16 | 5.75 |
Mac と FLPOS について
このブログで説明: https://blog.csdn.net/weixin_42627397/article/details/124770595
Mac の定義は次のとおりです。1 回の加算と 1 回の乗算は 1 Mac
FLOP に等しいです。次のように定義されます。1 回の加算で 1 FLOP がカウントされ、1 回の乗算で 1 FLOP がカウントされる
ため、最終 FLOP = 2 * Mac となります。
FLOPs = 2 * Macs
したがって、thop によって取得された macs を FLOPS にするためには 2 を掛ける必要があります。