TRT4-trt-integrate -self-driving道路分析

news2024/11/25 11:00:16

1#先看ONNX 查看大概结构

首先我们来看一下这个onnx:

可以看到这是一个全卷积网络,因为输入输出的宽高都一样

后来的这里是加入了softmax,所以获得的是概率值,所以最终的输出output是1*512*596*4的概率值。仅仅是不确定四个通道代表什么?

有以下可能:
1#车道线

2#可行使区域

3#不可行使区域

4#马路牙子

2#查看预处理方法

#elif defined(MODEL_TYPE_ONNX)
#include "inference_helper_tensorrt.h"      // to call SetDlaCore
#define MODEL_NAME  "road-segmentation-adas-0001.onnx"
#define TENSORTYPE  TensorInfo::kTensorTypeFp32
#define INPUT_NAME  "data"
#define INPUT_DIMS  { 1, 512, 896, 3 }
#define IS_NCHW     false
#define IS_RGB      false
#define OUTPUT_NAME "tf.identity"

这里就能看到首先输入的名字是data,输入是1*512*896*3,输出的name是identity。至今为止一切都和onnx对的上

    input_tensor_info.normalize.mean[0] = 0;
    input_tensor_info.normalize.mean[1] = 0;
    input_tensor_info.normalize.mean[2] = 0;
    input_tensor_info.normalize.norm[0] = 1 / 255.f;
    input_tensor_info.normalize.norm[1] = 1 / 255.f;
    input_tensor_info.normalize.norm[2] = 1 / 255.f;
    input_tensor_info_list_.push_back(input_tensor_info);   

这里是做了一个norm


