当前位置: 首页 > news >正文

使用 TensorFlow FasterRCNN 网络进行目标检测

目录

描述

此示例的工作原理

处理输入图形

数据准备

sampleUffFasterRCNN 插件

验证输出

TensorRT API 层和操作

TensorRT API 层和操作

先决条件

运行示例

示例 --help 选项

附加资源

许可

变更记录

已知问题


本示例,sampleUffFasterRCNN,演示了如何使用基于 TensorFlow 的 Faster-RCNN 模型。它使用了 ProposalCropAndResize TensorRT 插件来实现建议层和 ROIPooling 层,因为 TensorRT 不支持它们。

此示例的工作原理

UFF Faster R-CNN 网络在网络的单次前向传递中执行目标检测和定位任务。Faster R-CNN 网络是在 ResNet-10 骨干网络(特征提取器)上训练的,用于检测 4 类对象:AutomobileRoadsignBicyclePerson,以及 background 类(无对象)。

该示例使用 TensorRT 插件来运行 UFF Faster R-CNN 网络。为了使用这些插件,需要预处理 TensorFlow 图,我们使用 GraphSurgeon 实用程序来执行此操作。

此网络的主要组成部分包括图像预处理器、特征提取器、区域建议网络(RPN)、建议层、ROIPooling(CropAndResize)、分类器和后处理器。

图像预处理器 图像图形预处理器步骤负责调整图像大小。将图像调整为大小为 3x272x480(CHW)的张量。此步骤还对图像执行逐通道均值减法。在预处理之后,输入图像的通道顺序为 BGR,而不是 RGB

特征提取器 图形的特征提取器部分在预处理图像上运行 ResNet10 网络。生成的特征映射由 RPN 层和建议层使用,用于生成可能包含对象的感兴趣区域(ROIs)。作为第二分支,特征映射还在 ROIPooling(或更确切地说是 CropAndResize 层)中使用,以从建议层输出的指定 ROIs 裁剪特征映射的补丁。

在此网络中,特征映射来自 ResNet-10 骨干的中间层输出。中间层的累积步幅为 16。

区域建议网络(RPN) RPN 使用步幅-16 骨干的特征映射,并在其中附加一个小型卷积神经网络(CNN)头部,用于检测图像的特定区域是否包含对象。它还输出候选对象的粗略坐标。

建议层 建议层接受 RPN 的输入,并对 RPN 的候选框进行一些微调。微调包括选择置信度最高的顶部框并针对它们执行 NMS(非最大抑制)。最后,根据 NMS 操作后的置信度再次选择置信度最高的顶部框。

此操作在 Proposal 插件中实现为 TensorRT 插件。

CropAndResize CropAndResize 层执行 Caffe 实现的原始 ROIPooling 层的 TensorFlow 实现。CropAndResize 层将建议层的 ROIs 调整到公共目标大小,输出结果后由分类器处理,以区分 ROI 属于哪个类别。CropAndResize 操作和 ROIPooling 操作之间的区别在于前者使用双线性插值,而后者使用池化。

此操作在 CropAndResize 插件中实现为 TensorRT 插件。

分类器 分类器是一个小型网络,接受 CropAndResize 层的输出,并区分 ROI 属于哪个类别。除此之外,它还提供了从 RPN 层输出的坐标的增量值。

后处理器 后处理器将分类器输出的增量值应用于 RPN 输出的坐标,并在 NMS 后获取最终检测结果。

具体来说,本示例执行以下步骤:

  • 处理输入图形
  • 数据准备
  • sampleUffFasterRCNN 插件
  • 验证输出

处理输入图形

TensorFlow FasterRCNN 图包含一些当前不受 TensorRT 支持的操作。通过对图进行预处理,我们可以将图中的多个操作合并成一个单独的自定义操作,可以在 TensorRT 中实现为插件层。目前,预处理程序提供了将命名空间中的所有节点合并为一个自定义节点的功能。

要使用预处理程序,应使用 -p 标志和配置文件来调用 convert-to-uff 实用程序。配置脚本还应包括将嵌入在生成的 .uff 文件中的所有自定义插件的属性。在此示例中,UFF Faster R-CNN 的当前配置脚本位于此示例中的 config.py 中。

数据准备

生成的网络具有名为 input_1 的输入节点,输出节点的名称为 dense_class/Softmaxdense_regress/BiasAddproposal。UFF 解析器在示例中注册了这些节点。

此示例中 UFF Faster R-CNN 网络的输入是 3 通道 480x272 图像。在示例中,我们从输入图像中减去每通道的均值值。

