欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用于 Viper Canyon 上 YOLOv5 建模的 OpenVINO™ 异步推理程序 | 开发人员手把手教学

最编程 2024-03-29 08:40:33
...
            
            
            

点击上方蓝字

关注我们


文章作者

英特尔物联网行业创新大使

战鹏州


本文将介绍通过异步推理实现方式,进一步提升 AI 推理程序的性能。在阅读本文前,请读者先参考《‍基于OpenVINO™2022.2和蝰蛇峡谷优化并部署 YOLOv5模型‍》,完成 OpenVINO 开发环境的创建并获得 yolov5s.xml 模型,然后阅读范例程序 yolov5_ov2022_sync_dGPU.py,了解  OpenVINO 的同步推理程序实现方式。

范例程序请见:

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5_ov2022_sync_dGPU.py



1.1

AI 推理程序性能评价指标


在提升 AI 推理程序的性能前,先要理解评估 AI 推理程序性能的指标是什么。我们常用时延(Latency)和吞吐量(Throughput)来衡量 AI 推理程序的性能。

• 时延:测量处理一个单位数据的速度快不快

• 吞吐量:测量一个单位时间里面处理的数据多不多

很多人都容易误认为时延低必然吞吐量高,时延高必然吞吐量低。其实不是这样,以 ATM 机取钱为例,假设一个人在 ATM 机取钱的速度是30秒,若A银行有两台 ATM 机,那么A银行的吞吐量为4人/分钟,时延是30秒;若B银行有4台 ATM 机,那么B银行的吞吐量为8人/分钟,时延是30秒;若C银行有4台 ATM 机,并且要求每个人取完钱后,必须填写满意度调查表,大约花费30秒,那么C银行的吞吐量为8人/分钟,时延为1分钟。


由此可见,时延评估的是单一事件的处理速度,吞吐量评估的是整个系统处理事件的效率。时延高低跟吞吐量大小有关系,但不是直接的线性关系,我们需要同时着眼于时延和吞吐量这两个指标去优化。


另外,AI 推理性能评价还有两个常见的场景,一个是单纯评价 AI 模型的推理性能,另一个是整体评价从采集数据到拿到最终结果的端到端的 AI 推理程序性能。


1.1.1

  AI 模型的推理性能


在单纯评价 AI 模型的推理性能的场景中:

• 时延具体指将数据输入 AI 模型后,多长时间可以从 AI 模型拿到输出结果;

• 吞吐量具体指在单位时间能完成多少数据的 AI 推理计算。数据的前处理和后处理所花费的时间不包含在时延和吞吐量的计算里面。

具体到计算机视觉应用场景的 AI 模型的推理性能,吞吐量可以用单位时间内能完成多少张图片的 AI 推理计算来衡量,即 FPS(Frame Per Second),如下图所示。



OpenVINO™ 自带的性能评测工具的 benchmark_app,主要用于单纯评价 AI 模型推理性能的场景。在蝰蛇峡谷平台上,使用命令:

benchmark_app -m yolov5.xml -d GPU.1

可以获得 yolov5.xml 模型在英特尔 A770M 独立显卡(GPU.1)上的推理性能,如下图所示。



1.1.2

  端到端的 AI 模型推理性能


当 AI 模型集成到应用程序中后,对用户来说,更加关注的是从采集图像数据到拿到最终结果的端到端的性能,例如,用手机拍了一个水果,用户更在乎的是需要多少时间能展示出这个水果是什么。


一个典型端到端 AI 推理计算程序流程:

1. 采集图像并解码

2. 根据 AI 模型的要求,对图像数据做预处理

3. 将预处理后的数据送入模型,执行推理计算

4. 对推理计算结果做后处理,拿到最终结果

参考 yolov5_ov2022_sync_dGPU.py 的代码片段

范例程序请见:

https://gitee.com/ppov-nuc/yolov5_infer/blob/main/yolov5_ov2022_sync_dGPU.py

# Acquire or load imageframe = cv2.imread("./data/images/zidane.jpg")# preprocess frame by letterboxletterbox_img, _, _= letterbox(frame, auto=False)# Normalization + Swap RB + Layout from HWC to NCHWblob = cv2.dnn.blobFromImage(letterbox_img, 1/255.0, swapRB=True)# Step 3: Do the inferenceouts = torch.tensor(net([blob])[output_node]) # Postprocess of YOLOv5:NMSdets = non_max_suppression(outs)[0].numpy()bboxes, scores, class_ids= dets[:,:4], dets[:,4], dets[:,5]# rescale the coordinatesbboxes = scale_coords(letterbox_img.shape[:-1], bboxes, frame.shape[:-1]).astype(int)

采用 yolov5_ov2022_sync_dGPU.py 中同步实现方式,可以看到在第1,2,4步时,AI 推理设备是空闲的,如下图所示:



若能提升 AI 推理设备的利用率,则可以提高 AI 程序的吞吐量。提升 AI 推理设备利用率的典型方式,是将同步推理实现方式更换为异步推理实现方式。

上一篇: 应聘腾讯,我和面试官聊了一个小时人生

下一篇: Naocs2.x】(六)在乞丐版注册中心写乞丐--实现篇