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了。用什么替代了,可以自己看上面的代码即可。