onnx模型转换openvino进行部署时首先需要用openvino官方给的优化程序对onnx模型进行优化,之后使用openvino官方API加载优化后的模型如果不报错说明onnx模型转openvino模型成功,就可以编写推理代码然后进行部署。我在使用优化程序转换onnx模型时虽无报错但是在使用openvino官方API加载模型时报错nGraph does not support the following ONNX operations: If,这个错误好像是onnx模型转openvino模型不支持if条件语句,因此我首先尝试将代码里所有if语句去掉,但还是报这个错误,在经过仔细排查之后发现pytorch的squeeze()方法方法在转换成onnx模型后会产生If节点,最终导致转换openvino模型出现nGraph does not support the following ONNX operations: If这个报错,squeeze()方法只是去掉tensor中维度为1的维度,并不清楚为何在转换成onnx模型后会产生If节点。下面列举一个squeeze()转换成onnx之后产生If节点的可视化例子:
我的代码中有一步是去除一个tensor中维度为1的维度,刚开始我使用squeeze()方法然后转成onnx模型后可视化模型如下图1所示,之后我将squeeze()改为使用索引的方法,然后转成onnx模型并可视化如下图2所示,对比可以发现squeeze()方法其实严格来说转成onnx模型是生成了shape、Equal和If三个节点,原因可能是pytorch官方的squeeze()源码实现是使用的这三个算子吧。
图1:squeeze 图2:索引