由于 TensorRT 不依赖于任何计算机视觉库,因此图像以每像素的二进制 R、G 和 B 值表示。格式为 Portable PixMap(PPM),这是一种 netpbm 颜色图像格式。在此格式中,每像素的 R、G 和 B 值由整数字节(0-255)表示,并逐像素依次存储。由于实现原因,输入图像的通道顺序实际上是 BGR,而不是 RGB。

有一个名为 readPPMFile 的简单 PPM 读取函数。

sampleUffFasterRCNN 插件

关于如何创建 TensorRT 插件的详细信息可在 扩展 TensorRT 自定义层 中找到。

convert-to-uff 命令的 config.py 应将自定义层映射到 TensorRT 中的插件名称,方法是修改 op 字段。插件参数的名称也应与 TensorRT 插件期望的参数名称完全匹配。

如果定义的 config.py 如上所述,那么 NvUffParser 将能够解析网络并以正确的参数调用适当的插件。

以下是在 UFF Faster R-CNN 中为 TensorRT 实现的一些插件层的详细信息。

CropAndResize 插件 CropAndResize 插件根据建议层的 ROI 坐标从特征图中裁剪补丁,并将其调整到公共目标大小,例如 7x7。输出张量用作紧随 CropAndResize 插件的分类器的输入。

Proposal 插件 Proposal 插件对来自 RPN 的候选框进行了微调。微调包括根据它们的置信度选择置信度最高的顶部框,执行 NMS 操作,最后选择经 NMS 操作后具有最高置信度的顶部框。

验证输出

在创建生成器之后(请参见 使用 C++ 构建引擎)并序列化引擎(请参见 使用 C++ 序列化模型),我们可以执行推理。有关反序列化和运行推理的步骤,请参阅 使用 C++ 执行推理。UFF FasterRCNN 网络的输出可读取。通过在图像上绘制边界框来可视化结果。

TensorRT API 层和操作

在此示例中,使用以下层。有关这些层的更多信息,请参阅 TensorRT 开发人员指南:层 文档。

激活层 激活层实现逐元素激活函数。具体来说,本示例使用类型 kRELU 的激活层。

TensorRT API 层和操作

在此示例中,使用以下层。有关这些层的更多信息,请参见TensorRT开发人员指南:层文档。

激活层 激活层实现逐元素激活函数。具体而言,此示例使用类型为kRELU的激活层。

卷积层 卷积层计算具有或不具有偏差的2D(通道,高度和宽度)卷积。

全连接层 全连接层实现矩阵-向量乘积,具有或不具有偏差。

填充层 填充层实现对张量的两个最内层维度进行零填充。

插件层 插件层是用户定义的,提供了扩展TensorRT功能的能力。有关更多详细信息,请参见使用自定义层扩展TensorRT。

池化层 池化层在通道内实现池化。支持的池化类型有maximumaveragemaximum-average blend

缩放层 缩放层实现每个张量、每个通道或每个元素的仿射变换和/或常数值的指数化。

SoftMax层 SoftMax层根据用户指定的输入维度在输入张量上应用SoftMax函数。

先决条件

  1. 安装UFF工具包和图形外科医生。根据您的TensorRT安装方法,选择使用TensorRT的安装方法安装工具包和图形外科医生(请参见TensorRT安装指南:安装TensorRT中的说明)。

  2. 我们提供一个bash脚本用于下载模型以及此示例所需的其他数据:./download_model.sh

    模型将在uff_faster_rcnn目录中下载并解压缩,pb模型是uff_faster_rcnn/faster_rcnn.pb

    除了pb模型,目录中还包含一些PPM图像和list.txt。这些PPM图像是此示例中使用的测试图像。list.txt在TensorRT的INT8模式下用于列出在TensorRT的INT8校准步骤中使用的图像名称。

  3. 使用UFF转换器对TensorFlow模型进行预处理。

    1. 从上一步下载的目录中将TensorFlow protobuf文件(faster_rcnn.pb)复制到工作目录,例如/usr/src/tensorrt/data/faster-rcnn-uff

    2. 修复UFF转换器。

      应用修复UFF转换器的补丁以修复UFF软件包中Softmax层的问题。让UFF_ROOT表示Python UFF软件包的根目录,例如/usr/lib/python2.7/dist-packages/uff

      然后,使用以下命令应用补丁: patch UFF_ROOT/converters/tensorflow/converter_functions.py < fix_softmax.patch

      补丁文件fix_softmax.patch是在TensorRT 5.1 GA中使用UFF软件包版本0.6.3生成的。在应用补丁之前,请确保您的UFF软件包版本也为0.6.3。对于TensorRT 6.0,请忽略此问题,因为它应该已经修复。

    3. 运行以下命令进行转换。

       

      convert-to-uff -p config.py -O dense_class/Softmax -O dense_regress/BiasAdd -O proposal faster_rcnn.pb

      这将保存转换后的.uff文件在与输入相同的目录中,文件名为faster_rcnn.uff

      config.py脚本指定了UFF Faster R-CNN TensorFlow图所需的预处理操作。config.py脚本中使用的插件节点和插件参数应与TensorRT中注册的插件匹配。

  4. 在INT8模式下运行示例还需要一个带有所有校准图像列表的list.txt文件(仅包含基名,不包括后缀)。将list.txt复制到包含pb模型的同一目录中。

  5. 将PPM图像复制到包含pb模型的同一目录中。

