目录
RegNet描述
RegNet在ResNet网络结构中引入了一种附加的RNN结构,以在残差连接的基础上进一步帮助网络融合不同时间步的信息,使得信息能够更加有效地由浅层网络传输到深层网络中。模型所提出的改进是对原ResNet网络构建块的一种修改,而不影响其它ResNet网络结构,因此该改进可以在不需要太多额外操作的基础上简单地替换掉原ResNet网络构建块而形成自己的RegNet网络,并且对网络性能提供一定的改善。
论文:Xu, J. , et al. "RegNet: Self-Regulated Network for Image Classification." (2021).
模型架构
RegNet的整体网络架构详情,请参考链接: Link
数据集
使用的数据集: CIFAR10
- 数据集大小:~162M,60000张彩色图像共10类
- 训练集:146M,50000张图像
- 测试集:29M,10000张图像
- 数据格式: RGB图像
- 通过mindspore提供的cifar10数据集API进行处理
环境要求
- 硬件(Ascend/GPU/CPU)
- 框架
- 如需查看详情,请参见如下资源:
快速入门
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
-
Ascend处理器环境运行
# 单机训练示例
bash ./scripts/run_standalone_train.sh [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH] Ascend
# 分布式训练示例
bash ./scripts/run_distribute_train_ascend.sh [RANK_SIZE] [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH]
# 评估示例
bash ./scripts/run_standalone_eval.sh [DEVICE_ID] Ascend [BATCH_SIZE] [IMAGE_SIZE] [CLASS_NUM] [DATASET_PATH] [RANK_SIZE] [CHECKPOINT_PATH]
-
GPU处理器环境运行
# 单机训练示例
bash ./scripts/run_standalone_train.sh [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH] GPU
# 分布式训练示例
bash ./scripts/run_distribute_train_gpu.sh [RANK_SIZE]
# 评估示例
bash ./scripts/run_standalone_eval.sh [DEVICE_ID] GPU [BATCH_SIZE] [IMAGE_SIZE] [CLASS_NUM] [DATASET_PATH] [RANK_SIZE] [CHECKPOINT_PATH]
脚本说明
脚本及样例代码
├── model_zoo
├── README.md // 所有模型的说明
├── regnet
├── README_CN.md // RegNet相关说明
├── src
│ ├──config.py // 解析配置参数
│ ├──regnet.py // RegNet网络结构
├── scripts
│ ├──run_distribution_train_ascend.sh // Ascend分布式训练RegNet的shell脚本
│ ├──run_distribution_train_gpu.sh // GPU分布式训练RegNet的shell脚本
│ ├──run_standalone_train.sh // 单卡训练RegNet的shell脚本
│ ├──run_standalone_eval.sh // 单卡评估RegNet的shell脚本
│ ├──run_infer_310.sh // Ascend310推理脚本
├── ascend310_infer // Ascend310推理需要的文件
├── eval.py // 评估脚本
├── train.py // 训练脚本
├── export.py // 导出ckpt为mindir脚本
├── postprocess.py // 推理后处理脚本
├── config.yaml // 参数配置
├── requirements.txt // 项目所需依赖
脚本参数
在config.yaml中可以同时配置训练参数和评估参数。
# train
batch_size: 64 # 采用的一批数据的大小
checkpoint_prefix: "RegNet" # 权重文件保存文件名前缀
checkpoint_save_path: "/home/regnet/checkpoints/" # 权重文件保存路径
class_num: 10 # 数据集分类数
dataset_path: "/home/regnet/cifar-10-batches-bin/" # 数据集路径
device_id: 0 # 训练采用的设备逻辑编号
image_size: 32 # 数据集的图片尺寸
initial_lr: 0.005 # 训练采用的初始学习率
is_distributed: True # 是否进行分布式训练
keep_checkpoint_max: 5 # 最多保存的模型权重文件数量
max_epoch: 2000 # 最大训练轮数
save_checkpoint_steps: 1 # 保存模型权重文件间隔的batch数量
seed: 1 # 训练时采用的种子
device_target: "Ascend" # 用于验证的设备类型
rank_size: 1 # 用于验证的卡数
checkpoint_path: "/home/regnet/checkpoints/RegNet.ckpt" # 用于验证的模型权重文件路径
训练过程
用法
Ascend处理器环境运行
# 分布式训练
用法:bash ./scripts/run_distribute_train_ascend.sh [RANK_SIZE] [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH]
# 单机训练
用法:bash ./scripts/run_standalone_train.sh [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH] Ascend
分布式训练需要提前创建JSON格式的HCCL配置文件。
具体操作,参见hccn_tools中的说明。
GPU处理器环境运行
# 分布式训练
用法:bash ./scripts/run_distribute_train_gpu.sh [RANK_SIZE]
# 单机训练
用法:bash ./scripts/run_standalone_train.sh [BATCH_SIZE] [CHECKPOINT_PREFIX] [CHECKPOINT_SAVE_PATH] [CLASS_NUM] [DATASET_PATH] [SEED] [IMAGE_SIZE] [INITIAL_LR] [SAVE_CHECKPOINT_STEPS] [KEEP_CHECKPOINT_MAX] [MAX_EPOCH] GPU
结果
# 分布式训练结果(Ascend 8P)
epoch: 1 step: 97, loss is 1.7529819011688232
epoch time: 26076.142 ms, per step time: 268.826 ms
epoch: 2 step: 97, loss is 1.8065788745880127
epoch time: 714.875 ms, per step time: 7.370 ms
epoch: 3 step: 97, loss is 1.6115809679031372
epoch time: 712.925 ms, per step time: 7.350 ms
epoch: 4 step: 97, loss is 1.3992986679077148
epoch time: 712.311 ms, per step time: 7.343 ms
...
评估过程
用法
Ascend处理器环境运行
# 评估
用法:bash ./scripts/run_standalone_eval.sh [DEVICE_ID] [DEVICE_TARGET] [BATCH_SIZE] [IMAGE_SIZE] [CLASS_NUM] [DATASET_PATH] [RANK_SIZE] [CHECKPOINT_PATH]
# 评估示例
bash ./scripts/run_standalone_eval.sh 0 Ascend 100 32 10 /home/regnet/cifar-10-batches-bin/ 1 /home/regnet/checkpoints/RegNet.ckpt
GPU处理器环境运行
# 评估
用法:bash ./scripts/run_standalone_eval.sh [DEVICE_ID] [DEVICE_TARGET] [BATCH_SIZE] [IMAGE_SIZE] [CLASS_NUM] [DATASET_PATH] [RANK_SIZE] [CHECKPOINT_PATH] GPU
# 评估示例
bash ./scripts/run_standalone_eval.sh 0 Ascend 100 32 10 /home/regnet/cifar-10-batches-bin/ 1 /home/regnet/checkpoints/RegNet.ckpt GPU
结果
top-1: 91.43%
导出过程
导出
将checkpoint文件导出成mindir格式模型。
python export.py --batch_size [BATCH_SIZE] --im_size [IM_SIZE] --class_num [CLASS_NUM] --checkpoint_path [CHECKPOINT_PATH] --export_file_name [EXPORT_FILE_NAME]
推理过程
推理
如果您需要使用训练好的模型在Ascend 910、Ascend 310等多个硬件平台上进行推理上进行推理,可参考此链接。下面是一个简单的操作步骤示例:
Ascend 310环境运行
导出mindir模型
在执行导出前需要修改配置文件中的checkpoint_file_path和batch_size参数。checkpoint_file_path为ckpt文件路径,batch_size设置为1。
本地导出mindir
python export.py --config_path=[CONFIG_PATH] --trained_ckpt=[model_ckpt_path] --file_name=[model_name] --file_format=MINDIR
ModelArts导出mindir
# (1) 把训练好的模型地方到桶的对应位置。
# (2) 选择a或者b其中一种方式。
# a. 设置 "enable_modelarts=True"
# 设置 "trained_ckpt='/cache/checkpoint_path/model.ckpt" 在 yaml 文件。
# 设置 "file_name='./regnet'"参数在yaml文件。
# 设置 "file_format='MINDIR'" 参数在yaml文件。
# b. 增加 "enable_modelarts=True" 参数在modearts的界面上。
# 增加 "trained_ckpt='/cache/checkpoint_path/model.ckpt'" 参数在modearts的界面上。
# 设置 "file_name='./regnet'"参数在modearts的界面上。
# 设置 "file_format='MINDIR'" 参数在modearts的界面上。
# (3) 设置网络配置文件的路径 "config_path=/The path of config in S3/"
# (4) 在modelarts的界面上设置代码的路径 "/path/regnet"。
# (5) 在modelarts的界面上设置模型的启动文件 "export.py" 。
# 模型的输出路径"Output file path" 和模型的日志路径 "Job log path" 。
# (6) 开始导出mindir。
在执行推理前,MINDIR文件必须在910上通过export.py文件导出。
310推理目前仅可处理batch_Size为1。
# Ascend310 推理
bash run_infer_310.sh [DATA_PATH] [LABEL_PATH] [MINDIR_PATH] [DEVICE_ID]
DATA_PATH
为图片数据文件夹路径。
MINDIR_PATH
为导出的mindir模型路径。
DEVICE_ID
可选,默认值为 0。
推理结果保存在当前路径,可在acc.log中看到最终精度结果。
# Ascend310 inference
bash run_infer_310.sh [DATA_PATH] [LABEL_PATH] [MINDIR_PATH] [DEVICE_ID]
Top1 acc: 0.91223
模型描述
性能
评估性能
参数 |
Ascend 910 |
模型版本 |
regnet20 |
资源 |
Ascend 910;CPU:2.60GHz,36核;内存:503G |
上传日期 |
2022-08-04 |
MindSpore版本 |
r1.7 |
数据集 |
CIFAR10 |
训练参数 |
epoch=2000, steps per epoch = 781, batch_size = 64 |
优化器 |
Adam |
损失函数 |
Softmax交叉熵 |
输出 |
概率 |
损失 |
0.00317 |
速度 |
7.301毫秒/步(单卡) |
总时长 |
3.18小时 |
参数(M) |
0.677M |
微调检查点 |
10.61M(.ckpt文件) |
脚本 |
链接 |
推理性能
参数 |
Ascend 310 |
模型版本 |
regnet20 |
资源 |
Ascend 310;OS Euler2.8 |
上传日期 |
2022-08-04 |
MindSpore版本 |
r1.7 |
数据集 |
CIFAR10 |
batch_size |
1 |
准确率 |
top1:91.223% |
推理模型 |
9.8M (.mindir 文件) |
随机情况说明
在train.py中使用mindspore.common.seed.set_seed()函数设置种子。
ModelZoo主页
请浏览官网主页。