DeepStream--测试resnet50分类模型

ResNet50是一种深度残差网络,50表示包含50层深度。该模型可以用于图像分类,物体检测等。

现在用DeepStream测试ResNet50分类模型。

1 资源

模型地址:https://github.com/onnx/models/blob/main/vision/classification/resnet/model/resnet50-v2-7.onnx,模型信息详见https://github.com/onnx/models/tree/main/vision/classification/resnet。

label文件:https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a

TensorRT的python测试代码:https://github.com/NVIDIA/TensorRT/blob/release/8.6/samples/python/introductory_parser_samples/onnx_resnet50.py

 nvinfer配置文件dstest_appsrc_config.txt:

[property]
gpu-id=0

labelfile-path=labels.txt
model-engine-file=resnet50.onnx_b1_gpu0_fp16.engine
onnx-file=resnet50-v2-7.onnx

infer-dims=3;224;224
net-scale-factor=0.01742919
offsets=114.75;114.75;114.75
network-type=1
input-object-min-width=64
input-object-min-height=64
model-color-format=1
#gie-unique-id=2
#operate-on-gie-id=1
#operate-on-class-ids=0
#classifier-async-mode=1
#classifier-threshold=0.51

#force-implicit-batch-dim=1
batch-size=1
network-mode=1
num-detected-classes=1000
interval=0
gie-unique-id=1
output-blob-names=495
#scaling-filter=0
#scaling-compute-hw=0
cluster-mode=2
is-classifier=1

[class-attrs-all]
pre-cluster-threshold=0.2
topk=20
nms-iou-threshold=0.5
 

测试图片broom.JPG:

如果要用DeepStream跑这个模型,只需要修改nvifner的配置文件。现在问题是怎么python处理转成nvinfer的配置文件。有几个注意的地方:

# 归一化

Python版的归一化,是按这个公式https://github.com/NVIDIA/TensorRT/blob/release/8.6/samples/python/introductory_parser_samples/onnx_resnet50.py#L73

        # This particular ResNet50 model requires some preprocessing, specifically, mean normalization.
        return (image_arr / 255.0 - 0.45) / 0.225

而nvinfer支持的是这个公式

y = net scale factor*(x-mean)

这就需要把分子分母同乘个数,最终变为y=0.01742919 *  (x - 114.75).

#第一个模型为分类模型

#nvinfer的大部分例子,第一个模型都是检测模型,这个例子第一个模型为分类模型。需要做如下设置:

network-type=1

#后处理

        python例子中要对推理后的数据,要做个argmax操作,也就是从1000个结果里,取可能性最大的。如果nvifner没有设parse-bbox-func-name, 那插件用的resnet的bbox解析函数,刚好就是从可能性里找最大的。

2 运行

将模型resnet50-v2-7.onnx,dstest_appsrc_config.txt,测试图片放在一起后,执行命令:

gst-launch-1.0 filesrc location=broom.JPG ! jpegdec ! videoconvert ! video/x-raw,format=I420 ! nvvideoconvert ! video/x-raw\(memory:NVMM\),format=NV12 ! mux.sink_0 nvstreammux name=mux batch-size=1 width=1280 height=720 ! nvinfer config-file-path=./dstest_appsrc_config.txt ! nvvideoconvert ! video/x-raw\(memory:NVMM\),format=RGBA ! nvdsosd ! nvvideoconvert ! video/x-raw,format=I420 ! jpegenc ! filesink location=out.jpg

3 问题

执行命令后,发现生成的图片也没有分类的字符串。

nvinfer插件和nvinfer底层库是开源,改了源代码之后,需要编译,替换对应库。在/opt/nvidia/deepstream/deepstream/sources/libs/nvdsinfer/nvdsinfer_context_impl_output_parsing.cpp加点打印之后,发现的到的分类是对的,索引462在label文件里就是broom,只是没有取到分类的标签字符串。打印如下:

......

probability:2.433594, m_ClassifierThreshold:0.000000
probability:1.642578, m_ClassifierThreshold:0.000000
fd,  attr.attributeValue:462
......

nvinfer的label解析函数InferPostprocessor::parseLabelsFile,要求文件是以分号相隔的,而这个label不是的。所以解析不成,nvinfer的代码是开源的,用户可以修改这个函数。相关代码如下:

NvDsInferStatus

InferPostprocessor::parseLabelsFile(const std::string& labelsFilePath)

