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

目录

    • 前言
    • 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 npsession = 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.hqwc.cn/news/102687.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

改进深度学习网络的几个思路

由于要优化网络,老师给提供的几个思路: 个人学习后的几个认知: 1.联级特征融合模块 主要用于残差网络最后的残差块融合上 其中 R5 是经过 Res5 通过 33 的卷积获得的特征图,该特征图保持空间分辨率不变,并将通道的数…

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此&…

ubuntu下安装vscode代码编辑器

1、安装gcc(安装前准备工作) ubuntu下安装gcc报错: sudo apt get install gcc 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 6809(unattended-upgr)持有 方式1:没有…

判断一个点是否在一个多边形内部

1 原理 如下图所示, 四边形ABCD, P在四边形内部,Q在四边形外部。 通过观察可以发现, 当点在四边形内部时, 如果按顺时针方向的话, 点P在四条边AB, BC, CD, DA的右侧。 当然如果按逆时针的话, 点…

为什么客户跟踪对客户成功很重要?如何正确做到这一点?

如果您想以客户为中心,了解您的客户就非常重要。您可以利用客户沟通管理平台,例如SaleSmartly(SS客服)查看各种指标来了解客户对您的实际体验以及他们对您的期望。您需要长时间跟踪它们,注意它们的变化并找出原因&…

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包(主包和两个插件包) $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置,配置完重启(n…

[国产MCU]-W801开发实例-MQTT客户端通信

MQTT客户端通信 文章目录 MQTT客户端通信1、MQTT介绍2、W801的MQTT客户端相关API介绍3、代码实现本文将详细介绍如何在W801中使用MQTT协议通信。 1、MQTT介绍 MQTT 被称为消息队列遥测传输协议。它是一种轻量级消息传递协议,可通过简单的通信机制帮助资源受限的网络客户端。 …

【笔试强训选择题】Day36.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!! 文章目录 前言一、Day…

【每日运维】RockyLinux8.6升级OpenSSH9.4p1

为什么需要升级openssh呢,因为很多项目进行漏扫结果都会涉及到这个服务器核心组件,一想到以前升级openssh带来的各种依赖性问题就头疼,不管是什么发行版,升级这个东西真的很烦,这次发现可能还会有好一点的通用一点的升…

GUIslice Builder 安装及使用

GUIslice Builder是一个可视化UI设计工具,可以简化GUIslice的UI设计流程。下面是GUIslice Builder的安装和使用步骤: 首先,下载GUIslice Builder并解压缩文件。 然后,进入解压后的文件夹,并运行GUIsliceBuilder.exe。…

SpringBoot项目--电脑商城【用户注册】

1.创建数据表 1.1 创建t_user表 CREATE TABLE t_user (uid INT AUTO_INCREMENT COMMENT 用户id,username VARCHAR(20) NOT NULL UNIQUE COMMENT 用户名,password CHAR(32) NOT NULL COMMENT 密码,salt CHAR(36) COMMENT 盐值,phone VARCHAR(20) COMMENT 电话号码,email VARCH…

自然语言处理(七):来自Transformers的双向编码器表示(BERT)

来自Transformers的双向编码器表示(BERT) BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,由Google于2018年提出。它是基于Transformer模型架构的深度双向&#xff0…