Skip to content

xx205/CoAtNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

目录

Transformers 在计算机视觉方面引人注目,但它们仍然落后于最先进的卷积网络。这项工作表明 Transformer 往往具有更大的模型容量,但由于缺乏正确的归纳偏差,它们的泛化可能比卷积网络更差。 为了有效地结合两种架构的优势,Google Research, Brain Team 提出了 CoAtNets,一种混合模型。它源于两个关键的见解: (1)逐通道卷积和自注意力可以通过简单的相对注意力自然地统一起来; (2)垂直堆叠卷积层和注意力层,可以有效地提高模型的泛化性、表达能力和效率

使用的数据集:ImageNet2012

  • 数据集大小:共 1,000 类
    • 训练集:共 1,281,167 张图像
    • 测试集:共 50,000 张图像
  • 数据格式:JPEG
    • 注:数据在 dataset.py 中处理。
  • 下载数据集,目录结构如下:
└─imagenet
   ├─train                         # 训练数据集
   └─val                           # 评估数据集

混合精度

采用混合精度的训练方法,使用支持单精度和半精度数据来提高深度学习神经网络的训练速度,同时保持单精度训练所能达到的网络精度。混合精度训练提高计算速度、减少内存使用的同时,支持在特定硬件上训练更大的模型或实现更大批次的训练。

代码列表

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             # 标签平滑参数

微调阶段主要参数(参数变更已在 finetune.py 中设置)

  # === 数据集设置 ===
  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。在启智集群上可以按照如下步骤进行训练、微调和评估:

预训练

pretrain

测试预训练模型

pretrain_eval

微调

finetune

测试微调模型

finetune_eval

性能

评估性能

参数 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

About

Mindspore implementation of CoAtNet (https://arxiv.org/abs/2106.04803). Reproduce paper's Top1/Top5 Acc on ImageNet1k validation set.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages