Transformers 在计算机视觉方面引人注目,但它们仍然落后于最先进的卷积网络。这项工作表明 Transformer 往往具有更大的模型容量,但由于缺乏正确的归纳偏差,它们的泛化可能比卷积网络更差。 为了有效地结合两种架构的优势,Google Research, Brain Team 提出了 CoAtNets,一种混合模型。它源于两个关键的见解: (1)逐通道卷积和自注意力可以通过简单的相对注意力自然地统一起来; (2)垂直堆叠卷积层和注意力层,可以有效地提高模型的泛化性、表达能力和效率
使用的数据集:ImageNet2012
- 数据集大小:共 1,000 类
- 训练集:共 1,281,167 张图像
- 测试集:共 50,000 张图像
- 数据格式:JPEG
- 注:数据在 dataset.py 中处理。
- 下载数据集,目录结构如下:
└─imagenet
├─train # 训练数据集
└─val # 评估数据集采用混合精度的训练方法,使用支持单精度和半精度数据来提高深度学习神经网络的训练速度,同时保持单精度训练所能达到的网络精度。混合精度训练提高计算速度、减少内存使用的同时,支持在特定硬件上训练更大的模型或实现更大批次的训练。
- 硬件(Ascend)
- 使用 Ascend 来搭建硬件环境。
- 框架
- 如需查看详情,请参见如下资源:
CoAtNet
├── src
│ ├── model_utils # 训练环境相关处理
│ │ ├── config.py # 配置文件处理
│ │ ├── device_adapter.py # 自动选取 ModelArts 或本地训练相关处理
│ │ ├── __init__.py
│ │ ├── local_adapter.py # 本地训练相关处理
│ │ └── moxing_adapter.py # ModelArts 训练相关处理
│ ├── callbacks.py # 监测训练信息
│ ├── cell_wrapper.py # 自定义混合精度训练
│ ├── coatnet.py # 模型定义
│ ├── dataset.py # 数据集读取
│ ├── metrics.py # 计算评估指标
│ ├── rand_augment.py # RandAugment 数据增强
│ └── utils.py # 学习率、模型载入等工具
├── default_config.yaml # 配置文件
├── eval.py # 评估程序
├── finetune.py # 微调程序
├── LICENSE
├── README.md # CoAtNet 相关说明
└── train.py # 训练程序在 default_config.yaml 中可以配置训练,微调和评估参数。
配置 CoAtNet 和 ImageNet-1k 数据集。
# === 数据集设置 ===
num_classes: 1000 # 数据集分类数目
image_height: 224 # 输入图片高度
image_width: 224 # 输入图片宽度
center_crop: True # 启用 center crop
num_parallel_workers: 16 # 数据处理并行数
batch_size: 64 # 每个 device 上的 batch 大小 (16 卡时为 32)
rand_augment_num_layers: 2 # RandAugment 操作的算子数量
rand_augment_magnitude: 15 # RandAugment 操作的增强强度
mixup_alpha: 0.8 # MixUp 中 β 分布的参数
# === 网络训练设置 ===
num_epochs: 300 # 训练轮数
lr_max: 0.001 # 最大学习率
lr_min: 0.00001 # 最小学习率
lr_warmup_epochs: 20 # 学习率热身轮数
epsilon: 0.000001 # AdamWeightDecay 优化器参数
weight_decay: 0.05 # AdamWeightDecay 优化器参数
enable_ema: False # 不启用 Exponential Moving Average (EMA)
ema_decay: 0.9999 # EMA 参数
enable_clip_norm: True # 启用梯度模长限制
gradient_norm: 1.0 # 梯度模长参数
label_smoothing: 0.1 # 标签平滑参数 # === 数据集设置 ===
num_classes: 1000 # 数据集分类数目
image_height: 384 # 输入图片高度
image_width: 384 # 输入图片宽度
center_crop: False # 不启用 center crop
num_parallel_workers: 16 # 数据处理并行数
batch_size: 16 # 每个 device 上的 batch 大小
rand_augment_num_layers: 2 # RandAugment 操作的算子数量
rand_augment_magnitude: 15 # RandAugment 操作的增强强度
mixup_alpha: 0.8 # MixUp 中 β 分布的参数
# === 网络训练设置 ===
num_epochs: 30 # 训练轮数
lr_max: 0.00005 # 最大学习率
lr_min: 0.00005 # 最小学习率
lr_warmup_epochs: 0 # 学习率热身轮数
epsilon: 0.000001 # AdamWeightDecay 优化器参数
weight_decay: 0.00000001 # AdamWeightDecay 优化器参数
enable_ema: True # 启用 Exponential Moving Average (EMA)
ema_decay: 0.999975 # EMA 参数 (16 卡时为 0.99995)
enable_clip_norm: True # 启用梯度模长限制
gradient_norm: 1.0 # 梯度模长参数
label_smoothing: 0.1 # 标签平滑参数更多配置细节请参考配置文件 default_config.yaml。在启智集群上可以按照如下步骤进行训练、微调和评估:
| 参数 | Ascend | |
|---|---|---|
| 模型 | CoAtNet | |
| 上传日期 | 2022-11-03 | |
| MindSpore 版本 | 1.6.1 | |
| 数据集 | ImageNet-1k train / val,共 1,281,167 / 50,000 张图像, 共 1,000 类别 | |
| 训练参数 | num_epochs=300, lr_warmup_epochs=20, batch_size=32 (训练), batch_size=16 (微调) | |
| 优化器 | AdamWeightDecay | |
| 损失函数 | SoftmaxCrossEntropyWithLogits | |
| 模型版本 | CoAtNet-1 | CoAtNet-2 |
| 损失 | 16卡 2.98 8卡 2.81 |
16卡 2.82 |
| 分类准确率 |
论文 训练 Top1 Acc: 83.3% 论文 微调 Top1 Acc: 85.1% |
论文 训练 Top1 Acc: 84.1% 论文 微调 Top1 Acc: 85.7% |
| 16卡 训练 Top1 Acc: 83.276% Top5 Acc: 96.656% 16卡 微调 Top1 Acc: 85.206% Top5 Acc: 97.544% |
16卡 训练 Top1 Acc: 84.060% Top5 Acc: 96.956% 16卡 微调 Top1 Acc: 85.804% Top5 Acc: 97.656% |
|
| 8卡 训练 Top1 Acc: 83.192% Top5 Acc: 96.628% 8卡 微调 Top1 Acc: 85.150% Top5 Acc: 97.502% |
||
| 速度 | 16卡 训练 191.8 毫秒每步 16卡 微调 404.0 毫秒每步 |
16卡 训练 259.9 毫秒每步 16卡 微调 536.7 毫秒每步 |
| 8卡 训练 331.3 毫秒每步 (batch_size=64) 8卡 微调 401.6 毫秒每步 |
||
| 训练耗时 (启智集群) | 16卡 训练 41:12:19 16卡 微调 17:58:02 |
16卡 训练 55:36:53 16卡 微调 23:31:04 |
| 8卡 训练 70:41:29 8卡 微调 34:30:20 |
||



