Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
lihd 1f5b13b2cc | 1 year ago | |
---|---|---|
ascend310_infer | 1 year ago | |
scripts | 1 year ago | |
src | 1 year ago | |
README.md | 1 year ago | |
eval.py | 1 year ago | |
export.py | 1 year ago | |
postprocess.py | 1 year ago | |
requirements.txt | 1 year ago | |
train.py | 1 year ago |
DeepMar是2015年在行人属性识别领域进行的一项创新。在DeepMar中,为了更好地利用属性之间的关系,作者提出了统一多属性联合学习模型来同时学习所有属性。在该算法中,某个属性可以有利于其他关联属性的表示。例如,长发特征对女性的概率高于男性,因而头发长度可以帮助识别性别。
论文:Li D, Chen X, Huang K. Multi-attribute learning for pedestrian attribute recognition in surveillance scenarios[C]//2015 3rd IAPR Asian Conference on Pattern Recognition (ACPR). IEEE, 2015: 111-115.
DeepMar论文提出了多属性识别联合识别的算法框架。本代码中,特征提取部分的backbone采用了resnet50的主干部分,分类器部分的classifier稍作修改,对PEAT数据集中正比例大于1/20的35个属性进行识别。同时,为了处理数据的不平衡性,损失函数使用改进式的交叉熵损失函数,即给予35个属性不同的损失权重。对于DeepMar网络的backbone部分,载入resnet50主干部分的预训练权重。若需要resnet50的预训练权重,请参考MindSpore官方预训练权重:链接
使用的数据集:PETA
该数据集大小为 0.4G,包含 19000 张行人图像,一共属于 8705 个人,每个行人都被标注为 61 个二进制数和 4 个多类别属性。通常,实验中主要关注正比例大于1/20的35个属性。 广泛采用的实验协议是,将该 19000
张图像随机划分为三部分,9500 张用作训练集,1900 张用作验证集,7600 张用作测试集。
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
Ascend处理器环境运行
# 训练时,需要修改以下路径:
peta_dataset_mat_dir: "./data/PETA.mat" # PETA数据集.mat文件的路径
image_path: "./data/images" # PETA数据集图像文件夹的路径
pretrain_chechpoint: " " # resnet50主干部分的预训练权重的路径
save_ckpt_dir: "./model" # ckpt模型保存目录
# 评估时,需要修改以下路径:
peta_dataset_mat_dir: "./data/PETA.mat" # PETA数据集.mat文件的路径
image_path: "./data/images" # PETA数据集图像文件夹的路径
ckpt_path: "./checkpoint/Deepmar_Distributed_Epoch_400_.ckpt" # ckpt模型的路径
# 运行训练示例
cd scripts
bash run_standalone_train_ascend.sh [DEVICE_ID] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [PRETRAIN_CHECHPOINT] [SAVE_CKPT_DIR]
# example: bash run_standalone_train_ascend.sh 0 /~/data/PETA.mat ~/data/images ~/resnet50_imagenet2012.ckpt ./ckpt_standalone
# 运行分布式训练示例
cd scripts
bash run_distribute_train_ascend.sh [DEVICE_NUM] [RANK_TABLE_FILE] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [PRETRAIN_CHECHPOINT] [SAVE_CKPT_DIR]
# example:bash run_distribute_train_ascend.sh 8 ~/hccl_rank_table.json ~/data/PETA.mat ~/data/images ~/resnet50_imagenet2012.ckpt ./ckpt_distribute
# 运行评估示例
cd scripts
bash run_eval_ascend.sh [DEVICE_ID] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [CHPT_PATH]
# example:bash run_eval_ascend.sh 0 ~/data/PETA.mat ~/data/images ./ckpt_distribute/Deepmar_Distributed_Epoch_500_.ckpt
对于分布式, 训练需要提前创建JSON格式的hccl配置文件. 请遵循以下链接中的说明:
https://gitee.com/mindspore/models/tree/master/utils/hccl_tools.
在 ModelArts(鹏城云脑) 进行训练 (如果你想在modelarts(鹏城云脑) 上运行,可以参考以下文档 modelarts)
在 ModelArts 上训练 PETA 的训练集
# (1) 创建个人项目,上传相关代码文件
# (2) 将 PEAT数据集和预训练权重压缩后上传至云脑数据集;或在云脑搜索已上传好的云脑数据集和预训练权重文件:
# 【DeepMAR_Data.zip】(<https://git.openi.org.cn/wangzq/data_collection/datasets>)
# (3) 执行a或者b
# a. 在 train.py 文件中设置 "enable_pengcheng_cloud = 1"
# 在 train.py 文件中设置 "workroot = '/home/work/user-job-dir'"
# 在 train.py 文件中设置 "is_distributed = 1" 或 "is_distributed = 0",决定是否开启分布式训练
# 在 train.py 文件中设置 其他参数
# 随后新建训练任务,选择npu类型
#
# b. 首先新建训练任务,选择npu类型
# 在网页上设置 "enable_pengcheng_cloud = 1"
# 在网页上设置 "workroot = '/home/work/user-job-dir'"
# 在网页上设置 "is_distributed = 1" 或 "is_distributed = 0",决定是否开启分布式训练
# 在网页上设置 其他参数
# (4) 在网页上设置启动文件为 "train.py"
# (6) 在网页上设置"数据集"为所上传的压缩文件、"设备规格"、"mindspore版本"等
# (7) 启动训练任务
# (8) 在"日志"中查看训练信息,训练结束后在"结果下载"处下载模型
在 ModelArts 上评估 PETA 的测试集
# (1) 创建个人项目,上传相关代码文件和权重文件
# (2) 将 PEAT数据集 压缩后上传至云脑数据集;或在云脑搜索已上传好的云脑数据集:
# 【DeepMAR_Data.zip】(<https://git.openi.org.cn/wangzq/data_collection/datasets>)
# (3) 执行a或者b
# a. 在 eval.py 文件中设置 "enable_pengcheng_cloud = 1"
# 在 eval.py 文件中设置 "workroot = '/home/work/user-job-dir'"
# 在 eval.py 文件中设置 代码仓中权重的存放路径,如"ckpt_path = './checkpoint/Deepmar_Distributed_Epoch_400_.ckpt'"
# 在 eval.py 文件中设置 其他参数
# 随后新建训练任务,选择npu类型
#
# b. 首先新建训练任务,选择npu类型
# 在网页上设置 "enable_pengcheng_cloud = 1"
# 在网页上设置 "workroot = '/home/work/user-job-dir'"
# 在网页上设置 代码仓中权重的存放路径,如"ckpt_path = './checkpoint/Deepmar_Distributed_Epoch_400_.ckpt'"
# 在网页上设置 其他参数
# (4) 在网页上设置启动文件为 "eval.py"
# (6) 在网页上设置"数据集"为所上传的压缩文件、"设备规格"、"mindspore版本"等
# (7) 启动训练任务
# (8) 在"日志"中查看评估精度信息
├── model_zoo
├── README.md // 所有模型相关说明
├── DeepMar
├── README.md // DeepMar相关说明
├── ascend310_infer // 实现310推理源代码
├── scripts
│ ├──run_infer_310.sh // 执行310推理的shell脚本
│ ├──run_distribute_train_ascend.sh // 分布式到Ascend训练的shell脚本
│ ├──run_eval_ascend.sh // Ascend评估的shell脚本
│ ├──run_standalone_train_ascend.sh // 单卡Ascend训练的shell脚本
├── src
│ ├──create_callback.py // 回调函数
│ ├──deepmar.py // DeepMar网络结构
│ ├──deepmar_dataset.py // 数据处理
│ ├──lr_schedule.py // 动态学习率
├── requirements.txt
├── checkpoint // 评估脚本的ckpt文件存放目录
├── postprocess.py // 310推理精度计算脚本
├── train.py // 训练脚本
├── eval.py // 评估脚本
├── export.py // 将checkpoint文件导出成mindir
在train.py中配置训练参数,在eval.py中配置评估参数
配置训练参数。
split: 'train' # PETA数据集划分的关键字
partition_idx: 0 # PETA数据集划分时的截取序号
image_resize: (224,224) # 输入网络的图像尺寸
batch_size: 16 # 训练集的batch大小
momentum: 0.9 # momentum因子
init_lr: 0.1 # 初始学习率
epoch_size: 500 # 训练周期
num_work: 2 # 载入训练集的线程数
epoch_star_save: 400 # 开始保存ckpt模型的epoch数
epoch_per_save: 10 # 保存ckpt模型的epoch间隔数
backbone_weight_decay: 4e-5 # backbone的权重衰减系数
classifier_weight_decay: 4e-4 # classifier的权重衰减系数
lr_strategy: "Cosine" # 学习率模式
device_target: "Ascend" # 设备类型
save_ckpt_device: 0 # 保存ckpt模型的设备号
is_distributed: 1 # 是否分布式
train_mode: 'train' # 数据集处理,指定为训练模式
save_ckpt_dir: './model' # 保存ckpt模型的目录
pretrain_chechpoint: "./data/resnet50_frompytorch.ckpt" # 预训练权重的绝对地址,默认为resnet50的路径
peta_dataset_mat_dir: './data/PETA.mat' # PETA.mat的绝对地址
image_path: './data/images' # 行人图像文件夹images的路径
enable_pengcheng_cloud: 1 # 运行环境是否为鹏城云脑的训练任务
workroot: '/home/work/user-job-dir' # 鹏城云脑的训练任务的运行路径
train_url: " " # 鹏城云脑训练任务下的运行结果的镜像地址,启动训练任务时自动载入,无需设置
data_url: " " # 鹏城云脑训练任务下的数据集obs地址,启动训练任务时自动载入,无需设置
配置评估参数。
split: 'test' # PETA数据集划分的关键字
partition_idx: 0 # PETA数据集划分时的截取序号,需要与训练任务保持一致
image_resize: (224, 224) # 输入网络的图像尺寸
batch_size: 256 # 测试集batch大小
num_work: 2 # 载入测试集的线程数
device_target: "Ascend" # 设备类型
train_mode: 'test' # 数据集处理,指定为评估模式
peta_dataset_mat_dir: './data/PETA.mat' # PETA.mat的绝对地址
image_path: './data/images' # 行人图像文件夹images的路径
ckpt_path: './checkpoint/Deepmar_Distributed_Epoch_400_.ckpt' # 所要测试的ckpt模型的路径
enable_pengcheng_cloud: 1 # 运行环境是否为鹏城云脑的训练任务
workroot: '/home/work/user-job-dir' # 鹏城云脑的训练任务的运行路径
train_url: " " # 鹏城云脑训练任务下的运行结果的镜像地址,启动训练任务时自动载入,无需设置
data_url: " " # 鹏城云脑训练任务下的数据集obs地址,启动训练任务时自动载入,无需设置
更多配置细节请参考脚本train.py和eval.py
。
Ascend处理器环境运行
修改路径和相关参数后,运行训练示例
cd scripts
bash run_standalone_train_ascend.sh [DEVICE_ID] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [PRETRAIN_CHECHPOINT] [SAVE_CKPT_DIR]
# example: bash run_standalone_train_ascend.sh 0 /~/data/PETA.mat ~/data/images ~/resnet50_imagenet2012.ckpt ./ckpt_standalone
上述python命令将在后台运行,您可以通过train.log文件查看结果。训练结束后,您可在./model脚本文件夹下找到检查点文件。所记录的损失值形如:
epoch time:10734.608 ms,per step time:18.102 ms
epoch:5 step:593, loss is 1.145705
epoch time:10752.180 ms, per step time:18.132 ms epoch:6 step:593, loss is 1,1921978 ...
Ascend处理器环境运行
对于分布式, 训练需要提前创建JSON格式的hccl配置文件. 请遵循以下链接中的说明:
https://gitee.com/mindspore/models/tree/master/utils/hccl_tools
运行分布式训练示例
cd scripts
bash run_distribute_train_ascend.sh [DEVICE_NUM] [RANK_TABLE_FILE] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [PRETRAIN_CHECHPOINT] [SAVE_CKPT_DIR]
# example:bash run_distribute_train_ascend.sh 8 ~/hccl_rank_table.json ~/data/PETA.mat ~/data/images ~/resnet50_imagenet2012.ckpt ./ckpt_distribute
上述shell脚本将在后台运行分布训练。您可以通过/train_parallelX/trainX.log文件查看结果。所记录的损失值形如:
epoch time:1655.048 ms,per step time:22.366 ms
epoch:8 step:74, loss is 0.28529447 ...
Ascend环境运行
在运行以下命令之前将 ckpt_path 设置为所要测试的ckpt模型的路径
cd scripts
bash run_eval_ascend.sh [DEVICE_ID] [PETA_DATASET_MAT_DIR] [IMAGE_PATH] [CHPT_PATH]
# example:bash run_eval_ascend.sh 0 ~/data/PETA.mat ~/data/images ./ckpt_distribute/Deepmar_Distributed_Epoch_500_.ckpt
测试数据集的准确性如下:
Test result, Label_acc_avg: 0.8282586813643243
python export.py --ckpt_file [CKPT_PATH] --file_name [FILE_NAME] --file_format [FILE_FORMAT]
参数ckpt_file
为必填项,file_format
选为 "MINDIR"
在执行推理前,mindir
文件必须通过export.py
脚本导出。目前peta
数据集仅支持batch_size
为1的推理。
# 昇腾310 推理
bash run_infer_310.sh [MINDIR_PATH] [DATASET_NAME] [DATASET_PATH] [DEVICE_ID]
# bash run_infer_310.sh ../deepmar_model/deepmar.mindir 'peta' ../data/ 0
数据集结构说明:
├── data // 数据集路径
├──images // 数据集图片子路径
│ ├──00001.png
│ ├──00002.png
│ ...
│ ├──18999.png
│ ├──19000.png
├──PETA.mat // PETA数据集标签文件
MINDIR_PATH
: mindir
文件路径
DATASET_NAME
: 使用的推理数据集名称,默认为peta
DATASET_PATH
: 推理数据集data路径。该路径下应包含images文件夹和PETA.mat文件。
DEVICE_ID
: 可选,默认值为0
Test result , Label_acc_avg: 0.8283114130655239
参数 | Ascend |
---|---|
模型版本 | DeepMar |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
版本 | MindSpore 1.5.1 |
数据集 | PETA训练集 |
训练参数 | 单卡: epoch=500, batch_size=16, lr=0.1 八卡: epoch=500, batch_size=16, lr=0.1 |
优化器 | SGD |
损失函数 | 带损失权重的BCEloss |
输出 | 概率 |
损失 | 0.0001 |
速度 | 单卡:19毫秒/步;八卡:23毫秒/步; |
微调检查点 | 270M (.ckpt文件) |
参数 | Ascend |
---|---|
模型版本 | DeepMar |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
MindSpore 版本 | 1.5.1 |
数据集 | PETA验证集, 7600张图像 |
batch_size | 256 |
输出 | 概率 |
准确性 | 8卡:82.80% |
在deepmar_dataset.py中,我们设置了用于划分PETA数据集的随机数种子。其余的涉及到的随机情况,皆未设置随机数种子。
请浏览官网主页。
No Description
Python C++ Shell Text
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》