MobileNet 基線
關注我的人都知道,我無法抗拒更新舊基線的機會。
當 MobileNet-V4 論文釋出時,我注意到他們重新運行了 MobileNet-V1 基線,獲得了 74% 的 ImageNet 準確率。原始模型大約是 71%。這是一個相當大的飛躍。
好奇之下,我仔細研究了他們針對“小型”模型制定的方案,該模型使用了不尋常的最佳化器超引數,將 AdamW 的 beta1
從預設的 0.9 降低到 0.6,使其更接近 RMSProp。此外,對於較小的模型來說,其丟棄率和資料增強程度相當高,但訓練週期非常長(在他們的情況下,ImageNet-1k 訓練了 9600 個週期)。
我決定在 timm
中親自嘗試這些超引數,最初是為了重現 MobileNet-V4-Small 的訓練,我在 2400 個週期(而非 9600 個)成功達到了 73.8% 的準確率,然後我嘗試了 MobileNet-V1,因為我從未在 timm
中使用過該模型。
我的 MobileNet-V1 執行剛剛結束,ImageNet-1k 訓練了 3600 個週期,在 224x224 訓練解析度下,ImageNet 的 top-1 準確率達到 75.4%(256x256 解析度下為 76%)——沒有蒸餾,沒有額外資料。ImageNet-V2、Sketch 等 OOD 資料集的得分看起來相當不錯,因此似乎沒有出現嚴重的過擬合。權重在此:https://huggingface.co/timm/mobilenetv1_100.ra4_e3600_r224_in1k
與其他 MobileNets 比較
- 原始 MobileNet-V1 1.0
- 權重:由 Google 提供,https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet
- 準確率:70.9%,引數:4.2M,GMAC:0.6
- 原始 MobileNet-V2 1.0
- 權重:由 Google 提供,https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet)
- 準確率:71.8%,引數:3.5M GMAC:0.3
- MobileNet-V2 1.0
- 權重:由我在
timm
中訓練,https://huggingface.co/timm/mobilenetv2_100.ra_in1k - 準確率:73.0%,引數:3.5M,GMAC:0.3
- 權重:由我在
- MobileNet-V2 1.0 (MNV4 論文) - 準確率:73.4%,引數:3.5M,GMAC:0.3
- 原始 MobileNet-V4 Small (MNV4 論文) - 準確率:73.8%,引數:3.8M,GMAC:0.2
- MobileNet-V4 Small
- 權重:由我在
timm
中訓練,https://huggingface.co/timm/mobilenetv4_conv_small.e2400_r224_in1k - 準確率:73.8%,引數:3.8M,GMAC:0.2
- 權重:由我在
- MobileNet-V1 1.0 (MNV4 論文) - 準確率:74.0%,引數:4.2M,GMAC:0.6
- MobileNet-V2 1.1 w/ 深度縮放
- 權重:由我在
timm
中訓練,https://huggingface.co/timm/mobilenetv2_110d.ra_in1k - 準確率:75.0%,引數:4.5M,GMAC:0.4
- 權重:由我在
- MobileNet-V1
- 權重:此方案,https://huggingface.co/timm/mobilenetv1_100.ra4_e3600_r224_in1k
- 準確率:75.4%,引數:4.2M,GMAC:0.6
- MobileNet-V3 Large 1.0
- 權重:由 Google 提供,https://huggingface.co/timm/tf_mobilenetv3_large_100.in1k
- 準確率:75.5%,引數:5.5M,GMAC:0.2
- MobileNet-V3 Large 1.0
- 權重:由我在
timm
中訓練,https://huggingface.co/timm/mobilenetv3_large_100.ra_in1k - 準確率:75.8%,引數:5.5M,GMAC:0.2
- 權重:由我在
我決定用這些超引數嘗試一下舊的 EfficientNet-B0。top-1 準確率達到 78.6%。為了便於理解,B0 訓練的 top-1 準確率如下:
- 原始(Google,https://huggingface.co/timm/tf_efficientnet_b0.in1k)- 76.7
- AutoAugment(Google,https://huggingface.co/timm/tf_efficientnet_b0.aa_in1k)- 77.1
- AdvProp+AA(Google,https://huggingface.co/timm/tf_efficientnet_b0.ap_in1k)- 77.6
- RandAugment(我在
timm
中訓練,https://huggingface.co/timm/efficientnet_b0.ra_in1k)- 77.7 - 受 MNV4 啟發的方案(https://huggingface.co/timm/efficientnet_b0.ra4_e3600_r224_in1k)- 78.6
- NoisyStudent+RA(Google,https://huggingface.co/timm/tf_efficientnet_b0.ns_jft_in1k)- 78.8
因此,一個純粹的 ImageNet-1k 訓練,沒有蒸餾,也沒有額外資料,僅僅比非常出色的 NoisyStudent 模型低一點點,而後者可以使用 JFT 中的未標註資料。此外,OOD 測試集的分數與 NoisyStudent 相比也保持良好,這同樣令人印象深刻。我實際上認為這個方案可以調整,將 B0 的準確率推到 79%。這次執行的準確率提升很早就停止了,透過調整資料增強和正則化,仍有改進空間。
我的方案與 MobileNet-V4 的超引數有何不同?首先,我使用了 timm
;如果你閱讀 Resnet Strikes Back 論文的附錄 A 部分,我詳細介紹了一些相對於所有 Tensorflow 和大多數基於 JAX 的訓練中預設使用的 RandAugment 的修復和改進。我認為原始版本中的一些問題對出色的訓練有害。其他差異呢?
- 重複資料增強(https://arxiv.org/abs/1901.09335, https://arxiv.org/abs/1902.05509)
- 在 RandAugment 的基礎上,增加了小機率的隨機高斯模糊和隨機灰度。
- 使用高斯噪聲隨機擦除,而不是 RandAugment 之外的 cutout。
所以,我多次探討的主題(Resnet Strikes Back, https://huggingface.co/collections/timm/searching-for-better-vit-baselines-663eb74f64f847d2f35a9c19, 以及許多 timm
權重)仍然成立,即透過更好的訓練方案,改進舊結果仍有很大的操作空間。
我想知道,在 7-8 年後,透過更好的方案和訓練技術,今天最先進的 100+B 密集型 Transformer 架構還能增加多少改進。