建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
昇腾百科 主题:556帖子:651

【经验案例】

基于昇腾AI处理器的darknet yolov3模型迁移指导

ningwk 2020/11/23 2294

背景:yolov3是目前使用较为广泛的一种目标检测模型,本文描述了如何将开源darknet yolov3模型转换为昇腾AI处理器上可加载、运行的om模型;并基于华为给出的推理Sample代码,使用转换后的模型进行了推理。

使用场景:使用华为昇腾AI处理器进行darknet yolov3推理。

关键词:昇腾AI处理器,yolov3,推理


1. 将Darknet yolov3.weight转换成pb

1.1 下载代码

git clone https://github.com/mystic123/tensorflow-yolo-v3.git

cd tensorflow-yolo-v3/

1.2 Weight文件转pb模型

1.2.1 修改归一化的操作(yolo_v3.py中):

image.png

1.2.2 修改anchors(yolo_v3.py中)

根据训练时配置的anchors参数修改_ANCHORSyolo_v3.py中):

image.png

1.2.3 转换为pb模型

命令如下:

python convert_weights_pb.py --size 608 --class_names /root/hanqin/jiyuan/bjyb.names --weights_file /root/hanqin/jiyuan/bjyb_18000.weights --output_graph /root/hanqin/jiyuan/bjyb_18000_frozen_size608_anchors.pb

根据模型weights文件和class_names修改相应的路径

--class_names指定训练的类别的名字

--weights_file指定权重文件

--weights_file指定输出的pb名字

--size 指定模型的输入大小,默认为416,如果是608则需要使用改参数指定


2. 将pb模型转为om模型

2.1 把转换后的pb模型拷贝至Atlas的开发环境上;(如果转换pb也在Atlas的开发环境上则跳过该步骤)

2.2 使用华为ATC工具,将第三方TF pb模型转换为华为昇腾AI处理器上可运行的om模型,需要通过--out_nodes指定输出节点的名字

atc --framework=3 --soc_version=Ascend310 --insert_op_conf=./aipp_yolov3_608_608.cfg --input_shape="inputs:1,608,608,3" --out_nodes="detector/yolo-v3/Conv_6/BiasAdd:0;detector/yolo-v3/Conv_14/BiasAdd:0;detector/yolo-v3/Conv_22/BiasAdd:0" --model=./bjyb_17000_frozen_size608_anchors.pb --output=./bjyb_17000_frozen_size608_anchors

生成的om文件由--output参数指定,如yolov3-voc_person_frozen_out.om即为OM文件

--model: 指定要转换的pb文件

--framework : 指定model的框架,tf3

--output: 指定输出的om文件名字,会自动生成.om后缀

--insert_op_conf:指定配置aipp的配置文件(可以使用ApiSamples/src/Samples/InferObjectDetection/data/models/yolov3/aipp_yolov3.cfg中的配置文件)

--input_shape 指定输入的尺寸,需要注意这个大小需要跟转换pb –size 参数指定的大小一致

--out_nodes: 指定om的输出的节点

注意aipp的配置文件,需要根据对齐方式调整src_image_size_w/h,如下:

image.png


参考:

ApiSamples获取链接:

https://www.huaweicloud.com/ascend/apps/applicationDetails/60172215


3. Sample代码修改、测试

Yolov3的例子代码在ApiSamples/src/Samples/InferObjectDetection下。

修改代码前把转换获得的om,及类别名字的文件*.names拷贝至ApiSamples/src/Samples/InferObjectDetection/data/models/yolov3下。


3.修改class_numanchors参数、以及box的阈值,如下:

image.png


3.2 修改配置文件,model_path、width、height如下

image.png


3.3 在samples/src/Samples/InferObjectDetection/include/AclProcess.h下修改类别名的路径,注意类别名的文件第一行为注释 

image.png


3.4 ApiSamples/src/Samples/InferObjectDetection/下执行./build.sh,进行编译

3.5 如果没有问题,生产的可执行文件在dist

3.6 测试:

    cd dist

    ./main -t 1 -i /home/HwHiAiUser/jiyuan/retrained/dvpp_pics/yaban_000199.jpg

    -i 指定要测试的图片或图片的文件夹:

image.png


4 参考链接

(1)yolov3.pb模型转换指导:

https://bbs.huaweicloud.com/forum/thread-45383-1-1.html

(2)darknet yolov3转换成pb参考指导:

https://blog.csdn.net/heiheiya/article/details/91437196

(3)darknet yolov3转换成pb的代码的链接:

https://github.com/mystic123/tensorflow-yolo-v3

(4)yolov3.weights转换为tensorflow的ckpt或者pb

https://blog.csdn.net/heiheiya/article/details/91437196


5 Tensorflow 安装

保证pip可以访问外网:

pip3 install tensorflow-1.15.0-cp37-cp37m-linux_aarch64.whl –user

pip3 install pillow --user

安装过程中如出现如下错误:

image.png

可尝试通过升级pip3解决:

pip3 install --upgrade pip --user


回复2

守恒mzh
1 0
2020/11/26 10:54

请问您转成功的DDK是在1.3, 还是2.1.0下实现的?

ningwk

2020-11-26 22:08

acl架构下
... 展开
hiCrystal
0 0
2021/5/13 09:52

请问你的硬件设备是什么?这些操作在Atlas200DK上可行吗?

上划加载中
直达楼层
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

采纳成功

您已采纳当前回复为最佳回复

ningwk

发帖: 21粉丝: 3

级别 : 版主

发消息 + 关注

更新于2020年11月24日 10:05:36 2294 2
直达本楼层的链接
楼主
显示全部楼层
[经验案例] 基于昇腾AI处理器的darknet yolov3模型迁移指导

