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

news2024/11/27 0:44:54

目录

    • 前言
    • 1. 道路分割
    • 总结

前言

杜老师推出的 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)

输出如下图:

在这里插入图片描述

图3 预处理验证

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

在这里插入图片描述

图4 道路分割概率图

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux入门之多线程|线程|进程基本概念及库函数

目录 一、线程 1.线程的概 补充知识点:页表 2.线程的优点 3.线程的缺点 4.线程异常 5.线程用途 二、线程与进程的区别与联系 三、关于进程线程的问题 0.posix线程库 1.创建线程 2.线程终止 3.取消线程 4.线程等待(等待线程结束)…

02|李沐动手学深度学习v2(笔记)

基础优化算法 导航 基础优化算法梯度下降1.1 小批量随机梯度下降1.2 小结 线性回归实现1. 处理数据1.3 生成大小为batch_size的小批量 2. 处理模型3. 模型评估4. 训练过程 梯度下降 针对我们的模型没有显示解。(生活中很少能有完全符合的线性模型,大多数…

用户中心笔记-leovany

1. 安装 官方地址:https://pro.ant.design/zh-CN/docs/getting-started 1.1 Mac系统 1.1.1 安装yarn 安装yarn brew install yarn查看版本 brew -v 1.1.2 安装node // 安装node brew install node // 关联 brew unlink node && brew link node // 查看版…

信息系统安全运维模型 课堂记录

声明 本文是学习 信息系统安全运维管理指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准描述了信息系统安全运维管理体系,给出了安全运维策略、安全运维组织、安全运维规程和安全运维支撑系统等方面相关活动的目的、要求和…

【项目 计网9】4.25 IO多路复用简介 4.26select API介绍 4.27 select代码编写

文章目录 4.25 IO多路复用(I/O多路转接)简介4.26select API介绍4.27 select代码编写客户端程序select程序select的缺点 4.25 IO多路复用(I/O多路转接)简介 输入输出:以内存为主体 读写:以程序为主体 程序要…

2023-09-03 LeetCode每日一题(消灭怪物的最大数量)

2023-09-03每日一题 一、题目编号 1921. 消灭怪物的最大数量二、题目链接 点击跳转到题目位置 三、题目描述 你正在玩一款电子游戏,在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 n 的整数数组 dist ,其中 dist[i] 是第 i …

从一到无穷大 #12 Planet-Scale In-Memory Time Series Database, Is it really Monarch?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言约束优势数据模型写路径查询路径Field Hints Index可靠性 其他总结 引言 Monarc…

Thymeleaf常见属性

参考文档 thymeleaf 语法——th:text默认值、字符串连接、th:attr、th:href 传参、th:include传参、th:inline 内联、th:each循环、th:with、th:if_猎人在吃肉的博客-CSDN博客 代码演示 Controller public class TestController {AutowiredMenuService menuService;GetMapp…

基于多设计模式下的同步异步日志系统

基于多设计模式下的同步&异步日志系统 代码链接:https://github.com/Janonez/Log_System 1. 项目介绍 本项目主要实现一个日志系统, 其主要支持以下功能: 支持多级别日志消息支持同步日志和异步日志支持可靠写入日志到标准输出、文件…

uni-app之android原生插件开发

一 插件简介 1.1 当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,可使用App离线SDK开发原生插件来扩展原生能力。 1.2 插件类型有两种,Module模式和Component模式 Module模式:能力扩展&…

S32K324芯片学习笔记

文章目录 Core and architectureDMASystem and power managementMemory and memory interfacesClocksSecurity and integrity安全与完整性Safety ISO26262Analog、Timers功能框图内存mapflash Signal MultiplexingPort和MSCR寄存器的mapping Core and architecture 两个Arm Co…

数学建模:Yalmip求解线性与非线性优化问题

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 线性优化 使用 Yalmip 求解线性规划最优值: m i n { − x 1 − 2 x 2 3 x 3 } x 1 x 2 ⩾ 3 x 2 x 3 ⩾ 3 x 1 x 3 4 0 ≤ x 1 , x 2 , x 3 ≤ 2 \begin{gathered}min\{-x_1-2x_23x_3\} \…

networkX-01-基础

文章目录 创建一个图1. 节点方式1 :一次添加一个节点方式2:从list中添加节点方式3:添加节点时附加节点属性字典方式4:将一个图中的节点合并到另外一个图中 2. 边方式1:一次添加一条边方式2:列表&#xff08…

23062网络编程day2

1. TCP的服务器 客户端的代码 服务器 #include <myhead.h>#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__:",__LINE__);\perror(msg);\ }while(0)#define PORT 8888#define IP "192.168.114.104"int main(int argc, const char *argv[]) {//创建…

大数据技术原理与应用学习笔记第1章

黄金组合访问地址&#xff1a;http://dblab.xmu.edu.cn/post/7553/ 1.《大数据技术原理与应用》教材 官网&#xff1a;http://dblab.xmu.edu.cn/post/bigdata/ 2.大数据软件安装和编程实践指南 官网林子雨编著《大数据技术原理与应用》教材配套大数据软件安装和编程实践指…

Windows 操作系统下 Python 及其模块的管理

Python 是一款解释型语言&#xff0c;理论上一个.py文件可以当成一个稍微复杂一些的字符串指令集本文不涉及jupyter,VS,VScode,Pycharm 等集成开发环境&#xff0c;这不是我们这篇文章所关心的东西 这篇文章面向的是Python 的初学者 最近没有写太多长文章&#xff0c;多写几篇&…

8、暴力递归

前缀树 一个字符串类型的数组arr1,另一个字符串类型的数组arr2。arr2中有哪些字符,是arr1中出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印。arr2中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印 arr2中出现次数最大的前缀 public…

LabVIEW开发超导体电流特性的测量系统

LabVIEW开发超导体电流特性的测量系统 超导体的临界电流密度Jc不断增加&#xff0c;目前超导线已达到150MA/cm2因此&#xff0c;由于电流能力增强&#xff0c;超导体被认为应用于电力系统&#xff0c;例如传输电缆、超导磁体和超导磁储能。由于Jc是此类应用的重要值&#xff0…

STM32F4X RNG随机数发生器

STM32F4X RNG随机数发生器 随机数的作用STM32F4X 随机数发生器RNG控制寄存器RNG状态寄存器RNG数据寄存器RNG数据步骤RNG例程 随机数的作用 随机数顾名思义就是随机产生的数字&#xff0c;这种数字最大的特点就是其不确定性&#xff0c;你不知道它下一次产生的数字是什么。随机…

差分数组/前缀和

文章目录 1094. 拼车1109. 航班预定统计303. 区域和检索 - 数组不可变560. 和为K的子数组523. 连续的子数组的和 1094. 拼车 class Solution {public boolean carPooling(int[][] trips, int capacity) {int[] diff new int[1001]; // 记录每个站点改变的人数&#xff0c;比如…