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

这篇具有很好参考价值的文章主要介绍了使用 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文件和示例的第一个版本。

已知问题

此示例中没有已知问题。文章来源地址https://www.toymoban.com/news/detail-735933.html

到了这里,关于使用 TensorFlow FasterRCNN 网络进行目标检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月05日
    浏览(46)
  • 【Keras+计算机视觉+Tensorflow】实现基于YOLO和Deep Sort的目标检测与跟踪实战(附源码和数据集)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~         YOLO是端到端的物体检测深度卷积神经网络,YOLO可以一次性预测多个候选框,并直接在输出层回归物体位置区域和区域内物体所属类别,而Faster R-CNN仍然是采用R-CNN那种将物体位置区域框与物体分开训练的思想,

    2024年02月13日
    浏览(59)
  • 目标检测之FasterRcnn算法——训练自己的数据集(pytorch)

    数据集 数据集目录如上,VOC数据集的格式 JPEGImages目录下,放上自己的训练集和测试集 Annotations 下,放上自己的xml文档配置,如上。 在VOCdevkitVOC2012ImageSetsMain下,放上自己的train.txt和val.txt, 上面,我按照VOC的格式来的,前面是所有的XML,因为VOC有21类,这里有我懒的删除,

    2024年02月03日
    浏览(62)
  • 基于OpenCV+Keras+tensorflow 实现的变电站作业管控平台源代码。含人脸识别考勤,移动目标跟踪,越线检测,安全措施检测,姿态识别等功能

    #综述 使用该作业现场安全生产智能管控平台来实现变电站的安全生产的智能化管理,通过人脸识别功能进行人员的考勤; 通过人员、车辆的检测和识别来实现变电站的智能化管理;通过安全行为识别和安全区域报警功能来实现对变电站内人员和设备安全的监督; 完整代码下

    2024年02月10日
    浏览(45)
  • 使用Tensorflow的高级计算机视觉和迁移学习:使用TensorFlow进行文本迁移学习

    迁移学习是机器学习中常用的一种技术,用于利用从一项任务中获得的知识并将其应用于不同但相关的任务。在文本背景下,迁移学习涉及利用经过大量文本数据训练的 预训练模型来提取有用的特征和表示。 这些预先训练的模型已经 学习了通用语言模式 ,可以进行微调或用

    2024年02月03日
    浏览(54)
  • TensorFlow案例学习:使用 YAMNet 进行迁移学习,对音频进行识别

    上一篇文章 TensorFlow案例学习:简单的音频识别 我们简单学习了音频识别。这次我们继续学习如何使用成熟的语音分类模型来进行迁移学习 官方教程: 使用 YAMNet 进行迁移学习,用于环境声音分类 模型下载地址(需要科学上网): https://tfhub.dev/google/yamnet/1 YAMNet简介 YAMNet(

    2024年02月03日
    浏览(54)
  • 机器学习9:使用 TensorFlow 进行特征组合编程实践

    在【机器学习6】这篇文章中,笔者已经介绍过环境准备相关事项,本文对此不再赘述。本文将通过编程案例来探索特征组合(Feature Crosses)对模型训练的影响,加深对上一篇文章(机器学习8)的理解。 经度和纬度可以作为独立特征训练模型以预测当地房价。同时,我们也可

    2024年02月11日
    浏览(40)
  • 配置Tensorflow使用CUDA进行GPU加速(超详细教程)

    对于刚使用Tensorflow的友友来说配置环境并使用GPU进行加速也是件令人头疼的事情,纯自己折腾会遇到比较多的坑,所以这里详细介绍一下Tensorflow的环境配置 先进入官网查看Tensorflow依赖信息: 目前Tensorflow版本已经更新到2.16.1但是中文官网发布的最新经过测试的构建配置的

    2024年04月22日
    浏览(34)
  • TensorFlow学习:使用官方模型和自己的训练数据进行图片分类

    教程来源:清华大佬重讲机器视觉!TensorFlow+Opencv:深度学习机器视觉图像处理实战教程,物体检测/缺陷检测/图像识别 注: 这个教程与官网教程有些区别,教程里的api比较旧,核心思想是没有变化的。 上一篇文章 TensorFlow学习:使用官方模型进行图像分类、使用自己的数据

    2024年02月08日
    浏览(47)
  • 机器学习笔记 - 使用 Tensorflow 从头开始​​构建您自己的对象检测器

            之前的文章是利用了VGG16的预训练模型,然后构造完全连接的层标头以输出预测的边界框坐标,但是不包含对象标签的分类。 机器学习笔记 - 使用Keras、TensorFlow框架进行自定义数据集目标检测训练_keras 制作 目标检测 数据集_坐望云起的博客-CSDN博客 学习如何训练自定

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包