背景:yolov3是目前使用较为广泛的一种目标检测模型,本文描述了如何将开源darknet yolov3模型转换为昇腾AI处理器上可加载、运行的om模型;并基于华为给出的推理Sample代码,使用转换后的模型进行了推理。

使用场景:使用华为昇腾AI处理器进行darknet yolov3推理。

关键词:昇腾AI处理器,yolov3,推理


1. 将Darknet yolov3.weight转换成pb

1.1 下载代码

git clone https://github.com/mystic123/tensorflow-yolo-v3.git

cd tensorflow-yolo-v3/

1.2 Weight文件转pb模型

1.2.1 修改归一化的操作(yolo_v3.py中):

image.png

1.2.2 修改anchors(yolo_v3.py中)

根据训练时配置的anchors参数修改_ANCHORSyolo_v3.py中):

image.png

1.2.3 转换为pb模型

命令如下:

python convert_weights_pb.py --size 608 --class_names /root/hanqin/jiyuan/bjyb.names --weights_file /root/hanqin/jiyuan/bjyb_18000.weights --output_graph /root/hanqin/jiyuan/bjyb_18000_frozen_size608_anchors.pb

根据模型weights文件和class_names修改相应的路径

--class_names指定训练的类别的名字

--weights_file指定权重文件

--weights_file指定输出的pb名字

--size 指定模型的输入大小,默认为416,如果是608则需要使用改参数指定


2. 将pb模型转为om模型

2.1 把转换后的pb模型拷贝至Atlas的开发环境上;(如果转换pb也在Atlas的开发环境上则跳过该步骤)

2.2 使用华为ATC工具,将第三方TF pb模型转换为华为昇腾AI处理器上可运行的om模型,需要通过--out_nodes指定输出节点的名字

atc --framework=3 --soc_version=Ascend310 --insert_op_conf=./aipp_yolov3_608_608.cfg --input_shape="inputs:1,608,608,3" --out_nodes="detector/yolo-v3/Conv_6/BiasAdd:0;detector/yolo-v3/Conv_14/BiasAdd:0;detector/yolo-v3/Conv_22/BiasAdd:0" --model=./bjyb_17000_frozen_size608_anchors.pb --output=./bjyb_17000_frozen_size608_anchors

生成的om文件由--output参数指定,如yolov3-voc_person_frozen_out.om即为OM文件

--model: 指定要转换的pb文件

--framework : 指定model的框架,tf3

--output: 指定输出的om文件名字,会自动生成.om后缀

--insert_op_conf:指定配置aipp的配置文件(可以使用ApiSamples/src/Samples/InferObjectDetection/data/models/yolov3/aipp_yolov3.cfg中的配置文件)

--input_shape 指定输入的尺寸,需要注意这个大小需要跟转换pb –size 参数指定的大小一致

--out_nodes: 指定om的输出的节点

注意aipp的配置文件,需要根据对齐方式调整src_image_size_w/h,如下:

image.png


参考:

ApiSamples获取链接:

https://www.huaweicloud.com/ascend/apps/applicationDetails/60172215


3. Sample代码修改、测试

Yolov3的例子代码在ApiSamples/src/Samples/InferObjectDetection下。

修改代码前把转换获得的om,及类别名字的文件*.names拷贝至ApiSamples/src/Samples/InferObjectDetection/data/models/yolov3下。


3.修改class_numanchors参数、以及box的阈值,如下:

image.png


3.2 修改配置文件,model_path、width、height如下

image.png


3.3 在samples/src/Samples/InferObjectDetection/include/AclProcess.h下修改类别名的路径,注意类别名的文件第一行为注释 

image.png


3.4 ApiSamples/src/Samples/InferObjectDetection/下执行./build.sh,进行编译

3.5 如果没有问题,生产的可执行文件在dist

3.6 测试:

    cd dist

    ./main -t 1 -i /home/HwHiAiUser/jiyuan/retrained/dvpp_pics/yaban_000199.jpg

    -i 指定要测试的图片或图片的文件夹:

image.png


4 参考链接

(1)yolov3.pb模型转换指导:

https://bbs.huaweicloud.com/forum/thread-45383-1-1.html

(2)darknet yolov3转换成pb参考指导:

https://blog.csdn.net/heiheiya/article/details/91437196

(3)darknet yolov3转换成pb的代码的链接:

https://github.com/mystic123/tensorflow-yolo-v3

(4)yolov3.weights转换为tensorflow的ckpt或者pb

https://blog.csdn.net/heiheiya/article/details/91437196


5 Tensorflow 安装

保证pip可以访问外网:

pip3 install tensorflow-1.15.0-cp37-cp37m-linux_aarch64.whl –user

pip3 install pillow --user

安装过程中如出现如下错误:

image.png

可尝试通过升级pip3解决:

pip3 install --upgrade pip --user


举报
分享

分享文章到朋友圈

分享文章到微博

采纳成功

您已采纳当前回复为最佳回复

守恒mzh

发帖: 1粉丝: 0

发消息 + 关注

发表于2020年11月26日 10:54:21
直达本楼层的链接
沙发
显示全部楼层

请问您转成功的DDK是在1.3, 还是2.1.0下实现的?

评论
ningwk 2020-11-26 22:08 评论

acl架构下

... 查看全部
点赞 评论 引用 举报

采纳成功

您已采纳当前回复为最佳回复

hiCrystal

发帖: 42粉丝: 1

发消息 + 关注

发表于2021年05月13日 09:52:39
直达本楼层的链接
板凳
显示全部楼层

请问你的硬件设备是什么?这些操作在Atlas200DK上可行吗?

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册

结贴

您对问题的回复是否满意?
满意度
非常满意 满意 一般 不满意
我要反馈
0/200