Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
qiuliuxiang 8ac9f77606 | 1 year ago | |
---|---|---|
config | 1 year ago | |
scripts | 1 year ago | |
src | 1 year ago | |
README.md | 1 year ago | |
create_imagenet2012_label.py | 1 year ago | |
eval.py | 1 year ago | |
export.py | 1 year ago | |
get_record.py | 1 year ago | |
gpu_resnet_benchmark.py | 1 year ago | |
infer.py | 1 year ago | |
list_dir.py | 1 year ago | |
mindspore_hub_conf.py | 1 year ago | |
new_eval.py | 1 year ago | |
new_train.py | 1 year ago | |
postprocess.py | 1 year ago | |
preprocess.py | 1 year ago | |
requirements.txt | 1 year ago | |
train.py | 1 year ago |
MultiGrain是一种网络架构,产生的紧凑向量表征,既适合于图像分类,又适合于特定对象的检索。它建立在一个标准分类主干上。网络的顶部产生包含粗粒度和细粒度信息的嵌入,这样就可以根据对象类别、特定对象或是否失真的副本对图像进行识别。网络模型结构建立在一个标准分类主干上,在图像检索中主要是对pooling层的改进,使用Gempooling,使用了结合两种损失函数的loss。交叉熵损失用于分类。检索使用triplet loss损失。
检索部分使用数据集:Imagenet2012
Multigrain的总体网络架构如下:链接
使用的数据集:ImageNet2012
数据集大小:共1000个类的224*224彩色图像
数据格式:JPEG
下载数据集ImageNet2012。
解压ImageNet2012数据集到任意路径,目录结构应包含训练数据集和验证数据集,如下所示:
├── train # 训练数据集
└── val # 验证数据集
# 分布式训练运行示例
bash run_distribute_train.sh [RANK_TABLE_FILE] [DATASET_PATH] [DEVICE_NUM]
# 推理运行示例
bash run_eval.sh [DATASET_PATH] [CHECKPOINT_PATH]
对于分布式训练,需要提前创建JSON格式的HCCL配置文件。关于配置文件,可以参考HCCL_TOOL
。
# 分布式训练运行示例
bash run_distribute_train_gpu.sh [DATASET_PATH] [DEVICE_NUM]
# 推理运行示例
bash run_eval_gpu.sh [DATASET_PATH] [CHECKPOINT_PATH]
└──multigrain
├── README.md
├── config # 参数配置 # 高性能版本:性能提高超过10%而精度下降少于1%
├── resnet50_imagenet2012_Ascend_Thor_config.yaml
├── resnet50_imagenet2012_config.yaml
├── resnet50_imagenet2012_GPU_Thor_config.yaml
├── scripts
├── run_distribute_train.sh # 启动Ascend分布式训练(8卡)
├── run_eval.sh # 启动Ascend评估
├── run_standalone_train.sh # 启动Ascend单机训练(单卡)
├── run_distribute_train_gpu.sh # 启动GPU分布式训练(8卡)
├── run_eval_gpu.sh # 启动GPU评估
├── run_standalone_train_gpu.sh # 启动GPU单机训练(单卡)
├── src
├── dataset.py # 数据预处理
├── eval_callback.py # 训练时推理回调函数
├── CrossEntropySmooth.py # ImageNet2012数据集的损失定义
├── mixLoss.py # 联合损失定义
├── lr_generator.py # 生成每个步骤的学习率
└── resnet.py # ResNet骨干网络,包括ResNet50、ResNet101和SE-ResNet50
├── model_utils
├── config.py # 参数配置
├── device_adapter.py # 设备配置
├── local_adapter.py # 本地设备配置
└── moxing_adapter.py # modelarts设备配置
├── eval.py # 评估网络
├── export.py # 导出IR模型
└── train.py # 训练网络
在config.py中可以同时配置训练和推理参数。
"class_num":1001, # 数据集类数
"batch_size":480, # 输入张量的批次大小
"loss_scale":1024, # 损失等级
"momentum":0.9, # 动量优化器
"weight_decay":1e-4, # 权重衰减
"epoch_size":50, # 此值仅适用于训练;应用于推理时固定为1
"pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小
"save_checkpoint":True, # 是否保存检查点
"save_checkpoint_epochs":5, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一个周期完成后保存
"keep_checkpoint_max":10, # 只保存最后一个keep_checkpoint_max检查点
"warmup_epochs":2, # 热身周期数
"lr_decay_mode":"Linear", # 用于生成学习率的衰减模式
"use_label_smooth":True, # 标签平滑
"label_smooth_factor":0.1, # 标签平滑因子
"lr_init":0.05672 # 初始学习率
"lr_decay":4.9687, # 学习率衰减率值
"lr_end_epoch":70, # 学习率结束epoch值
"damping_init":0.02345, # 阻尼衰减率
"damping_decay":0.5467, # 更新二阶矩阵的步长间隔
"frequency": 834, # 更新二阶信息矩阵的步长间隔(应为每个epoch step数的除数)
"class_num":1001, # 数据集类数
"batch_size":480, # 输入张量的批次大小
"loss_scale":1024, # 损失等级
"momentum":0.9, # 动量优化器
"weight_decay":1e-4, # 权重衰减
"epoch_size":50, # 此值仅适用于训练;应用于推理时固定为1
"pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小
"save_checkpoint":True, # 是否保存检查点
"save_checkpoint_epochs":5, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一个周期完成后保存
"keep_checkpoint_max":10, # 只保存最后一个keep_checkpoint_max检查点
"warmup_epochs":2, # 热身周期数
"lr_decay_mode":"Linear", # 用于生成学习率的衰减模式
"use_label_smooth":True, # 标签平滑
"label_smooth_factor":0.1, # 标签平滑因子
"lr_init":0.05672 # 初始学习率
"lr_decay":4.9687, # 学习率衰减率值
"lr_end_epoch":70, # 学习率结束epoch值
"damping_init":0.02345, # 阻尼衰减率
"damping_decay":0.5467, # 更新二阶矩阵的步长间隔
"frequency": 834, # 更新二阶信息矩阵的步长间隔(应为每epoch step数的除数)
由于算子的限制,目前Ascend中batch size只支持3的倍数。
bash run_distribute_train.sh [RANK_TABLE_FILE] [DATASET_PATH] [DEVICE_NUM]
训练结果保存在当前路径下,文件夹名称以“train_parallel”开头。您可在日志中找到checkpoint文件以及结果,如下所示。
...
epoch: 2 step: 995, loss is 4.1976256
epoch: 2 step: 995, loss is 4.6285763
epoch: 2 step: 995, loss is 3.7275014
epoch: 2 step: 995, loss is 3.2510743
epoch: 2 step: 995, loss is 3.963184
epoch: 2 step: 995, loss is 3.4830532
...
bash run_distribute_train_gpu.sh [DATASET_PATH] [DEVICE_NUM]
训练结果保存在当前路径下,文件夹名称以“train_parallel”开头。您可在日志中找到checkpoint文件以及结果,如下所示。
...
epoch: 2 step: 1150, loss is 4.791112
epoch: 2 step: 1151, loss is 4.2517877
epoch: 2 step: 1152, loss is 5.4372764
epoch: 2 step: 1153, loss is 5.95784
epoch: 2 step: 1154, loss is 5.1854725
epoch: 2 step: 1155, loss is 5.3210454
...
在运行以下命令之前,请检查用于推理的checkpoint路径。请将checkpoint路径设置为绝对路径,如username/resnet_thor/train_parallel0/resnet-42_5004.ckpt
。
bash run_eval.sh [DATASET_PATH] [CHECKPOINT_PATH]
此脚本需设置两个参数:
DATASET_PATH
:验证数据集的路径。CHECKPOINT_PATH
:checkpoint文件的绝对路径。训练过程中可以生成checkpoint。
推理结果保存在示例路径,文件夹名为eval
。您可在日志中找到如下结果。
result: {'top_1_accuracy': 0.7626506024096386, 'top_5_accuracy': 0.9281124497991968} ckpt= /home/work/user-job-dir/checkpoint.ckpt
bash run_eval_gpu.sh [DATASET_PATH] [CHECKPOINT_PATH]
推理结果保存在示例路径,文件夹名为eval
。您可在日志中找到如下结果。
result: {'top_1_accuracy': 0.7626506024096386, 'top_5_accuracy': 0.9281124497991968} ckpt= /home/work/user-job-dir/checkpoint.ckpt
参数 | Ascend 910 | GPU |
---|---|---|
模型版本 | Multigrain | Multigrain |
资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 | GPU(Tesla V100 SXM2)-CPU 2.1GHz 24核-内存128G |
上传日期 | 2022-11-13 | 2022-11-13 |
MindSpore版本 | 1.5.0 | 1.5.0 |
数据集 | ImageNet2012 | ImageNet2012 |
训练参数 | epoch=45, steps per epoch=5338, batch_size = 30 | epoch=45, steps per epoch=5338, batch_size = 30 |
优化器 | THOR | THOR |
损耗函数 | mix_loss混合损失 | Softmax交叉熵 |
输出 | 概率 | 概率 |
loss | 1.6453942 | 1.645802 |
Speed | 20.4毫秒/步(8卡) | 76毫秒/步(8卡) |
总时间(按75.9%计算) | 10h25m55s | 9h28m34s |
参数(M) | 25.5 | 25.5 |
checkpoint | 1.05G(.ckpt file) | 198M(.ckpt file) |
参数 | Ascend 910 | GPU |
---|---|---|
模型版本 | Multigrain | Multigrain |
资源 | Ascend 910;系统 Euler2.8 | GPU |
上传日期 | 2022-11-13 | 2022-11-13 |
MindSpore版本 | 1.5.0 | 1.5.0 |
数据集 | ImageNet2012 | ImageNet2012 |
批大小 | 30 | 30 |
输出 | 概率 | 概率 |
精度 | 76.26% | 76.01% |
推理模型 | 198M (.air file) |
请查看官方主页
。
No Description
Text Python Shell
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》