运行示例

  1. 按照顶层指南构建OSS示例(包括此示例,当然)。二进制文件命名为sample_uff_faster_rcnn将创建在build/cmake/out目录中。

  2. 运行示例以执行对象检测和定位。

    在FP32模式下运行示例:

     

    ./sample_uff_faster_rcnn --datadir /data/uff_faster_rcnn -W 480 -H 272 -I 2016_1111_185016_003_00001_night_000441.ppm

    在INT8模式下运行示例:

     

    ./sample_uff_faster_rcnn --datadir /data/uff_faster_rcnn -i -W 480 -H 272 -I 2016_1111_185016_003_00001_night_000441.ppm

  3. 验证示例是否成功运行。如果示例成功运行,您应该看到类似以下的输出:

    在2016_1111_185016_003_00001_night_000441.ppm中检测到汽车,置信度为99.9734%
    在2016_1111_185016_003_00001_night_000441.ppm中检测到汽车,置信度为99.9259%
    在2016_1111_185016_003_00001_night_000441.ppm中检测到汽车,置信度为98.7359%
    在2016_1111_185016_003_00001_night_000441.ppm中检测到汽车,置信度为92.4371%
    在2016_1111_185016_003_00001_night_000441.ppm中检测到汽车,置信度为89.7888%
    此输出表明示例成功运行PASSED。

示例 --help 选项

要查看可用选项及其描述的完整列表,请使用 -h--help 命令行选项。

附加资源

以下资源提供有关sampleUffFasterRCNN的更深入了解。

文档

  • NVIDIA TensorRT示例简介
  • 使用C++ API使用TensorRT
  • NVIDIA TensorRT文档库

许可

有关使用、复制和分发的条款和条件,请参阅TensorRT软件许可协议文档。

变更记录

2019年7月 这是README.md文件和示例的第一个版本。

已知问题

此示例中没有已知问题。

相关文章:

使用 TensorFlow FasterRCNN 网络进行目标检测

目录 描述 此示例的工作原理 处理输入图形 数据准备 sampleUffFasterRCNN 插件 验证输出 TensorRT API 层和操作 TensorRT API 层和操作 先决条件 运行示例 示例 --help 选项 附加资源 许可 变更记录 已知问题 本示例&#xff0c;sampleUffFasterRCNN&#xff0…...

数据结构——顺序表(SeqList)

目录 1. 顺序表介绍 2. 顺序表工程 2.1 顺序表定义 2.1.1 静态顺序表 2.1.2 动态顺序表 2.2顺序表接口 2.2.1 顺序表初始化 2.2.2 顺序表打印 2.2.3 顺序表销毁 2.2.4 顺序表数据插入 2.2.4.1 容量检查 2.2.4.2 顺序表尾插 2.2.4.3 顺序表头插 2.2.4.4 顺序表随机…...

Uni-App 快捷登录

uniapp 实现一键登录前置条件: 开通uniCloud, 开通一键登录功能参考的文档 : 官网 - 一键登录uniapp指南 : https://uniapp.dcloud.net.cn/univerify.html#%E6%A6%82%E8%BF%B0 官网 - 一键登录开通指南 : https://ask.dcloud.net.cn/article/37965 官网 - unicloud使用指南 htt…...

DbUtils + Druid 实现 JDBC 操作 --- 附BaseDao

文章目录 Apache-DBUtils实现CRUD操作1 Apache-DBUtils简介2 主要API的使用2.1 DbUtils2.2 QueryRunner类2.3 ResultSetHandler接口及实现类 3 JDBCUtil 工具类编写3.1 导包3.2 编写配置文件3.3 编写代码 4 BaseDao 编写 Apache-DBUtils实现CRUD操作 1 Apache-DBUtils简介 com…...

css:元素居中整理水平居中、垂直居中、水平垂直居中

