函数支持

OpenVINO 2020R04版本支持ONNX格式文件的直接读取了,使用的函数还是跟之前读取IR文件函数保持一致,只是第二个参数缺省为空时候,就会尝试读取ONNX格式文件。相关的函数与参数解释如下:

其中

  • modelPath 表示模型输入路径,(.xml 或者.onnx)
  • binPath 表示IR格式化数据路径(*.bin),如果为空,尝试读取跟modelPath同名的bin文件,如果失败就会尝试直接加载IR文件。

02

ResNet模型转换

这里我使用pytorch中torchvision自带的ResNet18预训练模型,首先把它从pth转换为ONNX格式,转换的脚本如下:

转换为IR中间文件格式,参见下面的链接,这里不再赘述

这样我们就得到了ONNX格式的模型了。该模型是在ImageNet数据集上训练生成的,支持1000个类别的图像分类,对图像预处理的参数支持与输入格式如下:

03

对比测试

这里我们分别使用ResNet18网络的ONNX格式与IR格式在OpenVINO 2020R04 版本上进行测试,最终得到的时间比较如下:

可以看出直接读取ONNX方式执行的主要瓶颈居然在加载网络这步,对应的函数为:

还好,当处理视频或者多次循环调用模型推理的时候,该函数属于初始化步骤,只会执行一次,不太会影响FPS。但是这个慢的有点离谱!希望可以在下个版本中可以改进一波。在推理执行上,两个格式基本速度相当,处理视频时候FPS也基本都很稳定。OpenVINO支持ONNX模型加载与推理稳了,这个将会是很多pytorch开发者的福音,CPU加速模型不是梦了。下面可以看一下我执行的推理时间与FPS:

这速度,还用说吗?靠谱!

测试代码

image_classification方法默认执行IR格式加载,修改参数为True执行ONNX格式推理,代码如下:

还有一个发现,OpenVINO2020 R04的Python版本在SDK方面,对网络的输入与输出不再使用inputs与outputs了。用什么替代了,可以自己看上面的代码即可。