- - **NOTE** This repo is not being maintained --代わりにtimmを使用してください。これらのすべてのモデル定義(互換性のある重み)などが含まれます。
自動化されたニューラルアーキテクチャ検索を介して見つかったものを含む、MobileNet V1/V2ブロックシーケンスから派生した計算/パラメーター効率的なアーキテクチャのほとんどをカバーする、EfficientNet、Mixnet、MobileNetv3などの「一般的な」実装。
すべてのモデルは、Blockレイアウトを構成するための文字列ベースのアーキテクチャ定義を備えたgeneffienceNetまたはMobileNETV3クラスによって実装されています(ここからのアイデア)
timm (82.1 Top-1)で自分で訓練した追加timm相当と同期しましたfix_group_fanout=False initialize_weight_goog 。apモデルの新しいセットを作成しました。実装されたモデルは次のとおりです。
私はもともとここでこれらのモデルをコードでいくつか実装およびトレーニングしました。このリポジトリには、GeneficientNetモデル、検証、および関連するONNX/Caffe2エクスポートコードのみが含まれています。
私は、いくつかのモデルを、発生する論文や公式のemplに近い精度に合わせてトレーニングすることができました。私のトレーニングコードはこちら:https://github.com/rwightman/pytorch-image-modelsです
| モデル | PREC@1(err) | PREC@5(err) | PARAM#(m) | madds(m) | 画像スケーリング | 解決 | 作物 |
|---|---|---|---|---|---|---|---|
| EfficientNet_B3 | 82.240(17.760) | 96.116(3.884) | 12.23 | TBD | 二頭筋 | 320 | 1.0 |
| EfficientNet_B3 | 82.076(17.924) | 96.020(3.980) | 12.23 | TBD | 二頭筋 | 300 | 0.904 |
| mixnet_xl | 81.074(18.926) | 95.282(4.718) | 11.90 | TBD | 二頭筋 | 256 | 1.0 |
| EfficientNet_B2 | 80.612(19.388) | 95.318(4.682) | 9.1 | TBD | 二頭筋 | 288 | 1.0 |
| mixnet_xl | 80.476(19.524) | 94.936(5.064) | 11.90 | TBD | 二頭筋 | 224 | 0.875 |
| EfficientNet_B2 | 80.288(19.712) | 95.166(4.834) | 9.1 | 1003 | 二頭筋 | 260 | 0.890 |
| mixnet_l | 78.976(21.024 | 94.184(5.816) | 7.33 | TBD | 二頭筋 | 224 | 0.875 |
| EfficientNet_b1 | 78.692(21.308) | 94.086(5.914) | 7.8 | 694 | 二頭筋 | 240 | 0.882 |
| EfficientNet_es | 78.066(21.934) | 93.926(6.074) | 5.44 | TBD | 二頭筋 | 224 | 0.875 |
| EfficientNet_b0 | 77.698(22.302) | 93.532(6.468) | 5.3 | 390 | 二頭筋 | 224 | 0.875 |
| mobilenetv2_120d | 77.294(22.706 | 93.502(6.498) | 5.8 | TBD | 二頭筋 | 224 | 0.875 |
| mixnet_m | 77.256(22.744) | 93.418(6.582) | 5.01 | 353 | 二頭筋 | 224 | 0.875 |
| mobilenetv2_140 | 76.524(23.476) | 92.990(7.010) | 6.1 | TBD | 二頭筋 | 224 | 0.875 |
| mixnet_s | 75.988(24.012) | 92.794(7.206) | 4.13 | TBD | 二頭筋 | 224 | 0.875 |
| mobilenetv3_large_100 | 75.766(24.234) | 92.542(7.458) | 5.5 | TBD | 二頭筋 | 224 | 0.875 |
| mobilenetv3_rw | 75.634(24.366) | 92.708(7.292) | 5.5 | 219 | 二頭筋 | 224 | 0.875 |
| EfficientNet_lite0 | 75.472(24.528) | 92.520(7.480) | 4.65 | TBD | 二頭筋 | 224 | 0.875 |
| mnasnet_a1 | 75.448(24.552) | 92.604(7.396) | 3.9 | 312 | 二頭筋 | 224 | 0.875 |
| FBNETC_100 | 75.124(24.876) | 92.386(7.614) | 5.6 | 385 | 二重線 | 224 | 0.875 |
| mobilenetv2_110d | 75.052(24.948) | 92.180(7.820) | 4.5 | TBD | 二頭筋 | 224 | 0.875 |
| mnasnet_b1 | 74.658(25.342) | 92.114(7.886) | 4.4 | 315 | 二頭筋 | 224 | 0.875 |
| SPNASNET_100 | 74.084(25.916) | 91.818(8.182) | 4.4 | TBD | 二重線 | 224 | 0.875 |
| mobilenetv2_100 | 72.978(27.022) | 91.016(8.984) | 3.5 | TBD | 二頭筋 | 224 | 0.875 |
来るべき事前に除外されたモデル...
EfficientNetモデルのTensorflowチェックポイントから移植された重みは、同じ畳み込みパディングに相当するものが追加されると、Tensorflowの精度をほぼ一致させます。
重要:
--tf-preprocessingを使用してTensorflowの前処理パイプラインを有効にすると、スコアが0.1〜0.5%改善され、元のTF Implに非常に近い。 tf_eficientnet_b5の検証を実行するには: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --crop-pct 0.934 --interpolation bicubic
TF_EFFICIENTNET_B5の前処理w/tfで検証を実行するには: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --tf-preprocessing
インセプション前処理を伴うモデルの検証を実行するには、IE EfficientNet-B8 AdvProp: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b8_ap -b 48 --num-gpu 2 --img-size 672 --crop-pct 0.954 --mean 0.5 --std 0.5
| モデル | PREC@1(err) | PREC@5(err) | param# | 画像スケーリング | 画像サイズ | 作物 |
|---|---|---|---|---|---|---|
| TF_EFFICIENTNET_L2_NS *TFP | 88.352(11.648) | 98.652(1.348) | 480 | 二頭筋 | 800 | n/a |
| TF_EFFICIENTNET_L2_NS | TBD | TBD | 480 | 二頭筋 | 800 | 0.961 |
| TF_EFFICIENTNET_L2_NS_475 | 88.234(11.766) | 98.546(1.454) | 480 | 二頭筋 | 475 | 0.936 |
| TF_EFFICIENTNET_L2_NS_475 *TFP | 88.172(11.828) | 98.566(1.434) | 480 | 二頭筋 | 475 | n/a |
| TF_EFFICIENTNET_B7_NS *TFP | 86.844(13.156) | 98.084(1.916) | 66.35 | 二頭筋 | 600 | n/a |
| TF_EFFICIENTNET_B7_NS | 86.840(13.160) | 98.094(1.906) | 66.35 | 二頭筋 | 600 | n/a |
| TF_EFFICIENTNET_B6_NS | 86.452(13.548) | 97.882(2.118) | 43.04 | 二頭筋 | 528 | n/a |
| TF_EFFICIENTNET_B6_NS *TFP | 86.444(13.556) | 97.880(2.120) | 43.04 | 二頭筋 | 528 | n/a |
| TF_EFFICIENTNET_B5_NS *TFP | 86.064(13.936) | 97.746(2.254) | 30.39 | 二頭筋 | 456 | n/a |
| TF_EFFICIENTNET_B5_NS | 86.088(13.912) | 97.752(2.248) | 30.39 | 二頭筋 | 456 | n/a |
| TF_EFFICIENTNET_B8_AP *TFP | 85.436(14.564) | 97.272(2.728) | 87.4 | 二頭筋 | 672 | n/a |
| TF_EFFICIENTNET_B8 *TFP | 85.384(14.616) | 97.394(2.606) | 87.4 | 二頭筋 | 672 | n/a |
| TF_EFFICIENTNET_B8 | 85.370(14.630) | 97.390(2.610) | 87.4 | 二頭筋 | 672 | 0.954 |
| TF_EFFICIENTNET_B8_AP | 85.368(14.632) | 97.294(2.706) | 87.4 | 二頭筋 | 672 | 0.954 |
| TF_EFFICIENTNET_B4_NS *TFP | 85.298(14.702) | 97.504(2.496) | 19.34 | 二頭筋 | 380 | n/a |
| TF_EFFICIENTNET_B4_NS | 85.162(14.838) | 97.470(2.530) | 19.34 | 二頭筋 | 380 | 0.922 |
| TF_EFFICIENTNET_B7_AP *TFP | 85.154(14.846) | 97.244(2.756) | 66.35 | 二頭筋 | 600 | n/a |
| TF_EFFICIENTNET_B7_AP | 85.118(14.882) | 97.252(2.748) | 66.35 | 二頭筋 | 600 | 0.949 |
| TF_EFFICIENTNET_B7 *TFP | 84.940(15.060) | 97.214(2.786) | 66.35 | 二頭筋 | 600 | n/a |
| TF_EFFICIENTNET_B7 | 84.932(15.068) | 97.208(2.792) | 66.35 | 二頭筋 | 600 | 0.949 |
| TF_EFFICIENTNET_B6_AP | 84.786(15.214) | 97.138(2.862) | 43.04 | 二頭筋 | 528 | 0.942 |
| TF_EFFICIENTNET_B6_AP *TFP | 84.760(15.240) | 97.124(2.876) | 43.04 | 二頭筋 | 528 | n/a |
| TF_EFFICIENTNET_B5_AP *TFP | 84.276(15.724) | 96.932(3.068) | 30.39 | 二頭筋 | 456 | n/a |
| TF_EFFICIENTNET_B5_AP | 84.254(15.746) | 96.976(3.024) | 30.39 | 二頭筋 | 456 | 0.934 |
| TF_EFFICIENTNET_B6 *TFP | 84.140(15.860) | 96.852(3.148) | 43.04 | 二頭筋 | 528 | n/a |
| TF_EFFICIENTNET_B6 | 84.110(15.890) | 96.886(3.114) | 43.04 | 二頭筋 | 528 | 0.942 |
| TF_EFFICIENTNET_B3_NS *TFP | 84.054(15.946) | 96.918(3.082) | 12.23 | 二頭筋 | 300 | n/a |
| TF_EFFICIENTNET_B3_NS | 84.048(15.952) | 96.910(3.090) | 12.23 | 二頭筋 | 300 | .904 |
| TF_EFFICIENTNET_B5 *TFP | 83.822(16.178) | 96.756(3.244) | 30.39 | 二頭筋 | 456 | n/a |
| TF_EFFICIENTNET_B5 | 83.812(16.188) | 96.748(3.252) | 30.39 | 二頭筋 | 456 | 0.934 |
| TF_EFFICIENTNET_B4_AP *TFP | 83.278(16.722) | 96.376(3.624) | 19.34 | 二頭筋 | 380 | n/a |
| TF_EFFICIENTNET_B4_AP | 83.248(16.752) | 96.388(3.612) | 19.34 | 二頭筋 | 380 | 0.922 |
| TF_EFFICIENTNET_B4 | 83.022(16.978) | 96.300(3.700) | 19.34 | 二頭筋 | 380 | 0.922 |
| TF_EFFICIENTNET_B4 *TFP | 82.948(17.052) | 96.308(3.692) | 19.34 | 二頭筋 | 380 | n/a |
| TF_EFFICIENTNET_B2_NS *TFP | 82.436(17.564) | 96.268(3.732) | 9.11 | 二頭筋 | 260 | n/a |
| TF_EFFICIENTNET_B2_NS | 82.380(17.620) | 96.248(3.752) | 9.11 | 二頭筋 | 260 | 0.89 |
| TF_EFFICIENTNET_B3_AP *TFP | 81.882(18.118) | 95.662(4.338) | 12.23 | 二頭筋 | 300 | n/a |
| TF_EFFICIENTNET_B3_AP | 81.828(18.172) | 95.624(4.376) | 12.23 | 二頭筋 | 300 | 0.904 |
| TF_EFFICIENTNET_B3 | 81.636(18.364) | 95.718(4.282) | 12.23 | 二頭筋 | 300 | 0.904 |
| TF_EFFICIENTNET_B3 *TFP | 81.576(18.424) | 95.662(4.338) | 12.23 | 二頭筋 | 300 | n/a |
| TF_EFFICIENTNET_LITE4 | 81.528(18.472) | 95.668(4.332) | 13.00 | 二重線 | 380 | 0.92 |
| TF_EFFICIENTNET_B1_NS *TFP | 81.514(18.486) | 95.776(4.224) | 7.79 | 二頭筋 | 240 | n/a |
| TF_EFFICIENTNET_LITE4 *TFP | 81.502(18.498) | 95.676(4.324) | 13.00 | 二重線 | 380 | n/a |
| TF_EFFICIENTNET_B1_NS | 81.388(18.612) | 95.738(4.262) | 7.79 | 二頭筋 | 240 | 0.88 |
| TF_EFFICIENTNET_EL | 80.534(19.466) | 95.190(4.810) | 10.59 | 二頭筋 | 300 | 0.904 |
| TF_EFFICIENTNET_EL *TFP | 80.476(19.524) | 95.200(4.800) | 10.59 | 二頭筋 | 300 | n/a |
| TF_EFFICIENTNET_B2_AP *TFP | 80.420(19.580) | 95.040(4.960) | 9.11 | 二頭筋 | 260 | n/a |
| TF_EFFICIENTNET_B2_AP | 80.306(19.694) | 95.028(4.972) | 9.11 | 二頭筋 | 260 | 0.890 |
| TF_EFFICIENTNET_B2 *TFP | 80.188(19.812) | 94.974(5.026) | 9.11 | 二頭筋 | 260 | n/a |
| TF_EFFICIENTNET_B2 | 80.086(19.914) | 94.908(5.092) | 9.11 | 二頭筋 | 260 | 0.890 |
| TF_EFFICIENTNET_LITE3 | 79.812(20.188) | 94.914(5.086) | 8.20 | 二重線 | 300 | 0.904 |
| TF_EFFICIENTNET_LITE3 *TFP | 79.734(20.266) | 94.838(5.162) | 8.20 | 二重線 | 300 | n/a |
| TF_EFFICIENTNET_B1_AP *TFP | 79.532(20.468) | 94.378(5.622) | 7.79 | 二頭筋 | 240 | n/a |
| TF_EFFICIENTNET_CC_B1_8E *TFP | 79.464(20.536) | 94.492(5.508) | 39.7 | 二頭筋 | 240 | 0.88 |
| TF_EFFICIENTNET_CC_B1_8E | 79.298(20.702) | 94.364(5.636) | 39.7 | 二頭筋 | 240 | 0.88 |
| TF_EFFICIENTNET_B1_AP | 79.278(20.722) | 94.308(5.692) | 7.79 | 二頭筋 | 240 | 0.88 |
| TF_EFFICIENTNET_B1 *TFP | 79.172(20.828) | 94.450(5.550) | 7.79 | 二頭筋 | 240 | n/a |
| TF_EFFICIENTNET_EM *TFP | 78.958(21.042) | 94.458(5.542) | 6.90 | 二頭筋 | 240 | n/a |
| TF_EFFICIENTNET_B0_NS *TFP | 78.806(21.194) | 94.496(5.504) | 5.29 | 二頭筋 | 224 | n/a |
| tf_mixnet_l *tfp | 78.846(21.154) | 94.212(5.788) | 7.33 | 二重線 | 224 | n/a |
| TF_EFFICIENTNET_B1 | 78.826(21.174) | 94.198(5.802) | 7.79 | 二頭筋 | 240 | 0.88 |
| tf_mixnet_l | 78.770(21.230) | 94.004(5.996) | 7.33 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_EM | 78.742(21.258) | 94.332(5.668) | 6.90 | 二頭筋 | 240 | 0.875 |
| TF_EFFICIENTNET_B0_NS | 78.658(21.342) | 94.376(5.624) | 5.29 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_CC_B0_8E *TFP | 78.314(21.686) | 93.790(6.210) | 24.0 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_CC_B0_8E | 77.908(22.092) | 93.656(6.344) | 24.0 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_CC_B0_4E *TFP | 77.746(22.254) | 93.552(6.448) | 13.3 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_CC_B0_4E | 77.304(22.696) | 93.332(6.668) | 13.3 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_ES *TFP | 77.616(22.384) | 93.750(6.250) | 5.44 | 二頭筋 | 224 | n/a |
| TF_EFFICIENTNET_LITE2 *TFP | 77.544(22.456) | 93.800(6.200) | 6.09 | 二重線 | 260 | n/a |
| TF_EFFICIENTNET_LITE2 | 77.460(22.540) | 93.746(6.254) | 6.09 | 二頭筋 | 260 | 0.89 |
| TF_EFFICIENTNET_B0_AP *TFP | 77.514(22.486) | 93.576(6.424) | 5.29 | 二頭筋 | 224 | n/a |
| TF_EFFICIENTNET_ES | 77.264(22.736) | 93.600(6.400) | 5.44 | 二頭筋 | 224 | n/a |
| TF_EFFICIENTNET_B0 *TFP | 77.258(22.742) | 93.478(6.522) | 5.29 | 二頭筋 | 224 | n/a |
| TF_EFFICIENTNET_B0_AP | 77.084(22.916) | 93.254(6.746) | 5.29 | 二頭筋 | 224 | 0.875 |
| tf_mixnet_m *tfp | 77.072(22.928) | 93.368(6.632) | 5.01 | 二重線 | 224 | n/a |
| tf_mixnet_m | 76.950(23.050) | 93.156(6.844) | 5.01 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_B0 | 76.848(23.152) | 93.228(6.772) | 5.29 | 二頭筋 | 224 | 0.875 |
| TF_EFFICIENTNET_LITE1 *TFP | 76.764(23.236) | 93.326(6.674) | 5.42 | 二重線 | 240 | n/a |
| TF_EFFICIENTNET_LITE1 | 76.638(23.362) | 93.232(6.768) | 5.42 | 二頭筋 | 240 | 0.882 |
| TF_MIXNET_S *TFP | 75.800(24.200) | 92.788(7.212) | 4.13 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_LARGE_100 *TFP | 75.768(24.232) | 92.710(7.290) | 5.48 | 二重線 | 224 | n/a |
| tf_mixnet_s | 75.648(24.352) | 92.636(7.364) | 4.13 | 二頭筋 | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_100 | 75.516(24.484) | 92.600(7.400) | 5.48 | 二重線 | 224 | 0.875 |
| TF_EFFICIENTNET_LITE0 *TFP | 75.074(24.926) | 92.314(7.686) | 4.65 | 二重線 | 224 | n/a |
| TF_EFFICIENTNET_LITE0 | 74.842(25.158) | 92.170(7.830) | 4.65 | 二頭筋 | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_075 *TFP | 73.730(26.270) | 91.616(8.384) | 3.99 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_LARGE_075 | 73.442(26.558) | 91.352(8.648) | 3.99 | 二重線 | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_MINIMAL_100 *TFP | 72.678(27.322) | 90.860(9.140) | 3.92 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_LARGE_MINIMAL_100 | 72.244(27.756) | 90.636(9.364) | 3.92 | 二重線 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_100 *TFP | 67.918(32.082) | 87.958(12.042 | 2.54 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_SMALL_100 | 67.918(32.082) | 87.662(12.338) | 2.54 | 二重線 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_075 *TFP | 66.142(33.858) | 86.498(13.502) | 2.04 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_SMALL_075 | 65.718(34.282) | 86.136(13.864) | 2.04 | 二重線 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_MINIMAL_100 *TFP | 63.378(36.622) | 84.802(15.198) | 2.04 | 二重線 | 224 | n/a |
| TF_MOBILENETV3_SMALL_MINIMAL_100 | 62.898(37.102) | 84.230(15.770) | 2.04 | 二重線 | 224 | 0.875 |
* tf-preprocessingパイプラインで検証されたTFPモデル
公式のTensorflowリポジトリから移植されたGoogleTFおよびTfliteウェイト
すべての開発とテストは、Linux X86-64システムのConda Python 3環境、特にPython 3.6.x、3.7.x、3.8.xで行われています。
ユーザーは、WindowsにPython 3 Anacondaインストールが機能することを報告しています。私はこれを自分で確認していません。
Pytorchバージョン1.4、1.5、1.6は、このコードでテストされています。
依存関係を最小限に抑えようとしました。セットアップは、コンドラのPytorchデフォルトインストール手順に従ってです。
conda create -n torch-env
conda activate torch-env
conda install -c pytorch pytorch torchvision cudatoolkit=10.2
モデルは、Pytorch Hub APIからアクセスできます
>>> torch.hub.list('rwightman/gen-efficientnet-pytorch')
['efficientnet_b0', ...]
>>> model = torch.hub.load('rwightman/gen-efficientnet-pytorch', 'efficientnet_b0', pretrained=True)
>>> model.eval()
>>> output = model(torch.randn(1,3,224,224))
このパッケージは、PIP経由でインストールできます。
インストール(Conda env/インストール後):
pip install geffnet
評価:評価:
>>> import geffnet
>>> m = geffnet.create_model('mobilenetv3_large_100', pretrained=True)
>>> m.eval()
電車の使用:
>>> import geffnet
>>> # models can also be created by using the entrypoint directly
>>> m = geffnet.efficientnet_b2(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2)
>>> m.train()
fast.aiなどのためのnn.シーケンシャルコンテナで作成します。
>>> import geffnet
>>> m = geffnet.mixnet_l(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2, as_sequential=True)
スクリプトが含まれています
onnx_export.py )onnx_optimize.pyまたはonnx_validate.py w/ --onnx-output-opt arg)onnx_validate.py )で検証onnx_to_caffe.py )に変換するcaffe2_validate.py )で検証するcaffe2_benchmark.py )のベンチマーク例として、MobileNet-V3の前提条件モデルをエクスポートしてから、ImagENET検証を実行します。
python onnx_export.py --model mobilenetv3_large_100 ./mobilenetv3_100.onnx
python onnx_validate.py /imagenet/validation/ --onnx-input ./mobilenetv3_100.onnx
これらのスクリプトは、Pytorch 1.6およびONNX 1.7 w/ onnxランタイム1.4の時点で機能するようにテストされました。 Caffe2互換性のエクスポートには、エクスポートスクリプトに記載されている追加のARGが必要になりました(以前のバージョンでは必要ありません)。
config.pyの_EXPORTABLEフラグがtrueに設定されていない限り、「同じ」コンビパディングがアクティブ化された「同じ」コンビパディングを備えた重量をONNXにエクスポートすることはできません。 onnx_export.pyスクリプトのようにconfig.set_exportable(True)を使用します。