目录 1、水平居中1.1、行内元素1.2、块级元素 2、垂直居中2.1、单行文字2.2、多行文字2.3、图片垂直居中 3、水平垂直居中参考文章 1、水平居中 1.1、行内元素 行内元素&#xff08;比如文字&#xff0c;span&#xff0c;图片等&#xff09;的水平居中&#xff0c;其父元素中…...

从零开始的目标检测和关键点检测(二):训练一个Glue的RTMDet模型

从零开始的目标检测和关键点检测&#xff08;二&#xff09;&#xff1a;训练一个Glue的RTMDet模型 一、config文件解读二、开始训练三、数据集分析四、ncnn部署 从零开始的目标检测和关键点检测&#xff08;一&#xff09;&#xff1a;用labelme标注数据集 从零开始的目标检测…...

React18新特性?

文章目录 前言Automatic BatchingTransitionsSuspenseNew Hooks后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;react.js &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。…...

筹码博弈K线长阳选股公式,穿越筹码密集区

普通K线是由最高价、开盘价、最低价、收盘价四个价格构成的&#xff0c;而博弈K线是以这个四个价格对应的获利盘构成K线&#xff0c;反映筹码的获利情况。把鼠标移动到K线上&#xff0c;停留在对应的价格&#xff0c;就可以在右侧的筹码分布图看到相应的获利盘数据。&#xff0…...

微服务设计模式-架构真题(六十八)

UNIX的源代码控制工具(Source Code control System,SCCS)是项目开发中常用的&#xff08;&#xff09;。 源代码静态分析工具文档分析工具版本控制工具再工程工具 答案&#xff1a;C 解析&#xff1a; SCCS是版本控制工具 网闸的描述错误的是&#xff08;&#xff09;。 双…...

LeetCode----52. N 皇后 II

 题目 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n = 4 输出:2 解释:如上图所示,4 皇后问题存在两个不同的解法。 示例 2: 输入:n = …...

解决pycharm中,远程服务器上文件找不到的问题

一、问题描述 pycharm中&#xff0c;当我们连接到远程服务器上时。编译器中出现报错问题&#xff1a; cant open file /tmp/OV2IRamaar/test.py: [Errno 2] No such file or directory 第二节是原理解释&#xff0c;第三节是解决方法。 二、原理解释 实际上这是由于我们没有设置…...

虹科荣誉 | 喜讯!虹科成功入选“广州首届百家新锐企业”!!

文章来源&#xff1a;虹科品牌部 阅读原文&#xff1a;虹科荣誉 | 喜讯&#xff01;虹科成功入选“广州首届百家新锐企业”&#xff01;&#xff01; 近日&#xff0c;由中共广州市委统战部、广州市工商业联合会、广州市工业和信息化局、广州市人民政府国有资产监督管理委员会…...

如何利用Jmeter从0到1做一次完整的压测?这2个步骤很关键!

压测&#xff0c;在很多项目中都有应用&#xff0c;是测试小伙伴必备的一项基本技能&#xff0c;刚好最近接手了一个小游戏的压测任务&#xff0c;一轮压测下来&#xff0c;颇有收获&#xff0c;赶紧记录下来&#xff0c;与大家分享一下&#xff0c;希望大家能少踩坑。 一、压…...

基于STM32+微信小程序设计的智能门锁(4种开锁方式)_2023

一、项目介绍 1.1 项目背景 随着智能家居的普及,智能门锁作为一个非常重要的组成部分,受到了人们越来越多的关注。传统的机械锁门禁已经不能满足人们对于门锁安全、便捷性和智能化的需求,因此市场对于智能门锁的需求不断增加。而随着技术的发展,基于单片机的智能门锁已经…...

享受户外的美好时光:花园吊椅的魅力

拥有舒适的花园吊椅&#xff0c;就像在家中创造了一个度假天堂。这些轻松摇摆的座位为您提供了一个完美的地方&#xff0c;既能舒适躺卧&#xff0c;又能让您在家中的花园或庭院中感受到度假的氛围。度过美好时光的吊椅&#xff0c;将成为家庭花园的一大亮点&#xff0c;为您带…...

游戏中找不到d3dx9_43.dll怎么办,教你快速解决方法

在计算机的世界里&#xff0c;我们经常会遇到一些让人头疼的问题。比如&#xff0c;有一天&#xff0c;小明正在玩他最喜欢的游戏&#xff0c;突然弹出了一个错误提示&#xff1a;“由于找不到d3dx9_43.dll,无法继续执行代码”。小明感到非常困惑&#xff0c;不知道这是什么意思…...

蓝桥杯:买不到的数目

