[pytorch] ホップ計算モデルの計算能力とパラメータ

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")
    

最近のモデルの実績

実装は から適応されていますtorchvisionBenchmark/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 を掛ける必要があります。

おすすめ

転載: blog.csdn.net/condom10010/article/details/129617615