int32_t SemanticSegmentationEngine::Process(const cv::Mat& original_mat, Result& result)
{
#ifndef ENABLE_SEGMENTATION
    return kRetOk;
#endif

    if (!inference_helper_) {
        PRINT_E("Inference helper is not created\n");
        return kRetErr;
    }
    /*** PreProcess ***/
    const auto& t_pre_process0 = std::chrono::steady_clock::now();
    InputTensorInfo& input_tensor_info = input_tensor_info_list_[0];

    /* do resize and color conversion here because some inference engine doesn't support these operations */
    int32_t crop_x = 0;
    int32_t crop_y = 0;
    int32_t crop_w = original_mat.cols;
    int32_t crop_h = original_mat.rows;
    cv::Mat img_src = cv::Mat::zeros(input_tensor_info.GetHeight(), input_tensor_info.GetWidth(), CV_8UC3);
    CommonHelper::CropResizeCvt(original_mat, img_src, crop_x, crop_y, crop_w, crop_h, IS_RGB, CommonHelper::kCropTypeStretch);
    //CommonHelper::CropResizeCvt(original_mat, img_src, crop_x, crop_y, crop_w, crop_h, IS_RGB, CommonHelper::kCropTypeCut);
    //CommonHelper::CropResizeCvt(original_mat, img_src, crop_x, crop_y, crop_w, crop_h, IS_RGB, CommonHelper::kCropTypeExpand);

然后就是process了,因为我的cropx和y都是0,而且type是Stretch,所以这里是仅仅只做了一个resize,其他的都没作。

将process打开

因为swap_color是false,所以BGR----》RGB 不会做

最终,因为作者要提速:

    /* Convert normalize parameter to speed up */
    for (auto& input_tensor_info : input_tensor_info_list) {
        ConvertNormalizeParameters(input_tensor_info);
    }

所以又将norm变回去了。

手写predict

import onnxruntime
import cv2
import numpy as np
session = onnxruntime.InferenceSession("workspace/road-segmentation-adas.onnx",providers=["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]

cv2.imwrite("prob.jpg" , prob[0 , : , : , 0])

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

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

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

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

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

相关文章

关于生产企业原材料的订购与运输问题

之前学校培训时候练习过的数学建模练习题,发出来分享一下~

《C++ Primer》第3章 字符串、向量和数组(一)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 3.1 命名空间的using声明(P74) 作用域操作符 :: 表示从左侧名字所示的作用域中寻找右侧名字,因此 std::cin 的意思就是使用命名空间 std 中的 cin 。 为了方便并安全地使…

JAVA -华为真题-分奖金

需求: 公司老板做了一笔大生意,想要给每位员工分配一些奖金,想通过游戏的方式来决定每个人分多少钱。按照员工的工号顺序,每个人随机抽取一个数字。按照工号的顺序往后排列,遇到第一个数字比自己数字大的,那么&#xf…

【IoT】生产制造:锅仔片上机做 SMT 加工吗?

目录 简介 锅仔片 简介 由于最近做产品用到了锅仔按键,由于单品用量过多,但是成品锅仔按键价格又太高,不适合量产。 这个时候就想到了锅仔片,问题又来了,锅仔片是否可以上机呢? 答案是肯定的。 锅仔片…

Pytest系列-使用自定义标记mark

简介 pytest 可以支持自定义标记,自定义标记可以把一个 web 项目划分为多个模块,然后指定模块名称执行 Pytest 里面自定义标记 用法:将pytest.mark.标记名称 放到测试函数或者类上面 使用: 执行时加上 -m 标记名 进行用例筛选…

K8S:Yaml文件详解及编写示例

文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例(1)相关标签介绍(2)Deployment类型编写nginx服务(3)k8s集群中的port介绍&#x…

Revit SDK 介绍:TraverseSystem 用广度遍历的方式遍历MEP系统

前言 这个例子介绍了用广度遍历的方式遍历MEP系统。 内容 打开 Revit 自带例子,选择红框中的某条风管,不要选择机械,图中选中只是为了和遍历结果对应: 红色区域到风管机的遍历结果: 核心逻辑 遍历逻辑主函数&am…

Visual Studio将C#项目编译成EXE可执行程序

经常看文章时会收获不少实用工具,有的在github上是编译好的,有的则是未编译的项目文件。所以经常会使用Visual Studio编译项目文件成exe可执行程序,以下为编译的流程。 第一步,从github上下载项目文件,举个例子&#…

解决`SQLyog Trial`试用到期的问题(提供一个脚本解决方案)

文章目录 一、要删除的注册表项二、写了个脚本干这个事儿三、最后 本文将总结SQLyog Trial试用到期的问题。 其实解决起来很简单,就是将SQLyog相关注册表删掉即可 一、要删除的注册表项 WinR打开运行,输入regedit回车,打开注册表 在HKEY_C…

基于Elasticsearch的多文档检索 比如 商品(goods)、案例(cases)

概述 Elasticsearch多文档聚合检索 详细 记得把这几点描述好咯:需求(要做什么) 代码实现过程 项目文件结构截图 演示效果 应用场景 我们需要在五种不同的文档中检索数据。 比如 商品(goods)、案例(ca…

汇编程序设计MOOC精选题

一、微型计算机基础 1.微型计算机各部件之间是用(系统总线)连接起来的 2.冯诺依曼结构确定计算机的五个基本部件:i/o,存储器、控制器和(运算器) 微处理器通过(数据)总线 向存储器和…

java程序处理三张表要进行怎么样的操作

首先第一步梳理思路,id没有存在说明是新添加的,如果id存在那就是对现有文章的修改。 /*** 发布文章或保存草稿** param dto* return*/Overridepublic ResponseResult submitNews(WmNewsDto dto) {//0.条件判断if(dto null||dto.getContent() null){ret…

CKA 真题练习(十六)备份还原etcd

题目: 首先,为运行在 https://11.0.1.111:2379 上的现有 etcd 实例创建快照并将快照保存到 /var/lib/backup/etcd-snapshot.db (注意,真实考试中,这里写的是 https://127.0.0.1:2379) 为给定实例创建快照预计能在几秒钟内完成。 …

Java 时间范围

前端使用Element-ui 时间范围组件 后端注意在Vo里面时间设置String类型不要设置Date类型 XMl组件字段映射成功性

【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑

转载知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具 项目地址:赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现 在上一节的课程中,您已经实现了通过触控给刚体施…

LIO-SAM论文与代码总结

看了一些注释版的代码和博客,很多都很详细,但是有的看起来比较绕,或者对一些名词和定义的解释有歧义,不一定就说错了,但是仍然不方便自己理解,所以自己梳理一下,顺便记录。 目录 原文附带架构…

js 小数相乘后,精度缺失问题,记录四舍五入,向下取整

在做项目的时候,有一个计算金额的,结果发现计算的金额总是缺失0.01,发现相乘的时候,会失去精度,如图所示。被这整的吐血,由于计算逻辑由前端计算,所以传值后端总出错(尽量后端计算)。 还发现to…

React Native 环境配置(mac)

React Native 环境配置(mac) 1.Homebrew2.Node.js、WatchMan3.Yarn4.Android环境配置1.安装JDK2.下载AndroidStudio1.国内配置 Http Proxy2.安装SDK1.首先配置sdk的路径2.SDK 下载 3.创建模拟器4.配置 ANDROID_HOME 环境变量 5.IOS环境1.升级ruby&#x…

SQL8 查找某个年龄段的用户信息

描述 题目:现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。 用户信息表:user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543…

神经网络 06(优化方法)

一、优化方法 网络搭建好,损失函数设计好之后, 根据损失函数更新参数(权重,偏移)。参数更新过程就是一个神经网络优化过程。 二、梯度下降方法 梯度下降法简单来说就是一种寻找使损失函数最小化的方法。从数学上的角度来看,梯度…