9.2.tensorRT高级(4)封装系列-自动驾驶案例项目self-driving-深度估计

news2024/11/26 18:52:22

目录

    • 前言
    • 1. 深度估计
    • 总结

前言

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

本次课程学习 tensorRT 高级-自动驾驶案例项目self-driving-深度估计

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

在这里插入图片描述

1. 深度估计

这节我们学习深度估计模型的分析,我们的目的是找到深度估计的 onnx,分析其 onnx 的大致使用逻辑,然后写出最简洁版本的 predict.py,大体可以分为以下三步:

1. 打开深度估计的 onnx,查看其输入与输出

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

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

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

在这里插入图片描述

图1 onnx模型

从导出的 onnx 模型我们可以知道输入的 1x3x256x512,输出存在 6 个

我们再分析项目中的 image_processor/depth_engine.cpp 代码可以得出具体的预处理所做的工作:(详细分析请参照视频)

1. 输入是 1x3x256x512,input.1

2. 输出是 1x1x256x512,2499 节点

3. normalize.mean = 0.485f,norm = 0.229f

4. y = (x / 255.0 - mean) / norm

5. resize 部分不搞那么复杂,直接 resize

6. 颜色方面,需要 cvtColor → \rightarrow to RGB

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

import onnxruntime
import cv2
import numpy as np

session = onnxruntime.InferenceSession("workspace/ldrn_kitti_resnext101_pretrained_data_grad_256x512.onnx", provider_options=["CPUExecutionProvider"])

image = cv2.imread("workspace/imgs/dashcam_00.jpg")
image = cv2.resize(image, (512, 256))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = (image / 255.0)
mean = [0.485, 0.456, 0.406]
norm = [0.229, 0.224, 0.225]
image_tensor = ((image_tensor - mean) / norm).astype(np.float32)
image_tensor = image_tensor.transpose(2, 0, 1)[None]

prob = session.run(["2499"], {"input.1": image_tensor})[0]

print(prob.shape)

prob = prob[0, 0] * -5 + 255
y = int(prob.shape[0] * 0.18)
prob = prob[y:]

cv2.imwrite("depth.jpg", prob)

输出如下图:

在这里插入图片描述

图2 预处理验证

可以看到输出符合我们的预期,输出的深度估计图如下所示:

在这里插入图片描述

图3 深度估计图

另外我们还可以通过 matplotlib 来可视化,代码如下所示:

import onnxruntime
import cv2
import numpy as np
import matplotlib.pyplot as plt

session = onnxruntime.InferenceSession("workspace/ldrn_kitti_resnext101_pretrained_data_grad_256x512.onnx", provider_options=["CPUExecutionProvider"])

image = cv2.imread("workspace/imgs/dashcam_00.jpg")
image = cv2.resize(image, (512, 256))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image_tensor = (image / 255.0)
mean = [0.485, 0.456, 0.406]
norm = [0.229, 0.224, 0.225]
image_tensor = ((image_tensor - mean) / norm).astype(np.float32)
image_tensor = image_tensor.transpose(2, 0, 1)[None]

prob = session.run(["2499"], {"input.1": image_tensor})[0]

print(prob.shape)

prob = prob[0, 0]
y = int(prob.shape[0] * 0.18)
prob = prob[y:]

plt.imsave("depth.jpg", prob, cmap='plasma_r')

输出的深度估计图如下所示:

在这里插入图片描述

图4 深度估计图(matplotlib)

总结

本次课程学习了开源项目中的深度估计案例,主要是对深度估计模型的 onnx 进行了简单分析,并通过对项目代码的分析将预处理部分理清楚,然后通过 onnxruntime 进行了简单验证,并对最终的深度估计结果进行了可视化显示

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

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

相关文章

【电路参考】缓启动电路

一、外部供电直接上电可能导致的问题 1、在热拔插的过程中,两个连接器的机械接触,触点在瞬间会出现弹跳,电源不稳,发生震荡。这期间系统工作可能造成不稳定。 2、由于电路中存在滤波或大电解电容,在上电瞬间&#xff…

基于ResNet18网络训练二分类模型

目录 一、背景介绍 二、数据构建 三、模型构建及训练 3.1 采用预训练的权重进行训练 3.2 固定模型的参数,训练过程中不更新 3.3 如何保存训练好的模型? 3.4 如何查看可视化训练过程? 四、模型预测 五、查看网络各层的参数 六、可视…

