栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ TensorRT实现Mask

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ TensorRT实现Mask

  • Mask_RCNN:用于object detection 和 instance segmentation,基于RGB图检测实例并生成其bounding box和二维mask。
  • 实验环境:ubuntu18.04 + cuda10.0 + cudnn7.4.1
1. python实现
  • 源码:matterport/Mask_RCNN
  • 环境配置:
    • tensorflow各版本支持的CUDA和CUDNN版本
    • tensorflow与keras对应关系
    • 最终环境:tensorflow-gpu1.14.0 + keras 2.2.5 + h5py 2.10.0,配环境就按照官网教程一步一步走就行
  • 测试结果:基于官网给出的在COCO数据集上预训练的权重mask_rcnn_coco.h5模型,实现实例级语义分割,预测的语义类别有80类。针对每张图像,输出检测到的实例语义类别、boundingbox和mask。用室内场景数据测试的实例分割结果如下。
2. C++实现
  • Mask_RCNN + OpenCV:C++使用时需要模型部署,h5模型是由keras训练保存的,转为tensorflow的pb模型可被OpenCV4.0调用。OpenCV4.0已经支持mask rcnn的调用,只需要.pb文件和.pbtxt文件即可进行推理。(注:编译tensorflow C++ API也是可以,然后利用api调用模型,但是会比较麻烦。而且tensorflow的c++接口很少,pytorch对c++的支持更好。)
  • 参考:python训练mask rcnn模型&&C++调用训练好的模型–基于opencv4.0,keras训练的h5模型转换为pb模型
  • 测试:使用c++进行单帧实例分割耗时:一张640*480图像约200~300ms
3. TensorRT加速
  • TensorRT简介:Nvidia推出的高性能深度学习引擎。TensorRT可以自动对网络模型进行网络模型的合并、参数的量化,目前支持caffe、uff和onnx三种格式的网络模型。因此可以使用TensorRT对MaskRCNN进行神经元合并和量化权重操作来进行加速。

  • 模型部署:对于使用神经网络训好的模型,首先需根据tensorrt教程,把maskrcnn h5格式的模型转成tensorrt的 uff格式,然后读取uff后根据平台做序列化,把序列化后的对象以二进制格式 .bin 保存下来,供C++代码使用,而且不同的平台需根据TensorRT和Tensorflow版本进行对应的转换,PC和AGX上的模型不同通用。

  • 环境配置:ubuntu18.04 + TensorRT6.0.1.5 + CUDA10.0 + cudann7.4.1

    • 1)TensorRT安装: [参考教程1]、[参考教程2]
    • 2)TensorRT项目编译测试:[参考教程] 完成mask_rcnn例子和模型转换,得到.uff和.pbtxt格式模型,sampleuffmaskrcnn例子测试成功。
  • 问题1:No rule to make target ‘nvinfer_LIB_PATH-NOTFOUND’
    • solution:[github-issue 928],修改当前的cmake命令
  • 问题2:nvcc fatal : redefinition of argument ‘std’
    • solution:[github-issue570],注释对应cmakelist.txt中的两行
  • 问题3:用转换后的uff模型和sampuffmaskrcnn测试时,UffParser: Validator error: roi_align_mask_trt: Unsupported operation _PyramidROIAlign_TRT
    • solution:[github-issue159],把/build/out/libnvinfer_plugin.so.6.0.1添加到/usr/lib/x86_64-linux-gnu/libnvinfer_plugin.so.6.0.1
  • 测试:用室内场景数据测试的实例分割结果如下。将maskRcnn权重量化为int8时,精度降低了很多,速度与精度的权衡。将maskRcnn权重量化为int8,在AGX Xavier上测试,单帧640*480图像在AGX上实例分割耗时由200~300ms降为约70ms。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号