使用 OpenVINO™ C++ 异步推理接口部署YOLOv8 ——在Intel IGPU 上实现80+FPS视频推理...

💡 原文中文,约8100字,阅读约需20分钟。
📝

内容提要

本文介绍了OpenVINO Runtime支持同步和异步模式下的推理,通过对比推理速度发现异步接口的速度是同步接口的3.78倍。文章还介绍了OpenVINO工具套件和异步推理接口的使用方法,并展示了在项目环境中使用异步推理实现视频数据推理的代码和时间测试结果。异步推理在提高推理速度方面具有显著优势。

🔎

延伸解读

异步推理的性能提升机制

文章指出,异步API允许在设备推理时并行执行其他任务,如填充输入或调度请求,从而避免硬件空闲。通过重叠请求传输和推理执行,异步推理显著压缩了全流程时间。测试数据显示,异步模式平均每帧推理时间仅11.37毫秒,而同步模式为43.02毫秒,速度提升3.78倍。这得益于异步接口实现了模型推理与数据前处理、后处理的并行执行。

异步推理的实现要点

在C++中,使用ov::InferRequest创建推理请求,通过start_async启动异步推理。文章示例中创建了两个推理通道,交替处理视频帧:先读取第一帧并启动异步推理,然后读取下一帧到另一个通道,等待前一帧推理完成后再处理结果,并交换通道。这种双通道设计确保了推理与数据加载的重叠,从而提升整体帧率。

测试环境与结果解读

测试在Intel Core i7-1165G7的集成显卡Intel Iris Xe Graphics上进行,使用YOLOv8s模型和1920×1080分辨率视频。同步推理总耗时43.02毫秒,异步仅11.37毫秒,FPS从23.25提升至87.98。值得注意的是,异步模式下推理本身仅0.02毫秒,大部分时间用于前处理,这表明异步接口有效隐藏了推理延迟,但前处理可能成为新瓶颈。

❓

Q&A

OpenVINO的异步推理接口有什么优势?

异步推理接口允许应用程序在推理时并行执行其他任务,避免硬件空闲时间,推理速度是同步接口的3.78倍。

如何在C++中使用OpenVINO进行异步推理?

在C++中,可以使用ov::InferRequest创建推理请求,并通过start_async方法启动异步推理。

OpenVINO工具套件的主要功能是什么?

OpenVINO工具套件基于oneAPI,旨在加速计算机视觉和深度学习应用的开发,适用于各种英特尔平台。

异步推理的平均推理时间是多少?

异步推理的平均推理时间为11.37毫秒,显著快于同步推理的43.02毫秒。

OpenVINO 2024.1工具包有哪些新特性?

OpenVINO 2024.1工具包增加了对更多Gen AI的支持和框架集成,提供更广泛的LLM模型支持和模型压缩技术。

如何实现视频数据的异步推理?

需要创建多个推理通道,逐帧处理视频数据,并在推理完成后读取结果,依次进行。

🏷️

标签

➡️

继续阅读