船舶稳定性和静水力计算——绘图体平面图,静水力,GZ计算(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Navigation2学习笔记--总揽nav2_bringup导航包launch文件

launch文件是一个包的窗口,通过这个窗口我们可以知道一个软件包能干什么,具体调动了什么节点,需要加载什么参数,下面我们从总体看里面每个launch文件的作用。 环境:utuntu20.04 ros2 foxy nav2不同版本大同小异。 …

keil 编译stm32,编译信息释义

文章目录 上图中: Code:表示代码大小,占用 279420 字节。 RO-Data:表示只读数据所占的空间大小,一般是指 const 修饰的数据大小。 RW-Data:表示有初值(且非 0)的可读写数据所占的空…

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤

在Ubuntu上安装CUDA和cuDNN以及验证安装步骤 本教程详细介绍了如何在Ubuntu操作系统上安装CUDA(NVIDIA的并行计算平台)和cuDNN(深度神经网络库),以及如何验证安装是否成功。通过按照这些步骤操作,您将能够…

git企业级使用

1.初始Git 1.1创建Git仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init ,注意命令要在⽂件⽬录下执⾏,例如:…

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana(可视化管理elastic search) docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连,默认的网络不会有这功能。 一定…

sqli-labs复现

sqli-labs第一关复现 环境搭建下载phpstudy下载sqli-labs浏览器加载 第一关复现 环境搭建 下载phpstudy phpstudy是一个可以快速帮助我们搭建web服务器环境的软件 官网:https://www.xp.cn/ 这里我选择的是windows 64bit 客户端版本,安装路径为C:\php…

docker 安装xxljob

1. 安装mysql镜像 2.初始化xxljob的数据库和表 一、初始化db:https://codechina.csdn.net/mirrors/xuxueli/xxl-job/-/blob/2.3.1/doc/db/tables_xxl_job.sql 对脚本进行修改,添加ROW_FORMATDYNAMIC 安装xxljob 镜像 docker pull xuxueli/xxl-job-admin:2.3.1 …

networkX-02-基础指标

文章目录 1.度1.1 度1.2 入度1.3 出度1.4 加权度1.5 邻居节点1.5.1 邻居节点计算1.5.2 出度邻居节点1.5.3 入度邻居节点 2.节点数、边数3.最短路径3.1 最短路径(不带权重)3.2 最短路径(带权重) 4.计算图中所有的最短路径 教程仓库地址:github networkx_tutorial imp…

肖sir__设计测试用例方法之等价类02_(黑盒测试)

设计测试用例方法之等价类02_(黑盒测试) 一、掌握常用的设计方法: 黑盒测试方法:等价类、边界值,状态迁移法、场景法、判定表、因果图、正交表,(7种) 经验测试方法:错误推测法、异常…

file.raw和file在formdata中上传时遇到的坑!!

首先是这样,我在写一个表单上传页面的时候,结合elementeplus遇到了需要上传图片文件和视频文件的情况,一顿上网猛搜,经过一二十篇博客浏览下来,找到了三四篇可以参考,但是对于到底是上传file还是file.raw说…

通过ref 操作dom , 点击按钮后跳转到页面指定图片位置

滚动图片到视图 定义了一个名为 scrollToIndex 的函数,它接受一个参数 index。当按钮被点击时,这个函数会被调用,并根据传入的 index 值来滚动到对应的图片。 以 alt 来标记图片位置 alt“Tom” import { useRef } from "react";c…

【开发语言】C语言与Python的互操作详解

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

JDK8安装及系统变量配置(包含错误处理)

jdk安装 一.下载JDK二.安装三.配置系统变量四.可能遇到的问题1.显示已经安装的问题 或者 读取注册表项值失败2.原因3.解决 五.验证安装成功 一.下载JDK JDK下载官网 二.安装 双击之后,一直下一步就ok 三.配置系统变量 1.找到配置系统变量的地方 2.配置系统变…

[E2E Test] Python Behave Selenium 一文学会自动化测试

前言 本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。 项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium 核心概念 1. 什么是E2E Test E2E即End-to-end,意思是从头到尾…

Linux执行命令

命令格式 主命令 选项 参数(操作对象)例如: 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令(builtin):shell程序自带的命令。 外部命令:有独立…

tensorRT从零起步高性能部署:课程总结

目录 前言1. cuda驱动API2. cuda运行时API3. tensorRT基础4. tensorRT高级5. tensorRT封装6. 自动驾驶案例项目总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍&…

1、Flutter移动端App实战教程【环境配置】

一、概述 Flutter是Google用以帮助开发者在IOS和Android 两个平台开发高质量原生UI的移动SDK,一份代码可以同时生成IOS和Android两个高性能、高保真的应用程序。 二、渲染机制 之所以说Flutter能够达到可以媲美甚至超越原生的体验,主要在于其拥有高性…