sigmaStar SSC336/SSC338/SSC30K开发笔记之检测网络模型转换和板端运行

SSC336/SSC338/SSC30K开发笔记


前言

SSC336/SSC338/SSC30K 包含了几种衍生型号,片内集成了0.5T@INT8的IPU,支持人工智能模型的开发和应用,本文介绍下检测网络模型转换和板端运行的方法。

SSC336D/Q,分辨率3MP@30FPS,分别内置1Gb和2Gb DDR,带0.5T AI算力。
SSC30KD/KQ,分辨率5MP@30FPS,分别内置1Gb和2Gb DDR,带0.5T AI算力。
SSC338Q,分辨率4K@20FPS,内置2Gb DDR,带0.5T AI算力。
SSC338G,分辨率4K@20FPS,外挂单颗或两颗DDR3,容量最高可达8Gb, 带1T AI算力。
SSC339G,分辨率4K@30FPS,外挂单颗或两颗DDR3,容量最高可达8Gb, 带1T AI算力

一、环境搭建:

1、自己搭建环境:

使用anaconda 建立虚拟环境,切不可直接安装在系统目录下,否则容易造成冲突,导致系统损坏。在虚拟环境下需要满足:python3.5 tensorflow-gpu1.14.0,当前使用GPU版本,运行sigmstar的工具,已经测试OK了。没有GPU就CPU版本tensorflow==1.14.0
在这里插入图片描述
python 3.5
TensorFlow tensorflow-gpu ==1.14.0

GPU版本:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow-gpu1.14.0 numpy1.16.4 scikit-learn Pillow h5py matplotlib psutil scikit-image keras==2.1.4 scikit-build

小工具安装完毕后再单独安装opencv. (Double requirement given: numpy==1.13.3)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python --no-build-isolation

CPU版本:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow1.14.0 numpy1.16.4
opencv-python scikit-learn Pillow h5py matplotlib psutil scikit-image keras==2.1.4 scikit-build

然后再安装以下工具

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple enum34 protobuf six cython pycocotools matplotlib scipy

numpy==1.16.4
enum34==1.1.6
protobuf>=3.8.0
six>=1.12.0
opencv-python>=3.4.0.14
tensorflow==1.14.0
cython>=0.29.13
pycocotools>=2.0.0
matplotlib>=3.0.3
scipy>=1.3.1
pillow==6.1.0

2、使用SDK带的环境:

进入 sgs_docker 环境中,在同一级目录下准备好 SGS_IPU_SDK 和 SGS_Models,如下所示:
在这里插入图片描述
先进入 SGS_IPU_SDK 激活环境,命令如下:
cd SGS_IPU_SDK && source cfg_env.sh

二、模型转换:

Anchor-based 类型的检测网络通常是包含后处理部分,对于后处理有两种处理方案: 方案一:使用 C 自行实现后处理代码;
方案二:使用 SGS 的标准后处理网络,将后处理转换到 Offline 模型里面; 以 SGS_Models/tensorflow/yolo_v3_7 为例。

1、开源网络模型:

这里是已经转换好的离线网络,可以直接加载使用在sigmstar的芯片上。
sourcecode\sdk\verify\mi_demo\source\ipu_release_model\open_source\dla_verify_mbnet_mbssd
在这里插入图片描述
在这里插入图片描述
目前测试过caffe_yolo_v2_fixed.sig_sgsimg.img,ssd_mobilenet_v1,可以正确识别物体。

2、转 SGS Float

(1)、网络转换:

python3 SGS_IPU_SDK/Scripts/ConvertTool/ConvertTool.py tensorflow_graphdef \
--graph_def_file SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7.pb \
--output_file SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_concat.sim \
--input_arrays input \
--output_arrays yolov3/yolo83/BiasAdd,yolov3/yolo95/BiasAdd,yolov3/yolo107/BiasAdd \
--input_shapes 1,608,608,3 \
--input_config SGS_Models/tensorflow/yolo_v3_7/input_config_concat.ini

成功转换后,会在 SGS_Models/tensorflow/yolo_v3_7 目录下生成/yolo_v3_7_concat.sim 文件。

(2)、后处理转换:

后处理代码的目录是:SGS_IPU_SDK/Scripts/postprocess/postprocess_method/,该目录下包含了很多 exmaple,这里我们需要使用 yolo_v3_7_postprocess.py
在这里插入图片描述
转换命令如下:

python3 SGS_IPU_SDK/Scripts/postprocess/postprocess.py \
-n yolo_v3_7_postprocess

3、合并sim 文件:

