CPU推理
默认情况下,上述安装的onnxruntime只支持CPU推理,也就是说模型是运行的CPU版本,支持的数据类型为Numpy的Map或者数组或者List类型,模型默认在CPU上推理执行。测试代码如下:
def
cpu_ort_demo
:
device_name = onnxruntime.get_device
print(device_name)
session = onnxruntime.InferenceSession(
"D:/python/pytorch_tutorial/defect_detection/surface_defect_resnet18.onnx"
)
image = cv.imread(
"D:/pytorch/enu_surface_defect/test/Pa_5.bmp"
)
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
x_input = img_transform(image).view(
1
,
3
,
200
,
200
)
ort_inputs = {session.get_inputs[
0
].name: x_input.numpy}
ort_outs = session.run(
None
, ort_inputs)
out_prob = ort_outs[
0
]
label_id = np.argmax(out_prob)
defect_txt = defect_labels[label_id]
cv.putText(image, defect_txt, (
10
,
30
), cv.FONT_HERSHEY_SIMPLEX,
1.0
, (
0
,
0
,
255
),
2
,
8
)
cv.imshow(
"defect_detection"
, image)
cv.waitKey(
0
)
cv.destroyAllWindows
运行结果如下(自定义缺陷分类):
GPU推理
默认情况下,上述安装的onnxruntime只支持CPU推理,也就是说模型是运行的CPU版本,想要完成CUDA版本的推理,需要安装onnxruntime-gpu版本,安装的命令行如下:
pip
install onnxruntime-gpu
使用GPU推理支持需要VC++与CUDA版本匹配支持,这个坑比较多,而且onnxruntime版本不同支持的CUDA版本也不一样。上面的代码输入改为CUDA支持版本如下:
def
gpu_ort_demo
:
device_name = onnxruntime.get_device
print(device_name)
session = onnxruntime.InferenceSession(
"D:/python/pytorch_tutorial/defect_detection/surface_defect_resnet18.onnx"
)
image = cv.imread(
"D:/pytorch/enu_surface_defect/test/Pa_5.bmp"
)
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
x_input = img_transform(image).view(
1
,
3
,
200
,
200
).numpy
print(x_input.shape)
ortvalue = onnxruntime.OrtValue.ortvalue_from_numpy(x_input,
'cuda'
,
0
)
ortvalue.device_name
# 'cuda'
ortvalue.shape
# shape of the numpy array X
ortvalue.data_type
# 'tensor(float)'
ortvalue.is_tensor
# 'True'
np.array_equal(ortvalue.numpy, x_input)
# 'True'
ort_inputs = {session.get_inputs[
0
].name: ortvalue}
ort_outs = session.run(
None
, ort_inputs)
out_prob = ort_outs[
0
]
label_id = np.argmax(out_prob)
defect_txt = defect_labels[label_id]
cv.putText(image, defect_txt, (
10
,
30
), cv.FONT_HERSHEY_SIMPLEX,
1.0
, (
0
,
0
,
255
),
2
,
8
)
cv.imshow(
"defect_detection"
, image)
cv.waitKey(
0
)
cv.destroyAllWindows
其中OrtValue会自动实现模型输入数据的CPU的内存数据到CUDA数据搬运,此外还可以通过会话的io_binding方法实现对输入与输出数据的CUDA绑定支持。
openvino2021.3支持onnxruntime了
OpenVINO2021.3开始支持onnxruntime方式加速推理,前提是需要自己编译,关于编译支持操作可以查看下面的链接:
https://docs.openvinotoolkit.org/2021.3/omz_tools_accuracy_checker_onnx_runtime_launcher.html
扫码查看OpenVINO系统化视频教程
OpenCV4系统化学习路线图-视频版本!
Tensorflow + OpenCV4 安全帽检测模型训练与推理
极简教程 | OpenCV4 C++学习 必备基础语法知识
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
LesionNet 医疗图像分割网络模型实现皮肤病灶分割
YOLOv5实现自定义对象训练与OpenVINO部署全解析
推理演示 | 八步助你搞定tensorRT C++ SDK调用!
深度解读 OpenCV中的VideoCapture视频读取
极简教程 | OpenCV4 C++学习 必备基础语法知识
OpenCV学堂 | 2020年 原创技术文章汇总
经验 | OpenCV图像旋转的原理与技巧
汇总 | OpenCV DNN模块中支持的分类网络
汇总 | OpenCV DNN支持的对象检测模型
汇总 | OpenCV4中的非典型深度学习模型
返回搜狐,查看更多
责任编辑:
平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。