对于两个互质的正整数 n , m n,m n,m,请找出来不能被 n n n和 m m m组成的最大数 X X X 例如:对于4,7那么 X X X17&#xff0c;因为对于大于17的任一数都可由4和7组成。 重新翻译题目&#xff1a; 对于任一大于 X X X的正整数 Y Y Y满足 Y a n b m Y a \times nb \times m …...

Nginx简介,Nginx搭载负载均衡以及Nginx部署前端项目

目录 一. Nginx简介 Nginx的优点 二. Nginx搭载负载均衡 2.1 Nginx安装 2.1.1 安装依赖 2.1.2 解压nginx安装包 2.1.3 安装nginx 2.1.4 启动nginx服务 2.2 tomcat负载均衡 2.3 Nginx配置 三. Nginx前端部署 一. Nginx简介 NGINX&#xff08;读作&#xff1a;engi…...

QT5.15.2搭建Android编译环境及使用模拟器调试(全)

一、安装QT5.15.2 地址&#xff1a;下载 我电脑的windows的&#xff0c;所以选windows 由于官方安装过程非常非常慢&#xff0c;一定要跟着步骤来安装&#xff0c;不然慢到怀疑人生 1&#xff09;打开"命令提示符"&#xff08;开始 -> Windows 系统 -> 命令…...

npm install报 ERESOLVE unable to resolve dependency tree

三四年前的一个项目&#xff0c;打开&#xff0c;npm install 一下&#xff0c;结果报 ERESOLVE unable to resolve dependency tree。 以前install都一切顺利&#xff0c;现在就不行&#xff0c;那很大的可能是npm的版本不同。 PS D:\workSpace\code\*-admin-ui-master> n…...

CentOS 7上创建Python 3虚拟环境

在CentOS 7上创建Python 3虚拟环境可以使用virtualenv包。以下是创建Python 3虚拟环境的步骤&#xff1a; 确保已经安装了Python 3和pip。可以通过在终端中运行以下命令来检查它们是否已安装&#xff1a; python3 --version pip3 --version如果未安装&#xff0c;请使用以下…...

B端设计必看的9个开源组件库,值得收藏!

如果你想开发一款To B Web端产品&#xff0c;如何选择令人眼花缭乱的开源组件库&#xff1f;行业团队常用的B端开源组件库是什么&#xff1f;今天&#xff0c;我们将为您带来入门级开源组件库的介绍。你可以先有一个大致的了解&#xff0c;希望能对你有所帮助。未来&#xff0c…...

王坚院士:云计算与 GPT 的关系,就是电和电动机的关系

无论是行业&#xff0c;还是阿里&#xff0c;都身处巨变时。已经年过六十的王坚院士&#xff0c;重回阿里&#xff0c;重回大众视野&#xff0c;今年以来&#xff0c;在多个场合都能够看到他的身影。 而每一次他的分享&#xff0c;都值得我们细细品味。 以下为王坚院士在 202…...

Git代码合并流程规范

...

编译cef114.2 with h264

按照下面网页要求安装VS和SDK https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-development Win 10 deployment, Win 10 build system w/ VS2022 17.5, Win 10.0.22621 SDK, Ninja rem 配置winsock科学上网 netsh winhttp set prox…...

A股风格因子看板 (2023.11第01期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第01期&#xff0c;指数组合数据截止日2023-10-31&#xff0c;要点如下 近1年A股风格因子收益走…...

Session+Cookie实现登录认证

使用 Session 和 Cookie 实现登录认证的流程通常包括以下步骤&#xff1a; 1. 登录认证流程 用户登录&#xff1a; 用户在登录页面输入用户名和密码。 服务器验证用户的凭证&#xff08;用户名和密码&#xff09;是否正确。 创建会话&#xff08;Session&#xff09;&#xf…...

mac matplotlib显示中文

以下默认字体&#xff0c;在mac ventura上测试能成功显示中文&#xff1a; import matplotlib.pyplot as plt import matplotlib#from matplotlib import font_manager #plt.rcParams[font.sans-serif] [Heiti TC]#plt.rcParams[font.sans-serif] [Songti SC]#plt.rcParams[f…...

python自动化测试模板

1:准备html模版 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>接口自动化…...

MySQL 外连接和内连接的查询优化怎么做?

目录 1. 表连接方式的分类和需要注意的细节 2. 表连接时底层做了什么事&#xff1f; 3. 左外连接优化方案 4. 内连接优化方案 1. 表连接方式的分类和需要注意的细节 多表连接查询&#xff0c;大体上可以分为内连接与外连接。 内连接的意思就是把两个表有关联的部分都取出…...