9.1.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-道路分割分析

目录

前言

杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。

本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-道路分割分析

课程大纲可看下面的思维导图

1. 道路分割

这节我们学习自动驾驶场景中的模型案例

1. 这个案例中存在 4 个模型,分别是:车辆检测 YoloX、车道线检测、道路分割、深度估计

2. 学习把该案例的模型跑起来,对不同任务进行了解

项目地址:https://github.com/iwatake2222/self-driving-ish_computer_vision_system


图1 演示效果图

我们只需要拿到项目提供的模型并导出 ONNX 就行了,至于其它的环境配置等我们就不用关注了

那在案例中提供了下载好的模型,因此我们可以直接看案例代码

我们先来看道路分割模型,我们的目的是找到道路分割的 onnx,分析其 onnx 的大致使用逻辑,然后写出最简洁版本的 predict.py,大体可以分为以下三步:

1. 打开道路分割的 onnx,查看其输入与输出

2. 查看代码,找到 onnx 的预处理,分析得到预处理的逻辑

3. 针对获得的信息,编写 predict.py,尝试写出来

我们来观察下其 onnx 模型,如下图所示:


图2 onnx模型

从导出的 onnx 我们可以了解并猜测:

  • 输入是 1x3x512x896
  • 输出是 1x512x896x4,并且是概率值,0~1,仅仅是不确定 4 通道代表什么
  • 可能代表:可行驶区域、车道线、不可行驶区域、马路牙子

我们通过分析项目中的 image_processor/semantic_segmentation_engine.cpp 文件可以得出具体的预处理所做的工作:(详细分析请参照视频)

  • normalize → \rightarrow → mean = 0, norm = 1.0
  • 对输入图像直接 resize 到 height=512,width=896
  • 确定输入的图像就是 BGR 图像
  • normalize = (src_image - normalize.mean) * normalize.norm

我们可以简单的写个预处理程序来验证下,代码如下:

python 复制代码
import onnxruntime
import cv2
import numpy as np

session = onnxruntime.InferenceSession("workspace/road-segmentation-adas.onnx", provider_options=["CPUExecutionProvider"])

image = cv2.imread("workspace/imgs/dashcam_00.jpg")
image = cv2.resize(image, (896, 512))
image_tensor = image.astype(np.float32)
image_tensor = image_tensor.transpose(2, 0, 1)[None]

prob = session.run(["tf.identity"], {"data": image_tensor})[0]

print(prob.shape)

cv2.imwrite("prob0.jpg", prob[0, :, :, 1] * 255)

输出如下图:


图3 预处理验证

可以看到输出符合我们的预期,输出的概率图如下所示:


图4 道路分割概率图

总结

本次课程学习了开源项目中的道路分割案例,主要是对道路分割模型的 onnx 进行了简单分析,并通过对项目代码的分析将预处理部分理清楚,然后通过 onnxruntime 进行了简单验证。

次课程学习了开源项目中的道路分割案例,主要是对道路分割模型的 onnx 进行了简单分析,并通过对项目代码的分析将预处理部分理清楚,然后通过 onnxruntime 进行了简单验证。

相关推荐
luoganttcc5 天前
ubuntu.24安装cuda
cuda
码农飞飞5 天前
系统级编程语言Rust概述
rust·概述·高性能·内存安全·所有权·系统级编程·嵌入式编程
扫地的小何尚8 天前
NVIDIA RTX 系统上使用 llama.cpp 加速 LLM
人工智能·aigc·llama·gpu·nvidia·cuda·英伟达
吃肉夹馍不要夹馍10 天前
CublasLt 极简入门
cuda·cublas·gemm·cublaslt
Code-world-112 天前
Ubuntu系统安装NVIDIA驱动、CUDA、PyTorch等GPU深度学习环境
linux·pytorch·深度学习·cuda·深度强化学习
Thanks_ks14 天前
利用 TensorFlow 与 Docker 构建深度学习模型训练与部署流水线
深度学习·docker·tensorflow·模型部署·容器化技术·模型训练·flask 应用
橘色的喵19 天前
Iceoryx2:高性能进程间通信框架(中间件)
中间件·rust·高性能·iceoryx·iceoryx2
狼刀流23 天前
(8) cuda分析工具
python·cuda
CodeLearing25 天前
【CUDA代码实践03】m维网格n维线程块对二维矩阵的索引
线性代数·矩阵·cuda
坐望云起1 个月前
Ubuntu20.04 更新Nvidia驱动 + 安装CUDA12.1 + cudnn8.9.7
linux·ubuntu·nvidia·cuda·onnx·1024程序员节