基于 OpenVINO C# API 部署 RT-DETR 模型
- 1. RT-DETR
- 2. OpenVINO
- 3. 环境配置
- 4. 模型下载与转换
- 5. C#代码实现
-
- 5.1 模型推理类实现
-
- 1. 模型推理类初始化
- 2. 图片预测API
- 5.2 模型数据处理类RTDETRProcess
-
- 1. 定义RTDETRProcess
- 2. 输入数据处理方法
- 3. 预测结果数据处理方法
- 6. 预测结果展示
- 7. 平台推理时间测试
- 8. 总结
RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO™ C++ API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于OpenVINO™ Python 和 C++ API 向大家展示了的RT-DETR模型的部署流程,并分别展示了是否包含后处理的模型部署流程,为大家使用RT-DETR模型提供了很好的范例。
在实际工业应用时,有时我们需要在C#环境下使用该模型应用到工业检测中,因此在本文中,我们将向大家展示使用OpenVINO Csharp API 部署RT-DETR模型,并对比不同编程平台下模型部署的速度。
该项目所使用的全部代码已经在GitHub上开源,并且收藏在OpenVINO-CSharp-API项目里,项目所在目录链接为:
https://github.com/guojin-yan/OpenVINO-CSharp-API/tree/csharp3.0/tutorial_examples
也可以直接访问该项目,项目链接为:
https://github.com/guojin-yan/RT-DETR-OpenVINO.git
项目首发网址为:基于 OpenVINO™ C# API 部署 RT-DETR 模型 | 开发者实战
1. RT-DETR
飞桨在去年 3 月份推出了高精度通用目标检测模型 PP-YOLOE ,同年在 PP-YOLOE 的基础上提出了 PP-YOLOE+。而继 PP-YOLOE 提出后,MT-YOLOv6、YOLOv7、DAMO-YOLO、RTMDet 等模型先后被提出,一直迭代到今年开年的 YOLOv8。

YOLO 检测器有个较大的待改进点是需要 NMS 后处理,其通常难以优化且不够鲁棒,因此检测器的速度存在延迟。DETR是一种不需要 NMS 后处理、基于 Transformer 的端到端目标检测器。百度飞桨正式推出了——RT-DETR (Real-Time DEtection TRansformer) ,一种基于 DETR 架构的实时端到端检测器,其在速度和精度上取得了 SOTA 性能。

RT-DETR是在DETR模型基础上进行改进的,它通过使用一系列新的技术和算法,实现了更高效的训练和推理。具体来说,RT-DETR具有以下优势:
- 1、实时性能更佳:RT-DETR采用了一种新的注意力机制,能够更好地捕获物体之间的关系,并减少计算量。此外,RT-DETR还引入了一种基于时间的注意力机制,能够更好地处理视频数据。
- 2、精度更高:RT-DETR在保证实时性能的同时,还能够保持较高的检测精度。这主要得益于RT-DETR引入的一种新的多任务学习机制,能够更好地利用训练数据。
- 3、更易于训练和调参:RT-DETR采用了一种新的损失函数,能够更好地进行训练和调参。此外,RT-DETR还引入了一种新的数据增强技术,能够更好地利用训练数据。

2. OpenVINO
英特尔发行版 OpenVINO™工具套件基于oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程, OpenVINO™可赋能开发者在现实世界中部署高性能应用程序和算法。

OpenVINO™ 2023.1于2023年9月18日发布,该工具包带来了挖掘生成人工智能全部潜力的新功能。生成人工智能的覆盖范围得到了扩展,通过PyTorch*等框架增强了体验,您可以在其中自动导入和转换模型。大型语言模型(LLM)在运行时性能和内存优化方面得到了提升。聊天机器人、代码生成等的模型已启用。OpenVINO更便携,性能更高,可以在任何需要的地方运行:在边缘、云中或本地。
3. 环境配置
本文中主要使用的项目环境可以通过NuGet Package包进行安装,Visual Studio 提供了NuGet Package包管理功能,可以通过其进行安装,主要使用下图两个程序包,C#平台安装程序包还是十分方便的,直接安装即可使用:


除了通过Visual Studio 安装,也可以通过 dotnet 指令进行安装,安装命令为:
dotnet add package OpenVINO.CSharp.Windows --version 2023.1.0.2
dotnet add package OpenCvSharp4.Windows --version 4.8.0.20230708
4. 模型下载与转换
在之前的文章中我们已经讲解了模型的到处方式,大家可以参考下面两篇文章实现模型导出:《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO™ C++ API 部署 RT-DETR 模型 | 开发者实战》。
5. C#代码实现
为了更系统地实现RT-DETR模型的推理流程,我们采用C#特性,封装了RTDETRPredictor模型推理类以及RTDETRProcess模型数据处理类,下面我们将对这两个类中的关键代码进行讲解。
5.1 模型推理类实现
C# 代码中我们定义的RTDETRPredictor模型推理类如下所示:
public class RTDETRPredictor
{
public RTDETRPredictor(string model_path, string label_path,
string device_name = "CPU", bool postprcoess = true)
{
}
public Mat predict(Mat image)
{
}
private void pritf_model_info(Model model)
{
}
private void fill_tensor_data_image(Tensor input_tensor, Mat input_image)
{
}
private void fill_tensor_data_float(Tensor input_tensor, float[] input_data, int data_size)
{
}
RTDETRProcess rtdetr_process;
bool post_flag;
Core core;
Model model;
CompiledModel compiled_model;
InferRequest infer_request;
}
1. 模型推理类初始化
首先我们需要初始化模型推理类,初始化相关信息:
public RTDETRPredictor(string model_path, string label_path, string device_name = "CPU", bool postprcoess = true)
{
INFO("Model path: " + model_path);
INFO("Device name: " + device_name);
core = new Core();
model = core.read_model(model_path);
pritf_model_info(model);
compiled_model = core.compile_model(model, device_name);
infer_request = compiled_model.create_infer_request();
rtdetr_process = new RTDETRProcess(new Size(640, 640), label_path, 0.5f);
this.post_flag = postprcoess;
}
在该方法中主要包含以下几个输入:
- model_path:推理模型地址;
- label_path:模型预测类别文件;
- device_name:推理设备名称;
- post_flag:模型是否包含后处理,当post_flag = true时,包含后处理,当post_flag = false时,不包含后处理。
2. 图片预测API
这一步中主要是对输入图片进行预测,并将模型预测结果会知道输入图片上,下面是这阶段的主要代码:
public Mat predict(Mat image)
{
Mat blob_image = rtdetr_process.preprocess(image.Clone());
if (post_flag)
{
Tensor image_tensor = infer_request.get_tensor("image");
Tensor shape_tensor = infer_request.get_tensor("im_shape");
Tensor scale_tensor = infer_request.

最低0.47元/天 解锁文章
2125

被折叠的 条评论
为什么被折叠?



