PPLNN推理引擎验证踩坑

最近在看到了商汤开源的PPLNN推理引擎,看指标在cpu上的性能要优于OpenVINO,所以尝试着使用,针对自己的模型对照一下性能
首先下载安装ppl.nn的工具包,依照说明文档进行安装(cmake>3.17.2),并测试了给的用例,得到如下结果,说明环境没有问题,但是看这能看出个啥,愚昧无知的我是没看出来:
请添加图片描述找到官方提供的测试模型可视化发现,仅仅有一层,这能看出来个啥,简单到令人发指呀:请添加图片描述想要相对比较合理的对其性能进行评估,还是得需要一个相对比较靠谱点的模型进行推理比较,找了一下没有比详细的测试用例可以参考,那么只能自己动手啦,作为小白鼠的我,头皮要抓破了,看着官方提供的文档,一步一步的写,一个坑一个坑的趟:

安装好pplnn所需要的环境,并测试官方提供的测试用例没有问题后,对自己训练的模型进行测试,报如下错误
**

error1:onnx的opset版本过低引起的错误

**

[ERROR][2021-09-28 20:04:46.766][model_parser.cc:61] unsupported opset [:10]
[ERROR][2021-09-28 20:04:46.766][runtime_builder_impl.cc:45] parse graph failed: unsupported
[ERROR][2021-09-28 20:04:46.766][onnx_runtime_builder_factory.cc:58] init RuntimeBuilder failed: unsupported
ERROR: create RuntimeBuilder failed.

请添加图片描述报错opset模型版本为10,版本过低,pplnn推理引擎要求opset在12及以上,可以通过pplnn工具包中的convert_onnx_opset_version进行转换,即可,如果你是基于tensorflow训练的模型导出的是pb格式的模型文件,可以通过我的前面的文章,在pb转onnx模型时,直接设置opset为12.

**

error2:padding不对称引起的错误

**

[INFO][2021-09-27 18:01:49.790][simple_graph_partitioner.cc:107] total partition(s) of graph[tf2onnx]: 1.
[ERROR][2021-09-27 18:01:49.791][opt_graph.cc:234] kernel[FeatureExtractor/MobilenetV2/Conv/Conv2D] SelectAlgorithm failed: unsupported
[ERROR][2021-09-27 18:01:49.791][opt_graph.cc:1174] LayoutOptimize failed: unsupported
[ERROR][2021-09-27 18:01:49.791][engine.cc:67] OptGraph DoOptimize failed: unsupported
[ERROR][2021-09-27 18:01:49.791][engine.cc:77] DoOptimize failed: unsupported
[ERROR][2021-09-27 18:01:49.791][utils.cc:257] process graph[tf2onnx] by engine[x86] failed: unsupported
[ERROR][2021-09-27 18:01:49.791][utils.cc:467] GenPartitionsInfo failed:unsupported
[ERROR][2021-09-27 18:01:49.791][runtime_builder_impl.cc:51] process graph failed: unsupported
[ERROR][2021-09-27 18:01:49.791][onnx_runtime_builder_factory.cc:58] init RuntimeBuilder failed: unsupported

请添加图片描述首先将自己的模型通过可视化工具可视化,发现报错的层,都有一个共同的问题就是,pads具有不对称性,如下图所示
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
尝试着修改input的形状,使得第一个报错的地方pads=1,1,1,1或者pads=0,0,0,0再次进行测试,报错的位置发生了改变,去到了下一个pads不对称的位置,定位到原因可能是:模型里面有不对称的padding,PPL X86不支持这种padding,这一点也和pplnn技术人员进行了确认,至于为什么会出现不对称pads的情况,是因为tf里面pad设置为same的原因,值都是自动计算的

如何使自己的模型的pads的值全部是均衡的,个人认为有两条路可以走:
①将所有下采样的conv层进行替换,直接进行一次下采样,然后再进行一次conv3*3,strides为1的卷积
②在不改变已经训练好的模型的前提下,通过可视化模型文件,找到pads不对称的层,定位一下从原始输入形状,通过层层conv,polling到这层以后的形状变成多少,通过公式[(W-F+2p)/s]+1进行计算,得到这层的形状后,在其形状的基础上+1或者-1,然后再反推至起始输入层,得到一个新的输入形状,依据该形状freeze出一个假的模型,再进行测试,发现这一层的pads变为规则的情况,依次类推,直至整个模型的所有pads都变得规则,前提是新的输入形状的宽高比要和原始输入相似,如果时间允许的话,可以使用新的输入形状从头训练一个新的模型出来效果更好。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风华正茂6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值