C# Onnx LSTR 基于Transformer的端到端实时车道线检测

💡 原文中文,约9900字,阅读约需24分钟。
📝

内容提要

这篇文章介绍了一个端到端实时车道线检测模型的信息和代码实现。模型使用了lstr_360x640.onnx作为输入,输出包括预测的车道线和权重等信息。代码使用了Microsoft.ML.OnnxRuntime和OpenCvSharp等库进行模型推理和图像处理。

🔎

延伸解读

模型输入输出结构解析

模型输入为input_rgb和input_mask,尺寸均为360x640,输出包括pred_logits、pred_curves、foo_out_1、foo_out_2和weights。其中pred_logits形状为[1,7,2],表示7条车道线的二分类置信度;pred_curves形状为[1,7,8],每条车道线由8个参数描述曲线。代码中通过比较pred_logits的第二个维度最大值来判断车道线是否存在,并利用pred_curves和log_space.bin中的对数空间值计算车道线点坐标。

预处理与后处理关键步骤

预处理阶段将图像缩放到360x640,并按照mean和std进行归一化,同时创建全零的input_mask。后处理时,对每条车道线取pred_logits中最大值的索引,若为1则认为检测到车道线。然后利用pred_curves中的8个参数和log_space.bin中的50个对数空间值,通过特定公式计算x和y坐标,并映射回原图尺寸。最后根据车道线索引(0为右车道,5为左车道)绘制车道区域和点。

依赖环境与运行方式

项目基于VS2022和.NET Framework 4.8开发,使用OpenCvSharp 4.8进行图像处理,Microsoft.ML.OnnxRuntime 1.16.2进行模型推理。代码中通过SessionOptions设置CPU运行,并加载本地模型文件lstr_360x640.onnx和log_space.bin。推理耗时通过DateTime计算并显示在界面上,结果图像通过pictureBox2展示,支持双击查看原图。

❓

Q&A

这个车道线检测模型使用了什么输入格式?

模型使用了input_rgb和input_mask作为输入,分别为Float[1, 3, 360, 640]和Float[1, 1, 360, 640]格式。

如何在C#中实现这个车道线检测模型?

可以使用Microsoft.ML.OnnxRuntime和OpenCvSharp库进行模型推理和图像处理,具体代码实现包括创建输入张量和处理推理结果。

模型的输出包括哪些信息?

模型的输出包括pred_logits、pred_curves和weights等信息。

这个模型的推理过程是怎样的?

推理过程包括图像缩放、输入张量创建和结果处理,最终在界面上显示检测结果。

使用这个模型需要哪些软件依赖?

项目依赖于VS2022、.NET Framework 4.8、OpenCvSharp 4.8和Microsoft.ML.OnnxRuntime 1.16.2。

如何处理模型推理的结果?

可以将推理结果转为数组,提取检测到的车道线信息,并在图像上绘制结果。

🏷️

标签

➡️

继续阅读