RegNet在ResNet网络结构中引入了一种附加的RNN结构,以在残差连接的基础上进一步帮助网络融合不同时间步的信息,使得信息能够更加有效地由浅层网络传输到深层网络中。模型所提出的改进是对原ResNet网络构建块的一种修改,而不影响其它ResNet网络结构,因此该改进可以在不需要太多额外操作的基础上简单地替换掉原ResNet网络构建块而形成自己的RegNet网络,并且对网络性能提供一定的改善。
论文:Xu, J. , et al. "RegNet: Self-Regulated Network for Image Classification." (2021).
RegNet的整体网络架构详情,请参考链接: Link
使用的数据集: CIFAR10
通过官方网站安装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" # 用于验证的模型权重文件路径
# 分布式训练
用法: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中的说明。
# 分布式训练
用法: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
...
# 评估
用法: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
# 评估
用法: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等多个硬件平台上进行推理上进行推理,可参考此链接。下面是一个简单的操作步骤示例:
导出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()函数设置种子。
请浏览官网主页。
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》