微型測試模型

社群文章 釋出於2024年10月2日

我最近在 ImageNet-1k 上訓練了一組微型測試模型(https://huggingface.co/collections/timm/timm-tiny-test-models-66f18bd70518277591a86cef),涵蓋了幾種最流行的架構家族。

在舊 CPU(但快速的網際網路連線)上,下載所有 13 個預訓練權重並執行每個模型的單步推理大約需要 10 秒。這將允許快速驗證模型功能,從預訓練權重下載到全尺寸模型的每個 API 功能。它們與全尺寸模型的不同之處在於,它們具有較低的預設解析度,通常每個階段一個塊,寬度非常窄。

這都很好,但除了測試之外,有人會對這些模型感興趣嗎?嗯,這就是您的用武之地。這些是一些在 ImageNet-1k 上訓練得相當好的最小模型。它們使用了一種最近從 MobileNet-v4(Conv-Small)改編的訓練方法,這是一種從小型模型中擠壓準確率的好方法。Top-1 準確率絕不令人印象深刻,但這些模型在小型資料集上進行微調時表現良好,我想它們在一些資源受限(嵌入式)應用程式中或作為強化學習視覺策略的一部分,也可能表現得相當好。

如果您在測試之外找到任何好的應用,請告訴我。以下是模型結果的摘要,它們在 160x160 下進行原生訓練,大多數模型透過利用訓練-測試差異在 192x192 下略有提升。

ImageNet 準確率

模型 影像尺寸 top1 top5 引數數量 norm
test_vit3.r160_in1k 192 58.116 81.876 0.93 LN
test_vit3.r160_in1k 160 56.894 80.748 0.93 LN
test_convnext3.r160_in1k 192 54.558 79.356 0.47 LN
test_convnext2.r160_in1k 192 53.62 78.636 0.48 LN
test_convnext2.r160_in1k 160 53.51 78.526 0.48 LN
test_convnext3.r160_in1k 160 53.328 78.318 0.47 LN
test_convnext.r160_in1k 192 48.532 74.944 0.27 LN
test_nfnet.r160_in1k 192 48.298 73.446 0.38 WS
test_convnext.r160_in1k 160 47.764 74.152 0.27 LN
test_nfnet.r160_in1k 160 47.616 72.898 0.38 WS
test_efficientnet.r160_in1k 192 47.164 71.706 0.36 BN
test_efficientnet_evos.r160_in1k 192 46.924 71.53 0.36 EVOS
test_byobnet.r160_in1k 192 46.688 71.668 0.46 BN
test_efficientnet_evos.r160_in1k 160 46.498 71.006 0.36 EVOS
test_efficientnet.r160_in1k 160 46.454 71.014 0.36 BN
test_byobnet.r160_in1k 160 45.852 70.996 0.46 BN
test_efficientnet_ln.r160_in1k 192 44.538 69.974 0.36 LN
test_efficientnet_gn.r160_in1k 192 44.448 69.75 0.36 GN
test_efficientnet_ln.r160_in1k 160 43.916 69.404 0.36 LN
test_efficientnet_gn.r160_in1k 160 43.88 69.162 0.36 GN
test_vit2.r160_in1k 192 43.454 69.798 0.46 LN
test_resnet.r160_in1k 192 42.376 68.744 0.47 BN
test_vit2.r160_in1k 160 42.232 68.982 0.46 LN
test_vit.r160_in1k 192 41.984 68.64 0.37 LN
test_resnet.r160_in1k 160 41.578 67.956 0.47 BN
test_vit.r160_in1k 160 40.946 67.362 0.37 LN

吞吐量 @ 160x160 w/ torch.compile, mode='max-autotune', PyTorch 2.4.1, RTX4090

模型 infer_samples_per_sec train_samples_per_sec
test_vit 300560.67 87518.73
test_vit2 254514.84 70132.93
test_convnext 216367.11 50905.24
test_convnext3 200783.46 49074.48
test_byobnet 199426.55 49487.12
test_convnext2 196727.0 48119.64
test_efficientnet 181404.48 43546.96
test_efficientnet_ln 173432.33 33280.66
test_efficientnet_evos 169177.92 39684.92
test_vit3 163786.54 44318.45
test_efficientnet_gn 158421.02 44226.92
test_resnet 153289.49 28341.52
test_nfnet 80837.46 16907.38

吞吐量 @ 160x160 w/ torch.compile, mode='reduce-overhead', PyTorch 2.4.1, RTX4090

模型 infer_samples_per_sec train_samples_per_sec
test_vit 274007.61 86652.08
test_vit2 231651.39 68993.91
test_byobnet 197767.6 48633.6
test_convnext 184134.55 46879.08
test_efficientnet 170239.18 42812.1
test_efficientnet_ln 166604.2 31946.88
test_efficientnet_evos 163667.41 42222.59
test_vit3 161792.13 45354.67
test_convnext2 160601.75 43187.22
test_convnext3 160494.65 44304.95
test_efficientnet_gn 155447.85 42003.28
test_resnet 150790.14 27286.95
test_nfnet 78314.21 15282.57

吞吐量 @ 160x160 w/ torch.compile, mode='default', PyTorch 2.4.1, RTX4090

python benchmark.py --amp --model 'test_*' --fast-norm --torchcompile 的輸出

模型 infer_samples_per_sec train_samples_per_sec
test_efficientnet 192256.16 30972.05
test_efficientnet_ln 186221.3 28402.3
test_efficientnet_evos 180578.68 32651.59
test_convnext3 179679.28 34998.59
test_byobnet 177707.5 32309.83
test_efficientnet_gn 169962.75 31801.23
test_convnext2 166527.39 37168.73
test_resnet 157618.18 25159.21
test_vit 146050.34 38321.33
test_convnext 138397.51 27930.18
test_vit2 116394.63 26856.88
test_vit3 89157.52 21656.06
test_nfnet 71030.73 14720.19

詳情

上述模型名稱提供了一些關於它們是什麼的線索,但我確實探索了一些“獨特”的架構變體,值得為任何可能嘗試它們的人提及。

test_byobnet

一個 ByobNet(EfficientNet / ResNet / DarkNet 塊的混合)

  • 階段塊 = 1 * EdgeResidual (FusedMBConv), 1 * DarkBlock, 1 * ResNeXt Basic (group_size=32), 1 * ResNeXt Bottle (group_size=64)
  • 通道數 = 32, 64, 128, 256
  • se_ratio = .25(在所有塊中都有效)
  • act_layer = ReLU
  • norm_layer = BatchNorm

test_convnext

一個 ConvNeXt

  • 階段深度 = 1, 2, 4, 2
  • 通道數 = 24, 32, 48, 64
  • DW kernel_size = 7, 7, 7, 7
  • act_layer = GELU (tanh 近似)
  • norm_layer = LayerNorm

test_convnext2

一個 ConvNeXt

  • 階段深度 = 1, 1, 1, 1
  • 通道數 = 32, 64, 96, 128
  • DW kernel_size = 7, 7, 7, 7
  • act_layer = GELU (tanh 近似)
  • norm_layer = LayerNorm

test_convnext3

一個帶 SiLU 和可變核大小的 ConvNeXt

  • 階段深度 = 1, 1, 1, 1
  • 通道數 = 32, 64, 96, 128
  • DW kernel_size = 7, 5, 5, 3
  • act_layer = SiLU
  • norm_layer = LayerNorm

test_efficientnet

一個帶 V2 塊混合的 EfficientNet

  • 階段塊 = 1 * ConvBnAct, 2 * EdgeResidual (FusedMBConv), 2 * InvertedResidual (MBConv) w/ SE
  • 通道數 = 16, 24, 32, 48, 64
  • kernel_size = 所有均為 3x3
  • 擴充套件 = 所有均為 4x
  • stem_size = 24
  • act_layer = SiLU
  • norm_layer = BatchNorm

test_efficientnet_gn

一個帶 V2 塊混合和 GroupNorm(group_size=8)的 EfficientNet

  • 同上,但 norm_layer=GroupNorm

test_efficientnet_ln

一個帶 V2 塊混合和 LayerNorm 的 EfficientNet

  • 同上,但 norm_layer=LayerNorm

test_efficientnet_evos

一個帶 V2 塊混合和 EvoNorm-S 的 EfficientNet

  • 同上,但使用 EvoNormS 進行範數 + 啟用

test_nfnet

一個無範數網路

  • 4 階段,每個階段 1 個塊
  • 通道數 = 32, 64, 96, 128
  • group_size = 8
  • bottle_ratio = 0.25
  • se_ratio = 0.25
  • act_layer = SiLU
  • norm_layer = 無範數,Scaled Weight Standardization 是卷積的一部分

test_resnet

一個帶混合塊的 ResNet

  • 階段塊 = 1 * BasicBlock, 1 * BasicBlock, 1 * BottleNeck, 1 * BasicBlock
  • 通道數 = 32, 48, 48, 96
  • 深層 3x3 stem(即 ResNet-D)
  • 下采樣中的平均池化(即 ResNet-D)
  • stem_width = 16
  • act_layer = ReLU
  • norm_layer = BatchNorm

test_vit

一個帶分類 token 的普通 ViT

  • patch_size = 16
  • embed_dim = 64
  • num_heads = 2
  • mlp_ratio = 3
  • 深度 = 6
  • act_layer = GELU
  • norm_layer = LayerNorm

test_vit2

一個帶全域性平均池化、1 個 reg token、層縮放(如 timm SBB ViT https://huggingface.co/collections/timm/searching-for-better-vit-baselines-663eb74f64f847d2f35a9c19)的 ViT

  • patch_size = 16
  • embed_dim = 64
  • num_heads = 2
  • mlp_ratio = 3
  • 深度 = 8
  • act_layer = GELU
  • norm_layer = LayerNorm

test_vit3

一個帶注意力池化、1 個 reg token、層縮放的 ViT。

  • patch_size = 16
  • embed_dim = 96
  • num_heads = 3
  • mlp_ratio = 2
  • 深度 = 9
  • act_layer = GELU
  • norm_layer = LayerNorm

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.