3. 模型推理

05IPU-Toolchain模型推理

1. Simulator PC仿真

SGS浮点网络模型推理流程如下:

输入一张图片 ——> 先经过前处理进行resize以及归一化等操作

               ——> 送到工具已经定义好的Net里进行推理

                   ——> 得到最终的结果

SGS定点网络模型和端侧离线模型推理流程如下:

输入一张图片 ——> 先经过前处理进行resize操作

                ——> 送到工具已经定义好的Net里进行推理,Simulator会先进行convert_to_input_formats操作,

                   ——> 再送到模型里,再进行推理

                       ——>得到最终结果

1.1 Simulator工具使用示例

进入到该工具目录,工具使用示例:

(1) 测试dataset:

python3 SGS_IPU_Toolchain/Scripts/calibrator/simulator.py \
-i ~/SGS_Models/resource/classify/ilsvrc2012_val_set100/ \
-m ~/SGS_Models/tensorflow/mobilenet_v2/mobilenet_v2_float.sim \
-c Classification \
-n mobilenet_v2.py \
--num_process 20
--soc_version CHIP

或者可以使用传入 指定图片路径列表文件 的形式:

python3 SGS_IPU_Toolchain/Scripts/calibrator/simulator.py \
-i ~/SGS_Models/resource/classify/ilsvrc2012_val_set100/file.list \
-m ~/SGS_Models/tensorflow/mobilenet_v2/mobilenet_v2_float.sim \
-c Classification \
-n mobilenet_v2.py \
--num_process 20
--soc_version CHIP

(2) 测试单张图片,并将检测结果绘制在图片上,保存到 ./results/ 文件夹下:

python3 SGS_IPU_Toolchain/Scripts/calibrator/simulator.py \
-i ~/SGS_Models/resource/detection/coco2017_val_set100/000000567877.jpg \
-m ~/SGS_Models/tensorflow/ssd_mobilenet_v1/ssd_mobilenet_v1_float.sim \
-c Detection \
-n ssd_mobilenet_v1.py \
--draw_result ./results
--soc_version CHIP

-c配置为Detection需要接后处理模型,使用TFLite_Detection_NMS作为模型输出,具体见第5章节使用sgs_chalk构建后处理模型


1.2 Simulator工具使用参数说明

(1) 必选参数

  • ① -i--image: 图片文件 / 图片文件夹路径 / 指定图片路径列表文件 。

使用须知

  • -i/--image参数传入 指定图片路径列表文件 的形式时:

    新建input_list.txt,新增内容如下:

    • 网络模型为单输入时:/path/to/image_test/2007000364.jpg

    • 网络模型为多输入时:/path/to/image_test/2007000364.jpg,/path/to/image_test/ILSVRC2012_test_00000002.bmp

    有多组数据可以写在下一行,读取时认为每行是模型的一次输入数据。完成input_list.txt后

    -i 参数为: /path/to/input_list.txt

  • 当 -i/--image 的参数为单张图片的路径时,simulator只对该图片推演;

  • 当 -i/--image 的参数为图片文件夹的路径时,simulator会对文件夹内的图片全部推演,此时增加可选参数--num_process(参数 > 1),可以开启多进程推演。

  • ② -m--model: 网络模型文件路径。

  • ③ -n--preprocess: 前处理Python的文件路径,详见第2章前处理方法。

使用须知

  • 多输入模型的前处理参数需使用多个前处理方法,前处理的个数和顺序需与模型输入个数和顺序保持一致。例如:

    -n preprocess1.py,preprocess2.py 或者 --preprocess preprocess1.py,preprocess2.py

  • 请使用与训练相同的图片前处理方式,每个输入的前处理方式需独立编写python文件。

  • ④ --soc_version: IPU Toolchain chip

使用须知

  • 执行python3 SGS_IPU_Toolchain/DumpDebug/show_sdk_info.py 可查看IPU Toolchain具体适配那些chip及版本信息

(2) 可选参数

  • ① -c--category: 模型的类别,主要有Classification / Detection / Unknown。(默认为Unknown)

