本仓库提供了ResNeXt101-64x4d模型的训练脚本和超参配置,以达到论文中的准确性。
模型名称:ResNeXt101
论文:"Aggregated Residual Transformations for Deep Neural Networks" <https://arxiv.org/pdf/1611.05431.pdf>
这里提供的版本是ResNeXt101-64x4d
ResNeXt是ResNet网络的改进版本,比ResNet的网络多了块多了cardinality设置。ResNeXt101-64x4d的网络结构如下:
| 网络层 | 输出 | 参数 |
|---|---|---|
| conv1 | 112x112 | 7x7,64,stride 2 |
| maxpooline | 56x56 | 3x3,stride 2 |
| conv2 | 56x56 | [(1x1,64)->(3x3,64)->(1x1,256) C=64]x3 |
| conv3 | 28x28 | [(1x1,256)->(3x3,256)->(1x1,512) C=64]x4 |
| conv4 | 14x14 | [(1x1,512)->(3x3,512)->(1x1,1024) C=64]x23 |
| conv5 | 7x7 | [(1x1,1024)->(3x3,1024)->(1x1,2048) C=64]x3 |
| 1x1 | average pool;1000-d fc;softmax |
以下各节介绍ResNext50模型的默认配置和超参数。
本模型使用Mindspore框架提供的Momentum优化器,超参设置如下:
本模型使用了以下数据增强:
以下各节列出了开始训练ResNext101-64x4d模型的要求。
目录说明,代码参考了Modelzoo上的ResNext50
.
└─resnext101-64x4d-mindspore
├─README.md
├─scripts
├─run_standalone_train.sh # 启动Ascend单机训练(单卡)
├─run_distribute_train.sh # 启动Ascend分布式训练(8卡)
├─run_standalone_train_for_gpu.sh # 启动GPU单机训练(单卡)
├─run_distribute_train_for_gpu.sh # 启动GPU分布式训练(8卡)
└─run_eval.sh # 启动评估
├─src
├─backbone
├─_init_.py # 初始化
├─resnext.py # ResNeXt101骨干
├─utils
├─_init_.py # 初始化
├─cunstom_op.py # 网络操作
├─logging.py # 打印日志
├─optimizers_init_.py # 获取参数
├─sampler.py # 分布式采样器
├─var_init_.py # 计算增益值
├─_init_.py # 初始化
├─config.py # 参数配置
├─crossentropy.py # 交叉熵损失函数
├─dataset.py # 数据预处理
├─head.py # 常见头
├─image_classification.py # 获取ResNet
├─linear_warmup.py # 线性热身学习率
├─warmup_cosine_annealing.py # 每次迭代的学习率
├─warmup_step_lr.py # 热身迭代学习率
├─eval.py # 评估网络
├──train.py # 训练网络
├──mindspore_hub_conf.py # MindSpore Hub接口
git clone https://gitee.com/neoming/resnext101-64x4d-mindspore.git
cd resnext101-64x4d-mindspore/
可以通过python脚本开始训练:
python train.py --data_dir ~/imagenet/train/ --platform Ascend --is_distributed
或通过shell脚本开始训练:
Ascend:
# 分布式训练示例(8卡)
bash scripts/run_distribute_train.sh RANK_TABLE_FILE DATA_PATH
# 单机训练
bash scripts/run_standalone_train.sh DEVICE_ID DATA_PATH
GPU:
# 分布式训练示例(8卡)
bash scripts/run_distribute_train_for_gpu.sh DATA_PATH
# 单机训练
bash scripts/run_standalone_train_for_gpu.sh DEVICE_ID DATA_PATH
您可以通过python脚本开始验证:
python eval.py --data_dir ~/imagenet/val/ --platform Ascend --pretrained resnext.ckpt
或通过shell脚本开始训练:
# 评估
bash scripts/run_eval.sh DEVICE_ID DATA_PATH PRETRAINED_CKPT_PATH PLATFORM
python export.py --device_target [PLATFORM] --ckpt_file [CKPT_PATH] --file_format [EXPORT_FORMAT]
EXPORT_FORMAT 可选 ["AIR", "ONNX", "MINDIR"].
通过src/config.py文件进行设置,下面是ImageNet单卡实验的设置
"image_size": '224,224',
"num_classes": 1000,
"lr": 0.05,
"lr_scheduler": 'cosine_annealing',
"lr_epochs": '30,60,90,120',
"lr_gamma": 0.1,
"eta_min": 0,
"T_max": 150,
"max_epoch": 150,
"backbone": 'resnext101',
"warmup_epochs": 1,
"weight_decay": 0.0001,
"momentum": 0.9,
"is_dynamic_loss_scale": 0,
"loss_scale": 1024,
"label_smooth": 1,
"label_smooth_factor": 0.1,
"ckpt_interval": 1250,
"ckpt_path": 'outputs/',
"is_save_on_master": 1,
"rank": 0,
"group_size": 1
训练的所有结果将存储在用--ckpt_path参数指定的目录中。
训练脚本将会存储:
通过运行训练脚本获得了以下结果。 要获得相同的结果,请遵循快速入门指南中的步骤。
| epochs | Top1/Top5 |
|---|---|
| 150 | 79.56%(TOP1)/94.68%(TOP5) |
| NPUs | train performance |
|---|---|
| 1 | 196.33image/sec |