{

    std::ifstream labels_file(labelsFilePath);

    std::string delim{';'};

    if (!labels_file.is_open())

......

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

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

相关文章

ubuntu安装完qt后发现找不到图标

layout: post # 使用的布局(不需要改) title: Qt启动问题 # 标题 subtitle: ubuntu安装完Qt #副标题 date: 2023-11-18 # 时间 author: BY ThreeStones1029 # 作者 header-img: img/about_bg.jpg #这篇文章标题背景图片 catalog: true # 是否归档 tags: …

[Android]创建TabBar

创建一个包含“首页”、“分类”和“我的”选项卡的TabBar并实现切换功能,通常可以通过使用TabLayout结合ViewPager或ViewPager2来完成。以下是一个基本的示例,展示了如何使用Kotlin和XML来实现这个功能。 1.添加依赖项到build.gradle dependencies {/…

CODING DevOps产品认证笔记

1.敏捷&精益&瀑布概述 1.1 敏捷软件开发 第一章敏捷软件开发背景 背景:乌卡时代 易变性:当今世界的变化越来越多越来越快,越来越不可预测。不确定性:历史上的任何一个时代所带来的经验已经无法为当今世界的所有变化提供参照。复杂性:事物间的…

函数式编程框架 functionaljava 简介

文章目录 一、函数式编程起源二、functionaljava 框架简介 一、函数式编程起源 ​ 函数式编程起源于数理逻辑(范畴论,Category Theory),起源于λ演算,这是一种演算法,它定义一些基础的数据结构&#xff0c…

ICCV2023 Tracking paper汇总(二)(多目标跟随、单目标跟随等)

十六、Integrating Boxes and Masks: A Multi-Object Framework for Unified Visual Tracking and Segmentation paper: https://openaccess.thecvf.com/content/ICCV2023/papers/Xu_Integrating_Boxes_and_Masks_A_Multi-Object_Framework_for_Unified_Visual_ICC…

【华为HCIP | 华为数通工程师】刷题日记1116(一个字惨)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

十二、Docker的简介

目录 一、介绍 Docker 主要由以下三个部分组成: Docker 有许多优点,包括: 二、Docker和虚拟机的差异 三、镜像和容器 四、Docker Hub 五、Docker架构 六、总结 一、介绍 Docker 是一种开源的应用容器平台,可以在容器内部…

aspose.cells java合并多个excel

背景 有需求需要把多个excel合并到一个excel文件里面,之前一直都是用python来处理办公自动化的东西,但是这个需求用python的openxyl库处理基本只能合并数据,样式没办法一比一合并过去,找了很多解决方案都没法实现,所以…

MATLAB算法实战应用案例精讲-【深度学习】卷积网络(Convolutional Network)

目录 前言 算法原理 01什么是神经网络? 02什么是卷积神经网络 卷积层 池化层

计算机网络期末复习(知识点)

一、计算机网络体系结构 计算机网络&因特网: 计算机网络定义:将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络关联软件及网络协议的管理和协调下,实…

Vue 设置v-html中元素样式

使用方式&#xff1a; <<< img { max-width: 100% } 如&#xff1a;要将v-html中的图片元素(img)的最大宽度设置为100%. <template><div ><div class"rtfDiv book" v-html"content"></div></div> </template&…

DSP2335的LED工程笔记

首先是确定时钟 在技术参考中&#xff0c;找到时钟章节 只能观察每个寄存器&#xff0c;才能看到寄存器控制那个外设的时钟 第二找到对应GPIO以及寄存器&#xff1b; 在我板子里面的原理图是 但是TI的提供的库函数是分ABC的&#xff0c;刚开始就不知道怎麽分。GPIO68到GPIO6…

fetch 获取流式数据(chatgpt的流式输出)

背景&#xff1a;项目中需要获取chatgpt实时返回的数据 使用场景&#xff1a;在对接chatgpt 语言模型的时候采取的这种方案&#xff0c;因为目前的大语言的模型的结果都是需要一点点计算的&#xff0c;如果提出的问题比较复杂就导致响应的时间过长。 好处&#xff1a;流式获取…

WSL2环境下Debian 12的Docker安装与配置

WSL设置相关&#xff1a; wsl -l -v # 查看当前配置情况正常配置如下&#xff1a; NAME STATE VERSION * Debian Running 2如果与以上有差异&#xff0c;按如下步骤进行配置&#xff1a; wsl --set-version 2 wsl --set-default-version 2 wsl --s…

【2017年数据结构真题】

请设计一个算法&#xff0c;将给定的表达式树&#xff08;二叉树&#xff09;转换成等价的中缀表达式&#xff08;通过括号反映次序&#xff09;&#xff0c;并输出。例如&#xff0c;当下列两棵表达式树作为算法的输入时&#xff1a; 输出的等价中缀表达式分别为(ab)(a(-d)) 和…

建立跨层全栈的区块链安全保障系统-应用层,系统层,设施层

目录 建立跨层全栈的区块链安全保障系统 应用层 系统层 设施层

深入理解注意力机制(上)-起源

一、介绍 近几年自然语言处理有很大的进展&#xff0c;从 2018 年 Google 推出的 BERT&#xff0c;到后来的 GPT、ChatGPT 等&#xff0c;这些模型当时能取得这样的成果&#xff0c;除了庞大的数据量及损害资源外&#xff0c;最重要的是的就是背后的Transformer模型&#xff0c…

开源博客项目Blog .NET Core源码学习(6:雪花算法)

Blog .NET项目中有多种数据类生成对象实例时需要唯一标识&#xff0c;一般做法要么使用GUID&#xff0c;也可以保存到数据库时使用数据库表的自增长ID&#xff0c;也可以自定义规则以确保产生不重复的唯一标识&#xff0c;而在Blog .NET项目中使用雪花算法生成唯一标识。   关…

Python中,我们可以使用pandas和numpy库对Excel数据进行预处理,包括读取数据、数据清洗、异常值剔除等

文章目录 一、什么是数据预处理二、对excel数据进行详细的数据预处理操作总结 一、什么是数据预处理 数据预处理是一种对数据进行清洗、整理、转换等操作的过程&#xff0c;旨在提高数据质量&#xff0c;使其适应模型的需求&#xff0c;从而改进数据挖掘或机器学习的结果。 数…

vscode 创建 运行c++ 项目

1 扩展 install c 2.1安装 mingw g 下载 MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net win32下载地址 Download x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z (MinGW-w64 - for 32 and 64 bit Windows) 2.2 把 文件夹 bin 路径 添加到环境…