Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered.
YangWeijiang d04aef96d9 | 1 year ago | |
---|---|---|
ascend310_infer | 1 year ago | |
scripts | 1 year ago | |
src | 1 year ago | |
README.md | 1 year ago | |
dataprocess.py | 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 |
论文中提出了一种高效的可变组卷积神经网络,称为VargfaceNet,来帮助提高人脸识别任务中的轻量级网络的判别和泛化能力。
论文:Yan, M., Zhao, M., Xu, Z., Zhang, Q., Wang, G., & Su, Z. (2019). Vargfacenet: An efficient variable group convolutional neural network for lightweight face recognition. In Proceedings of the IEEE/CVF International Conference on Computer Vision Workshops (pp. 0-0).
VarGFaceNet主要特点如下:
(1)为尽可能多的提高辨别能力来支持区分数百万个身份,将VarGNet网络开始时使用核为3×3和步长为2的卷积层,转为核为3×3和步长为1的卷积层,使特征大小与输入大小保持相同。
(2)与VarGNet中的基础模块不同,在normal black中添加了SE模块,并使用PReLU代替ReLU来提高基础模块的辨别能力。
(3)为了避免重要信息的丢失,在最后一个卷积层后扩展通道数,以尽可能多地保留信息。然后采用变群卷积和逐点卷积,在保持信息的同时减少参数和计算量。
使用的数据集:MS1M
.jpg
格式python dataprocess.py --include [MA1M_PATH] --output [IMAGES_PATH]
# example: python dataprocess.py --include ~/ms1m/ --output ~/train
参数include
为包含train.idx
和train.rec
的文件夹路径,output
为图片转存路径。得到转换后MS1M。
./data/MS1M_122/train
├── 0_5179511
│ ├── 0.jpg
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── ......
├── 0_5179512
├── 0_5179513
├── 0_5179514
├── ......
使用的数据集: 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处理器环境运行
# 训练时,需要修改以下参数:
ms1m_dir: "./data/train" # MS1M数据集图像文件夹的路径
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/VarGFace_Epoch_50_batsh_128_ckpt_0__32s__035m.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 ~/MS1M_112x112/train ~/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 ~/MS1M_112x112/train ~/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/VarGFaceNet_Distributed_Epoch_50_.ckpt
对于分布式, 训练需要提前创建JSON格式的hccl配置文件. 请遵循以下链接中的说明:
https://gitee.com/mindspore/models/tree/master/utils/hccl_tools.
在 ModelArts(鹏城云脑) 进行训练 (如果你想在modelarts(鹏城云脑) 上运行,可以参考以下文档 modelarts)
在 ModelArts 上训练 MS1M 数据集
# (1) 创建个人项目,上传相关代码文件,将MS1M数据集上传至云脑,
# 或直接使用云脑上的数据集[ms1m.tar.gz](<https://git.openi.org.cn/xiaomabufei/cosineface/datasets>)
# (2) 创建调试任务,选择载入MS1M数据集,获得MS1M数据集的软链接
# (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) 在"日志"中查看训练信息,训练结束后在"结果下载"处下载模型
在 ModelArts 上评估 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/VarGFace_Epoch_50_batsh_128_ckpt_0__32s__035m.ckpt.ckpt'"
# 在 eval.py 文件中设置 其他参数
# 随后新建训练任务,选择npu类型
#
# b. 首先新建训练任务,选择npu类型
# 在网页上设置 "enable_pengcheng_cloud = 1"
# 在网页上设置 "workroot = '/home/work/user-job-dir'"
# 在网页上设置 代码仓中权重的存放路径",如"ckpt_path = './checkpoint/VarGFace_Epoch_50_batsh_128_ckpt_0__32s__035m.ckpt'"
# 在网页上设置 其他参数
# (4) 在网页上设置启动文件为 "eval.py"
# (6) 在网页上设置"数据集"为所上传的LFW数据集的压缩文件、并设置相应的"设备规格"、"mindspore版本"等
# (7) 启动训练任务
# (8) 在"日志"中查看评估精度信息
├── model_zoo
├── README.md // 所有模型相关说明
├── VarGFaceNet
├── README.md // VarGFaceNet相关说明
├── 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 // 回调函数
│ ├──VarGFace.py // VarGFaceNet网络结构
│ ├──VarGFace_dataset.py // 数据处理
│ ├──lr_schedule.py // 动态学习率
├── requirements.txt
├── checkpoint // 评估脚本的ckpt文件存放目录
├── dataprocess.py // 数据集转换脚本
├── 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: 93431 # 训练集的类别数
batch_size: 128 # 训练集的batch大小
momentum: 0.9 # momentum因子
init_lr: 0.1 # 初始学习率
epoch_size: 50 # 训练周期
num_work: 2 # 载入数据集的线程数
epoch_star_save: 30 # 开始保存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模型的目录
ms1m_dir: './data/train' # MS1M数据集的图像文件夹的路径
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: 93431 # 训练时训练集的类别数
image_resize: (112,112) # 输入网络的图像尺寸
feature_save_dir: './lfw_rusult.mat' # LFW数据集特征提取后的存放路径
lfw_path: './data/LFW_112' # LFW数据集, 包含图像文件夹和标签文件的上一级目录
ckpt_path: './checkpoint/VarGFace_Epoch_50_batsh_128_ckpt_0__32s__035m.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.238 h,per step time:0.114 s
epoch:1 step:3, loss is 15.261816
...
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.161 h,per step time:0.114 s
epoch:12 step:5058, loss is 7.069001
...
Ascend环境运行
在运行以下命令之前将 ckpt_path 设置为所要测试的ckpt模型的路径
cd scripts
bash run_eval_ascend.sh [DEVICE_ID] [TEST_IMAGE_PATH] [CHPT_PATH]
测试数据集的准确性如下:
Test result, AVE: 99.70
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 推理
cd scripts
bash run_infer_310.sh [MINDIR_PATH] [DATASET_NAME] [DATASET_PATH] [DEVICE_ID]
# bash run_infer_310.sh ../VarGFace_mindir.mindir 'LFW' ../data/LFW_112/ 0
MINDIR_PATH
: mindir
文件路径
DATASET_NAME
: 使用的推理数据集名称,默认为LFW
DATASET_PATH
: 推理数据集目录路径
DEVICE_ID
: 可选,默认值为0
AVE 99.67
参数 | Ascend |
---|---|
模型版本 | VarGFaceNet |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
版本 | MindSpore 1.5.1 |
数据集 | MS1M |
训练参数 | 单卡: epoch=70, batch_size=128, lr=0.05 八卡: epoch=70, batch_size=128, lr=0.05 |
优化器 | SGD |
损失函数 | cosloss |
输出 | 概率 |
损失 | 3.0 |
速度 | 单卡:0.1秒/步;八卡:0.1秒/步; |
微调检查点 | 421M (.ckpt文件) |
参数 | Ascend |
---|---|
模型版本 | VarGFaceNet |
资源 | Ascend 910;系统 Euler2.8 |
上传日期 | 2022-6-30 |
MindSpore 版本 | 1.5.1 |
数据集 | LFW数据集, 13233张图像 |
batch_size | 256 |
输出 | 概率 |
准确性 | 8卡:99.68% |
网络的初始参数均为随即初始化。
请浏览官网主页。
一种高效的可变组卷积神经网络,称为VargfaceNet,来帮助提高人脸识别任务中的轻量级网络的判别和泛化能力。
Python C++ Shell Text other
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》