SGS_IPU_SDK/bin/concat_net \
--mode append \
--transform SGS_IPU_SDK/cfg/CompilerConfig.txt \
--input_config SGS_Models/tensorflow/yolo_v3_7/input_config.ini \
--model1 SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_concat.sim \
--model2 SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_postprocess.sim \
--output SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_float.sim

通过 concat_net 工具,可以将前面转换的两个网络合并为一个网络,合并后的网络会直接输出最终的检测结果。

4、转 SGS Fixed:

python3 SGS_IPU_SDK/Scripts/calibrator/calibrator.py \
--input_config SGS_Models/tensorflow/yolo_v3_7/input_config.ini \
-i SGS_Models/resource/detection/coco2017_calibration_set32 \
-m SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_float.sim \
-c Detection \
-n yolo_v3_7

成 功 转 换 后 , 会 在 SGS_Models/tensorflow/yolo_v3_7 目 录 下 生 成yolo_v3_7_fixed.sim 文件,日志如下:
在这里插入图片描述

5、转 SGS Offline:

python3 SGS_IPU_SDK/Scripts/calibrator/compiler.py \
-m SGS_Models/tensorflow/yolo_v3_7/yolo_v3_7_fixed.sim

成 功 转 换 后 , 会 在 SGS_Models/tensorflow/yolo_v3_7 目 录 下 生 成
yolo_v3_7_fixed.sim_sgsimg.img 文件,日志如下:
在这里插入图片描述
接下来就可以将 offline 模型 yolo_v3_7_fixed.sim_sgsimg.img 上传到板端,进行测试了。

四、板端运行:

(1)板端的 demo 位于:sdk/verify/mi_demo/source/dla_detect 目录下,该例子是调用检测网络的示例代码,编译之后生成 prog_dla_detect 可执行文件。
(2)准备测试图像和标签文件,也可以从下面的目录获取图像和 label.txt: sdk/verify/mi_demo/source/ipu_release/open_source/dla_detect/resource
(3)将 prog_dla_detect、测试图像、mscoco_label.txt 文件拷贝到板端,板端运行还需要
ipu_firmware.bin,该文件位于板子上的/config/dla/目录下。 最后,在板子上执行下面的命令,就可以测试 Offline 模型了。

./prog_dla_detect /config/dla/ipu_firmware.bin yolo_v3_7_fixed.sim_sgsimg.img original.jpg mscoco_label.txt RGB

运行的结果如下:
在这里插入图片描述
代码位置:
\sourcecode\sdk\verify\mi_demo\source\dla_detect
单独编译:

sourcecode/sdk/verify/mi_demo/source
#make dla_detect

1、caffe yolo v2测试:

./prog_dla_detect /config/dla/ipu_firmware.bin open_source/dla_detect/caffe_yolo_v2_fixed.sim_sgsimg.img ./resource/009962.bmp ./resource/voc_label.txt RGB init-deinit

在这里插入图片描述
在这里插入图片描述
测试可知,用的是VOC的数据集,分类正确。可以把置信度低于0.8的排除掉。这里有个置信度0.64的干扰。

在这里插入图片描述

2、ssd_mobilenet_v1测试:

使用的是mscoco数据集训练的。

#./prog_dla_detect /config/dla/ipu_firmware.bin ./open_source/dla_verify_mbnet_mbssd/ssd_mobilenet_v1_fixed.sim_sgsimg.img  ./resource/cat_dog_2.jpg  ./resource/mscoco_label.txt  RGB

在这里插入图片描述

检测结果:
在这里插入图片描述

总结

1、模型转换:

到这里,我们已经完成了检测模型的转换和板端的运行,那么对于自己的网络,如何进 行转换呢?需要做哪些准备呢?
一般来说,如果使用 C 完成后处理操作,只需和分类网络一样,进行模型的转换;如果使用 SGS 的后处理模块,需要做以下准备:
(1)准备 input_config.ini、input_config_concat.ini 文件;
(2)准备预处理脚本:根据网络完成预处理脚本编写;
(3)准 备 后 处 理 脚 本 , 目 前 支 持 yolov3 、 ssd 等 主 流 后 处 理 , 可 以 在
SGS_IPU_SDK/Scripts/postprocess/postprocess_method/找到相关的 example,用户可以自行进行修改。
(4)准备量化所需的数据集:100 张左右;
具体如何修改可以参考《SigmaStar DLA SDK 用户手册》

2、板端运行:

对于转换好的单任务分类网络,可以直接使用 dla_classify 进行前向推理,多任务分类网络,dla_classify 只能输出一个分支的结果,如果要查看所有结果,可自行进行修改。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值