Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
wangzq bb61c19c11 | 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 | |
preprocess.py | 1 year ago | |
requirements.txt | 1 year ago | |
train.py | 1 year ago |
该文提出了一个增强CNN特征辨识力度的损失函数:large margin cosine loss (LMCL)。该损失函数能够增加不同类别的图像特征在特征空间的距离,从而提升CNN的分类能力。
论文:Wang, H., Wang, Y., Zhou, Z., Ji, X., Gong, D., Zhou, J., ... & Liu, W. (2018). Cosface: Large margin cosine loss for deep face recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 5265-5274).
为了进一步增加不同类别间的特征在特征空间上的距离,CosFace在原始softmax基础上引入了一个Margin来约束类间特征,致使类间特征在特征空间中的距离更大,从而增强重识别精度。
使用的数据集:CASIA-WebFace
./data/WebFace_122/images
├── 0
│ ├──0_1.jpg
│ ├──0_2.jpg
│ ├──0_3.jpg
│ ├──0_4.jpg
│ ├──......
├── 1
├── 2
├── 3
├──......
使用的数据集: LFW
./data/LFW_112
├── lfw_align_112
│ ├── Aaron_Peirsol
│ ├──Aaron_Peirsol_0001.jpg
│ ├──Aaron_Peirsol_0002.jpg
│ ├──Aaron_Peirsol_0003.jpg
│ ├──......
│ ├── Aaron_Guiel
│ ├── Aaron_Eckhart
│ ├── Aaron_Patterson
│ ├──......
├── pairs.txt
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
Ascend处理器环境运行
# 训练时,需要修改以下参数:
webface_dir: "./data/WebFace_122/images" # CASIA-WebFace数据集图像文件夹的路径
save_ckpt_dir: "./model" # ckpt模型保存目录
lfw_path: "./data/LFW_112" # LFW数据集, 包含图像文件夹和标签文件的上一级目录
# 评估时,需要修改以下参数:
feature_save_dir: "./lfw_rusult.mat" # LFW数据集特征提取后的存放路径
lfw_path: "./data/LFW_112" # LFW数据集, 包含图像文件夹和标签文件的上一级目录
ckpt_path: "./checkpoint/CosFace_Epoch_98_batsh_128_ckpt_0__32s__040m.ckpt" # ckpt模型的路径
# 运行训练示例
cd scripts
bash run_standalone_train_ascend.sh [DEVICE_ID] [IMAGE_PATH] [TEST_IMAGE_PATH] [SAVE_CKPT_DIR]
# example: bash run_standalone_train_ascend.sh 0 ~/faces_webface_112x112/images ~/LFW_112 ./ckpt_standalone
# 运行分布式训练示例
cd scripts
bash run_distribute_train_ascend.sh [DEVICE_NUM] [RANK_TABLE_FILE] [IMAGE_PATH] [TEST_IMAGE_PATH] [SAVE_CKPT_DIR]
# example: bash run_distribute_train_ascend.sh 8 ~/hccl_8p.json ~/faces_webface_112x112/images ~/LFW_112 ./ckpt_distribute
# 运行评估示例
cd scripts
bash run_eval_ascend.sh [DEVICE_ID] [TEST_IMAGE_PATH] [CKPT_FILES]
# example: bash run_eval_ascend.sh 0 ~/LFW_112 ./ckpt_distribute/CosFace_Distributed_Epoch_100_.ckpt
对于分布式, 训练需要提前创建JSON格式的hccl配置文件. 请遵循以下链接中的说明:
https://gitee.com/mindspore/models/tree/master/utils/hccl_tools
在 OpenI(启智社区) 进行训练 (如果你想在OpenI(启智社区) 上运行,可以参考以下文档 OpenI)
在 OpenI 上训练 CASIA-WebFace 数据集
# (1) 创建个人项目,上传相关代码文件,将CASIA-WebFace数据集上传至云脑,
# 或直接使用云脑上的数据集[WebFace_122.zip](<https://git.openi.org.cn/wangzq/data_collection/datasets>)
# (2) 创建调试任务,选择载入CASIA-WebFace数据集,获得CASIA-WebFace数据集的软链接
# (3) 在train.py文件中,将获得的软链接写入参数data_soft_link,通过软链接方式载入数据集。(因数据集大,若以镜像obs方式载入,速度极慢且容易失败)
# (4) 执行a或者b
# a. 在 train.py 文件中设置 "enable_pengcheng_cloud = 1"
# 在 train.py 文件中设置 "workroot = '/home/work/user-job-dir'"
# 在 train.py 文件中设置 "data_is_soft_ink" = 1, 启用软链接方式载入数据集
# 在 train.py 文件中设置 "is_distributed = 1" 或 "is_distributed = 0",决定是否开启分布式训练
# 在 train.py 文件中设置 其他参数
# 随后新建训练任务,选择npu类型
#
# b. 首先新建训练任务,选择npu类型
# 在网页上设置 "enable_pengcheng_cloud = 1"
# 在网页上设置 "workroot = '/home/work/user-job-dir'"
# 在 train.py 文件中设置 "data_is_soft_ink" = 1, 启用软链接方式载入数据集
# 在网页上设置 "is_distributed = 1" 或 "is_distributed = 0",决定是否开启分布式训练
# 在网页上设置 其他参数
# (5) 在网页上设置启动文件为 "train.py"
# (6) 在网页上设置任意"数据集"(软链接载入数据集方式下)、并设置相应的"设备规格"、"mindspore版本"等
# (7) 启动训练任务
# (8) 在"日志"中查看训练信息,训练结束后在"结果下载"处下载模型
在 OpenI 上评估 LFW 数据集
# (1) 创建个人项目,上传相关代码文件和训练好的权重文件,将LFW数据集上传至云脑
# (2) 执行a或者b
# a. 在 eval.py 文件中设置 "enable_pengcheng_cloud = 1"
# 在 eval.py 文件中设置 "workroot = '/home/work/user-job-dir'"
# 在 eval.py 文件中设置 代码仓中权重的存放路径",如"ckpt_path = './checkpoint/CosFace_Epoch_98_batsh_128_ckpt_0__32s__040m.ckpt'"
# 在 eval.py 文件中设置 其他参数
# 随后新建训练任务,选择npu类型
#
# b. 首先新建训练任务,选择npu类型
# 在网页上设置 "enable_pengcheng_cloud = 1"
# 在网页上设置 "workroot = '/home/work/user-job-dir'"
# 在网页上设置 代码仓中权重的存放路径",如"ckpt_path = './checkpoint/CosFace_Epoch_98_batsh_128_ckpt_0__32s__040m.ckpt'"
# 在网页上设置 其他参数
# (4) 在网页上设置启动文件为 "eval.py"
# (6) 在网页上设置"数据集"为所上传的LFW数据集的压缩文件、并设置相应的"设备规格"、"mindspore版本"等
# (7) 启动训练任务
# (8) 在"日志"中查看评估精度信息
├── model_zoo
├── README.md // 所有模型相关说明
├── CosFace
├── README.md // Cosface相关说明
├── ascend310_infer // 实现310推理源代码
├── scripts
│ ├──run_infer_310.sh // 执行310推理的shell脚本
│ ├──run_distribute_train.sh // 分布式到Ascend训练的shell脚本
│ ├──run_eval_standalone_Ascend.sh // Ascend评估的shell脚本
│ ├──run_standalone_train_ascend.sh // 单卡Ascend训练的shell脚本
├── src
│ ├──create_callback.py // 回调函数
│ ├──CosFace.py // CosFace网络结构
│ ├──CosFace_dataset.py // 数据处理
│ ├──lr_schedule.py // 动态学习率
├── requirements.txt
├── checkpoint // 评估脚本的ckpt文件存放目录
├── postprocess.py // 310推理精度计算脚本
├── preprocess.py // 310推理数据预处理脚本
├── train.py // 训练脚本
├── eval.py // 评估脚本
├── export.py // 将checkpoint文件导出成mindir
在train.py中配置训练参数,在eval.py中配置评估参数
配置训练参数。
num_s: 32.0 # 缩放因子
num_m: 0.40 # 余弦裕度
image_resize: (112,112) # 输入网络的图像尺寸
num_class: 10572 # 训练集的类别数
batch_size: 128 # 训练集的batch大小
momentum: 0.9 # momentum因子
init_lr: 0.1 # 初始学习率
epoch_size: 100 # 训练周期
num_work: 2 # 载入数据集的线程数
epoch_star_save: 50 # 开始保存ckpt模型的epoch数
epoch_per_save: 2 # 保存ckpt模型的epoch间隔数
weight_decay: 5e-4 # 网络的权重衰减系数
lr_strategy: "Multistep" # 学习率模式
device_target: "Ascend" # 设备类型
dataset_sink_mode: 1 # 是否数据下沉
is_distributed: 1 # 是否分布式
save_ckpt_device: 0 # 保存ckpt的设备序号
save_ckpt_dir: './model' # 保存ckpt模型的目录
webface_dir: './data/WebFace_122/images' # CASIA-WebFace数据集的图像文件夹images的路径
enable_pengcheng_cloud: 1 # 运行环境是否为鹏城云脑的训练任务
data_is_soft_ink: 1 # 是否通过软链接方式载入训练集
workroot: '/home/work/user-job-dir' # 鹏城云脑的训练任务的运行环境
train_url: " " # 鹏城云脑训练任务下的运行结果的镜像地址,启动训练任务时自动载入,无需设置
data_url: " " # 鹏城云脑训练任务下的数据集obs地址,启动训练任务时自动载入,无需设置
data_soft_link: " " # 训练集的软链接,通过调试任务获取
配置评估参数。
batch_size: 256 # 测试集batch大小
num_work: 2 # 载入测试集的线程数
device_target: "Ascend" # 设备类型
num_class: 10572 # 训练时训练集的类别数
image_resize: (112,112) # 输入网络的图像尺寸
feature_save_dir: './lfw_rusult.mat' # LFW数据集特征提取后的存放路径
lfw_path: './data/LFW_112' # LFW数据集, 包含图像文件夹和标签文件的上一级目录
ckpt_path: './checkpoint/CosFace_Epoch_98_batsh_128_ckpt_0__32s__040m.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] [IMAGE_PATH] [TEST_IMAGE_PATH] [SAVE_CKPT_DIR]
上述python命令将在后台运行,您可以通过train.log文件查看结果。训练结束后,您可在./model脚本文件夹下找到检查点文件。所记录的损失值形如:
epoch time:0.308 min,per step time:35.435 ms
epoch:1 step:479, loss is 21.010275
...
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] [IMAGE_PATH] [TEST_IMAGE_PATH] [SAVE_CKPT_DIR]
上述shell脚本将在后台运行分布训练。您可以通过/train_parallelX/trainX.log文件查看结果。所记录的损失值形如:
epoch time:0.308 min,per step time:38.598 ms
epoch:4 step:479, loss is 10.349318
...
Ascend环境运行
在运行以下命令之前将 ckpt_path 设置为所要测试的ckpt模型的路径
cd scripts
bash run_eval_ascend.sh [DEVICE_ID] [TEST_IMAGE_PATH] [CKPT_PATH]
测试数据集的准确性如下:
Test result, AVE: 99.27
python export.py --ckpt_file [CKPT_PATH] --file_name [FILE_NAME] --file_format [FILE_FORMAT]
参数ckpt_file
为必填项,file_format
选为 "MINDIR"
在执行推理前,mindir
文件必须通过export.py
脚本导出。目前LFW
数据集仅支持batch_size
为1的推理。
# 昇腾310 推理
bash run_infer_310.sh [MINDIR_PATH] [DATASET_NAME] [DATASET_PATH] [DEVICE_ID]
# bash run_infer_310.sh ../Cosface_mindir.mindir 'LFW' ../data/LFW_112/ 0
MINDIR_PATH
: mindir
文件路径
DATASET_NAME
: 使用的推理数据集名称,默认为LFW
DATASET_PATH
: 推理数据集目录路径
DEVICE_ID
: 可选,默认值为0
AVE 99.28
参数 | Ascend |
---|---|
模型版本 | CosFace |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
版本 | MindSpore 1.5.1 |
数据集 | CASIA-WebFace |
训练参数 | 单卡: epoch=100, batch_size=128, lr=0.1 八卡: epoch=100, batch_size=128, lr=0.1 |
优化器 | SGD |
损失函数 | CosFace |
输出 | 概率 |
损失 | 4.0~5.0 |
速度 | 单卡:35毫秒/步;八卡:38毫秒/步; |
微调检查点 | 27M (.ckpt文件) |
参数 | Ascend |
---|---|
模型版本 | CosFace |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
MindSpore 版本 | 1.5.1 |
数据集 | LFW数据集, 13233张图像 |
batch_size | 256 |
输出 | 概率 |
准确性 | 8卡:99.27% |
网络的初始参数均为随即初始化。
请浏览官网主页。
提出了一个增强CNN特征辨识力度的损失函数:large margin cosine loss (LMCL)。该损失函数能够增加不同类别的图像特征在特征空间的距离,从而提升CNN的分类能力。
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》