• 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

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出如下图:

    在这里插入图片描述

    图3 预处理验证

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

    在这里插入图片描述

    图4 道路分割概率图

    总结

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

  • 相关阅读:
    公网Windows,MAC,LINUX远程操控
    Hadoop_HDFS
    Android13 串口控制是能wifi adb实现
    C++20中的关键字
    (40)Verilog实现序列10111【状态机三段式】
    Python学习2(列表、元组、字典,集合set)
    【排序算法】计数排序(C语言)
    2022届物联网毕业生作品【基于QT的智能家居网关的设计与实现】——
    【工具】压力测试、安全、进程、流量、磁盘、日志
    17. 电话号码的字母组合
  • 原文地址:https://blog.csdn.net/qq_40672115/article/details/132655667