你确认删除该任务么?此任务一旦删除不可恢复。
deng 00936cb35b | 1年前 | |
---|---|---|
ascend310_infer | 2 年前 | |
scripts | 2 年前 | |
src | 2 年前 | |
README.md | 1年前 | |
create_imagenet2012_label.py | 2 年前 | |
eval.py | 2 年前 | |
export.py | 2 年前 | |
postprocess.py | 2 年前 | |
train.py | 2 年前 |
这是第一个统一为像素级、区域级和图像级任务设计的骨干网络;可以将梯度从非常深的层直接传播到较浅的层;可以保留并互相细化不同深度的特征。
论文:Shuyang Sun, Jiangmiao Pang, Jianping Shi, Shuai Yi, and Wanli Ouyang. 2018. FishNet: a versatile backbone for image, region, and pixel level prediction. In Proceedings of the 32nd International Conference on Neural Information Processing Systems (NIPS'18). Curran Associates Inc., Red Hook, NY, USA, 762–772.
整个网络分为tail、body和head三个部分,其中tail是现有的如ResNet等CNN,随着网络的深入,特征分辨率会逐渐减小;body部分有多个上采样和细化块的结构,主要用来细化来自tail和body的特征;head则是有着数个下采样和细化块的结构,用来保留和细化来自tail和body的特征,最后一个卷积层的细化特征被用来处理图像分类等最终任务。
使用的数据集:ImageNet-1k
采用混合精度 的训练方法,使用支持单精度和半精度数据来提高深度学习神经网络的训练速度,同时保持单精度训练所能达到的网络精度。混合精度训练提高计算速度、减少内存使用的同时,支持在特定硬件上训练更大的模型或实现更大批次的训练。
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
Ascend处理器环境运行
# 运行训练示例
python train.py --device_id=0 > train.log 2>&1 &
# 运行分布式训练示例
bash ./scripts/run_train.sh [RANK_TABLE_FILE] imagenet
# 运行评估示例
python eval.py --checkpoint_path ./ckpt_0 > ./eval.log 2>&1 &
# 运行推理示例
bash run_infer_310.sh [MINDIR_PATH] [DATA_PATH] [DEVICE_ID]
对于分布式训练,需要提前创建JSON格式的hccl配置文件。
请遵循以下链接中的说明:
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/utils/hccl_tools.
GPU处理器环境运行
为了在GPU处理器环境运行,请将配置文件src/config.py中的device_target从Ascend改为GPU。
# 运行训练示例
python train.py --device_id=0 > train_gpu.log 2>&1 &
# 运行分布式训练示例
bash ./scripts/run_train_gpu.sh 8 0,1,2,3,4,5,6,7
# 运行评估示例
python eval.py --checkpoint_path ./ckpt_0 > ./eval_gpu.log 2>&1 &
├── model_zoo
├── README.md // 所有模型相关说明
├── FishNet99
├── README_CN.md // FishNet99相关说明
├── ascend310_infer // 实现310推理源代码
├── scripts
│ ├──run_eval.sh // Ascend评估的shell脚本
│ ├──run_infer_310.sh // Ascend推理的shell脚本
│ ├──run_train.sh // 分布式到Ascend的shell脚本
│ ├──run_train_gpu.sh // 分布式到GPU处理器的shell脚本
├── src
│ ├──config.py // 参数配置
│ ├──dataset.py // 创建数据集
│ ├──fishnet_ms.py // FishNet99架构
├── eval.py // 评估脚本
├── export.py // 将checkpoint文件导出到air/mindir
├── postprocess.py // 310推理后处理脚本
├── train.py // 训练脚本
在config.py中可以同时配置训练参数和评估参数。
配置FishNet99和ImageNet-1k数据集。
'name':'imagenet' # 数据集
'pre_trained':'False' # 是否基于预训练模型训练
'num_classes':1000 # 数据集类数
'lr_init':0.05 # 初始学习率,Ascned单卡训练时设置为0.05,Ascned八卡并行训练时设置为0.4,GPU单卡训练时设置为0.05,GPU双卡并行训练时设置为0.1
'batch_size':128 # 训练批次大小
'epoch_size':160 # 总计训练epoch数,其中GPU双卡并行训练时设置为110
'T_max':150 # 学习率衰减相关参数,其中GPU双卡并行训练时设置为100
'momentum':0.9 # 动量
'weight_decay':1e-4 # 权重衰减值
'image_height':224 # 输入到模型的图像高度
'image_width':224 # 输入到模型的图像宽度
'data_path':'/data/ILSVRC2012_train/' # 训练数据集的绝对全路径
'val_data_path':'/data/ILSVRC2012_val/' # 评估数据集的绝对全路径
'device_target':'Ascend' # 运行设备
'device_id':0 # 用于训练或评估数据集的设备ID使用run_train.sh进行分布式训练时可以忽略。
'keep_checkpoint_max':30 # 最多保存30个ckpt模型文件
'checkpoint_path':'./ckpt_0/train_fishnet99_imagenet-146_10009.ckpt' # checkpoint文件保存的绝对全路径
更多配置细节请参考脚本config.py
。
Ascend处理器环境运行
python train.py --device_id=0 > train.log 2>&1 &
上述python命令将在后台运行,可以通过生成的train.log文件查看结果。
训练结束后,可以在默认脚本文件夹下找到检查点文件,采用以下方式得到损失值:
# grep "loss is " train.log
...
epoch: 8 step: 10009, loss is 3.0276418
epoch: 9 step: 10009, loss is 3.0397775
...
GPU处理器环境运行
为了在GPU处理器环境运行,请将配置文件src/config.py中的device_target从Ascend改为GPU。
python train.py --device_id=0 > train_gpu.log 2>&1 &
上述python命令将在后台运行,可以通过生成的train_gpu.log文件查看结果。
训练结束后,可以在默认./ckpt_0/脚本文件夹下找到检查点文件。
Ascend处理器环境运行
bash ./scripts/run_train.sh [RANK_TABLE_FILE] imagenet
上述shell脚本将在后台运行分布训练。
GPU处理器环境运行
为了在GPU处理器环境运行,请将配置文件src/config.py中的device_target从Ascend改为GPU。
bash ./scripts/run_train_gpu.sh 2 0,1
上述shell脚本将在后台运行分布训练。可以在生成的train文件夹中查看结果。
在Ascend环境运行时评估ImageNet-1k数据集
“./ckpt_0”是保存了训练好的.ckpt模型文件的目录。
python eval.py --checkpoint_path ./ckpt_0 > ./eval.log 2>&1 &
OR
bash ./scripts/run_eval.sh
在GPU处理器环境运行时评估ImageNet-1k数据集
“./ckpt_0”是保存了训练好的.ckpt模型文件的目录。
python eval.py --checkpoint_path ./ckpt_0 > ./eval_gpu.log 2>&1 &
将checkpoint文件导出成mindir格式模型。
python export.py --ckpt_file [CKPT_FILE]
在进行推理之前我们需要先导出模型。mindir可以在任意环境上导出,air模型只能在昇腾910环境上导出。以下展示了使用mindir模型执行推理的示例。
在昇腾310上使用ImageNet-1k数据集进行推理
推理的结果保存在scripts目录下,在acc.log日志文件中可以找到类似以下的结果。
# Ascend310 inference
bash run_infer_310.sh [MINDIR_PATH] [DATA_PATH] [DEVICE_ID]
Total data: 50000, top1 accuracy: 0.78242, top5 accuracy: 0.94042.
参数 | Ascend | GPU |
---|---|---|
模型版本 | FishNet99 | FishNet99 |
资源 | Ascend 910 | Tesla V100-32G |
上传日期 | 2021-07-31 | 2021-07-31 |
MindSpore版本 | 1.2.0 | 1.2.0 |
数据集 | ImageNet-1k,5万张图像 | ImageNet-1k,5万张图像 |
训练参数 | epoch=160, batch_size=128, lr_init=0.05(单卡为0.05,八卡为0.4) | epoch=160(单卡160,双卡110), T_max=150(单卡150,双卡100), batch_size=128, lr_init=0.05(单卡0.05,双卡0.1) |
优化器 | Momentum | Momentum |
损失函数 | Softmax交叉熵 | Softmax交叉熵 |
输出 | 概率 | 概率 |
分类准确率 | 单卡:top1:78.24%, top5:94.03%;八卡:top1:78.33%, top5:93.96% | 单卡:top1:78.12%, top5:94.13%;双卡:top1:77.97%, top5:93.98% |
速度 | 单卡:132毫秒/步;八卡:135毫秒/步 | 单卡:227毫秒/步;双卡:450毫秒/步 |
总时长 | 单卡:58.5小时/160轮;八卡:7.7小时/160轮 | 单卡:109.6小时/160轮;双卡:69.1小时/110轮 |
参数 | Ascend |
---|---|
模型版本 | FishNet99 |
资源 | Ascend 310 |
上传日期 | 2021-07-31 |
MindSpore版本 | 1.2.0 |
数据集 | ImageNet-1k,5万张图像 |
分类准确率 | top1:78.24%,top5:94.04% |
速度 | Average time 5.17187 ms of infer_count 50000 |
请浏览官网主页。
在FishNet中,图像中所有分辨率的信息都被保留并会针对最终任务进行细化精炼。此外,FishNet的作者观察到现有的模型仍然直接传播从深层到浅层的梯度信息,而FishNet可以很好地解决这个问题。在ImageNet-1k数据集上,FishNet可以用更少的参数超过DenseNet和ResNet的精度。在2018年COCO检测挑战赛的获奖作品中,FishNet作为一个模块被应用。
Python C++ Shell Text
尊敬的启智用户
感谢您一直以来对Openl启智社区AI协作平台的支持。为了保障您的使用权益和确保网络安全,我们于2024年1月份更新了《Openl启智社区AI协作平台使用协议》。更新后的协议明确了用户禁止使用内网穿透工具的条例。您单击“同意并继续”后,便可以继续使用我们的服务。感谢您的合作与理解。
更多协议内容,请参考《Openl启智社区AI协作平台使用协议》