o
openMind/convit_ms
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

ConViT

ConViT: 通过软卷积归纳偏置改进视觉变换器

简介

ConViT 结合了卷积架构和视觉变换器(ViTs)的优势。ConViT 引入了带门控的位置自注意力(GPSA),这是一种可以配备“软”卷积归纳偏置的位置自注意力。ConViT 初始化 GPSA 层以模仿卷积层的局部性,然后让每个注意力头通过调整一个控制位置与内容信息注意力的门控参数,获得逃离局部性的自由。ConViT 在 ImageNet 数据集上的表现优于 DeiT(Touvron et al., 2020),同时提供了显著改进的样本效率。[1]

图 1. ConViT 架构 [1]

结果

我们在 ImageNet-1K 数据集上的模型性能如下所示。

模型训练环境Top-1 (%)Top-5 (%)参数 (M)配置文件 Yappler下载权重
convit_tinyD910x8-G73.6691.725.71yamlweights
convit_tiny_plusD910x8-G77.0093.609.97yamlweights
convit_smallD910x8-G81.6395.5927.78yamlweights
convit_small_plusD910x8-G81.8095.4248.98yamlweights
convit_baseD910x8-G82.1095.5286.54yamlweights
convit_base_plusD910x8-G81.9695.04153.13yamlweights

备注

  • 训练环境:训练环境表示为 {设备}x{分片}-{MindSpore 模式},其中 MindSpore 模式可以是 G - 图模式或 F - pynative 模式,并使用 ms 函数。例如,D910x8-G 表示使用图模式在 8 片 Ascend 910 NPU 上进行训练。
  • Top-1 和 Top-5:在 ImageNet-1K 验证集上报告的准确率。

快速入门

准备工作

安装

请参考 MindCV 的安装指南。

数据集准备

请下载 ImageNet-1K 数据集用于模型的训练和验证。

训练

  • 分布式训练

使用预定义的训练配方可以轻松复现报告的结果。对于在多个 Ascend 910 设备上进行分布式训练,请运行

# distributed training on multiple GPU/Ascend devices
mpirun -n 8 python train.py --config configs/convit/convit_tiny_ascend.yaml --data_dir /path/to/imagenet

如果脚本由 root 用户执行,必须在 mpirun 命令中添加 --allow-run-as-root 参数。

类似地,您可以使用上述 mpirun 命令在多个 GPU 设备上训练模型。

关于所有超参数的详细说明,请参考 config.py。

注意: 由于全局批量大小(batch_size x num_devices)是一个重要的超参数,建议在复现时保持全局批量大小不变,或者在调整到新的全局批量大小时,线性地调整学习率。

  • 独立训练

如果您想在无需分布式训练的情况下,在较小的数据集上训练或微调模型,请运行:

# standalone training on a CPU/GPU/Ascend device
python train.py --config configs/convit/convit_tiny_ascend.yaml --data_dir /path/to/dataset --distribute False

验证

为了验证训练模型的准确性,您可以使用 validate.py 并通过 --ckpt_path 参数解析检查点路径。

python validate.py -c configs/convit/convit_tiny_ascend.yaml --data_dir /path/to/imagenet --ckpt_path /path/to/ckpt

部署

请参考MindCV的部署教程。

参考文献

[1] d’Ascoli S, Touvron H, Leavitt M L, 等. Convit: 通过软卷积归纳偏置改进视觉变换器[C]//国际机器学习会议。PMLR, 2021: 2286-2296。