使用须知

  • Classification: 模型有1个输出,会根据输出排序输出分数由高至低的前5个。
  • Detection: 模型使用TFLite_Detection_NMS作为模型输出,具体见第5章节使用sgs_chalk构建后处理模型。其他后处理请使用Unknown。
  • Unknown: 模型输出不属于上述两种类型,会输出全部的Tensor数值。
  • ② --dump_rawdata: 保存模型输入二进制数据,文件名为图片名 + .bin,保存在当前路径。

  • ③ --num_process: 进程数,同时运行的进程数。(默认为1)

使用须知

  • 不加该参数默认为单进程。
  • ④ --draw_result: 绘制目标检测网络选框结果。

使用须知

  • 仅支持-c / --category为Detection时使用该参数。

  • 参数为结果保存文件夹路径(文件夹不存在时会自动创建)和画框的阈值,使用逗号( , )分隔保存路径与阈值。

  • 输入阈值画出大于阈值的检测结果,不输入阈值则画出全部检测结果。

  • ⑤ --continue_run: 接着上次数据集剩下的部分运行。

  • ⑥ --skip_garbage: Fixed和Offline模型输出结果跳过无用数据。(已弃用)

  • ⑦ -l--label: 数据集的标签文件路径 / 图片文字描述的标签。(已弃用)

  • ⑧ -t--type: 模型的类型。(已弃用,simulator.py可根据传入模型自动判断出模型的类型)

  • ⑨ --tool: sgs_simulator文件路径。(已弃用)


2. Simulator 远程到开发板推理

simulator也提供了远程仿真工具,通过在板端开启RPC服务,可以在PC仿真端一键获取离线模型板端推理结果;客户使用起来简单高效,用于比较和验证offline模型在板端推理结果和PC端推理结果的一致性,提升模型移植效率。

在pc上输入图片做完前处理之后,开启rpc服务,将输入数据和模型发送到板端进行推理,并在推理完成之后将板端结果返回到pc上,推理过程如下图所示:

2.1 Simulator 远程到开发板推理使用介绍

更多的与板端的配合细节可以参考这个文章

Linux SDK-alkaid已提供sdk/verify/release_feature/source/dla/ipu_server的app。

使用过程如下:

(1) 首先,板端运行ipu_server开启RPC服务(PORT为设定的port号)

./prog_dla_ipu_server -p PORT

(2) 其次,PC端运行simulator.py

python3 SGS_IPU_Toolchain/Scripts/calibrator/simulator.py \
-i /path/to/input_data \
-m /path/to/offline.img \
-n /path/to/preprocess.py \
--host 板端ip地址 \
--port PORT
--soc_version CHIP

参数解释如下:

-i: 推理图片
-m: offline离线模型
-n: 前处理文件
--host: 板端ip地址
--port: 设定端口号

--soc_version: IPU Toolchain chip

(4) 运行结果保存在./log/output里,请和simulator.py执行offline模型的结果比较。

(5) 如果上述比较结果不一致,请提供原始模型给FAE分析。

注意

  • simulator 远程到开发板推理时进程数--num_process只能设置为1。

  • simulator 远程到开发板推理需要保证PC端和板端的网络连通,否则可能出现如下报错:
    RuntimeError: std::future_error: Broken promise
    
    网络连通测试可以用nc网络工具,操作方法如下:
    板子上输入(PORT为设定的port号)
    nc -l -p PORT
    
    PC上输入
    nc 板端ip地址 PORT
    
    然后在PC终端输入字符,如果在板端能显示,说明可以传输,否则请检查PC端和板端的网络连接。

  • 远程到开发板推理时设定的默认timeout时间为60秒,如果出现如下报错:
    TimeoutError: Timeout for ipu_create_model
    
    可能是文件太大,可在simulator.py增加配置timeout时间(单位:秒),如:
    --timeout 100
    

  • 板端内存空间有限,如遇到模型文件太大引起网络传输导致内存不足的情况,可按照如下方法操作:
    拷贝模型文件到板端可以访问的路径,simulator.py增加设定模型在板端的路径
    --model_onboard_path 模型在板端的路径
    
    配置--model_onboard_path时,网络仅传输模型在板端路径的字符串,从而减小板端内存空间的使用。

3. 自定义simulator简介

进一步的介绍请点击这里

4.  立即开始

加入Comake开发者社区

 主页地址: CoMake开发者社区

SDK下载: CoMake开发者社区

文档中心: CoMake开发者社区

马上购买 : 首页-Comake开发者社区商店

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