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 架构还能增加多少改进。