Ubuntu18.04编译TensorRT MaskRCNN例子和模型转化---sampleuffMaskRCNN

Ubuntu18.04编译TensorRT MaskRCNN例子和模型转化

  • 0.前期准备
  • Step1 安装requirement.txt需要的依赖
  • Step2 安装编译sample需要的其他系统的包
  • Step3 Clone github 的TensorRT库
  • Step4 开始编译
  • Step5 修改conv2d_transpose function in UFF的conversion_functions.py
  • Step6 下载Mask R-CNN库并设置PYTHONPATH.
  • Step7 Apply the patch into Mask R-CNN repo to update the model from NHWC to NCHW
  • Step8 下载Mask-RCNN必须的包:
  • Step9 将h5模型转为uff模型
  • Step10 测试

0.前期准备

本教程主要测试tensorrt的maskrcnn例子,官方网址为sampleUffMaskRCNN
请确认已经安装好TensorRT 6.0,如果未安装,可参考博客
Ubuntu 18.04 安装配置TensorRT 6.0
本文基于以上链接,在conda创建名为trt的虚拟环境中进行.

Step1 安装requirement.txt需要的依赖

依赖位置: TensorRT/samples/opensource/sampleUffMaskRCnn/converted/requirements.txt

conda install keras==2.1.3
conda install tensorflow-gpu=1.14.0 #默认下载了cudatoolkit==10.1
conda install scikit-image

Step2 安装编译sample需要的其他系统的包

   pip3 install cmake==3.13 #要求最低3.13
   #如果当前GNU Make版本为v4.1 最低要求为v4.1无需安装,否则,安装GNU Make
   pip3 install --upgrade pip #升级pip 要求最低19.0
   sudo apt-get install git

Step3 Clone github 的TensorRT库

   # git clone -b master https://github.com/nvidia/TensorRT TensorRT #原github版本不对!应改为下一句:
    git clone -b release/6.0 https://github.com/nvidia/TensorRT TensorRT
    cd TensorRT
    git submodule update --init --recursive

Step4 开始编译

	export TRT_SOURCE=`pwd`
 	export TRT_RELEASE=`pwd`/../TensorRT-6.0.1.5 #你的tensorrt安装目录
    cd $TRT_SOURCE
    mkdir -p build && cd build 
    cmake .. -DTRT_LIB_DIR=$TRT_RELEASE/lib -DTRT_BIN_DIR=`pwd`/out
    make -j$(nproc)

Step5 修改conv2d_transpose function in UFF的conversion_functions.py

#如果使用了trt虚拟环境
vim /home/lixj/anaconda3/envs/trt/lib/python3.6/site-packages/uff/converters/tensorflow/converter_functions.py
#否则,如果没有使用conda 虚拟环境
# vim /home/lxj/.local/lib/python3.6/site-packages/uff/converters/tensorflow/converter_functions.py

找到524行,更换通道顺序

uff_graph.conv_transpose(
    inputs[0], inputs[2], inputs[1],
    strides, padding,
    dilation=None, number_groups=number_groups,
    left_format=lhs_fmt, right_format=rhs_fmt,
    name=name, fields=fields
    )

Step6 下载Mask R-CNN库并设置PYTHONPATH.

   git clone https://github.com/matterport/Mask_RCNN.git
   export PYTHONPATH=$PYTHONPATH:$PWD/Mask_RCNN

Step7 Apply the patch into Mask R-CNN repo to update the model from NHWC to NCHW

方法如下:

    cd Mask_RCNN
    git checkout 3deaec5
    git am $TRT_SOURCE/samples/opensource/sampleUffMaskRCNN/converted/0001-Update-the-Mask_RCNN-model-from-NHWC-to-NCHW.patch

上句若找不到.patch文件,可以手动找到之后,例如我的:

    git am ~/Downloads/TensorRT/samples/opensource/sampleUffMaskRCNN/converted/0001-Update-the-Mask_RCNN-model-from-NHWC-to-NCHW.patch

注意,这里需要登录自己的github账号

  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"

Step8 下载Mask-RCNN必须的包:

  pip3 install imgaug
  pip3 install keras==2.1.3

Step9 将h5模型转为uff模型

例如我的训练好的模型为mask_rcnn_coco.h5 (257.6MB),需要事先根据你的分割任务训练好。
保存到 Mask_RCNN/data/路径下.

 cd $TRT_SOURCE/samples/opensource/sampleUffMaskRCNN/converted/

修改config.py文件,注意,转换之后再修改sampleUffMaskRCNN/config.h是无效的,一定要在转换模型的时候将类别转换为你所需要的分类类别。
修改mrcnn_to_trt_single.py文件,第91行将类别80+1改为你分类的类别

 python mrcnn_to_trt_single.py -w /path/to/data/mask_rcnn_coco.h5 -o /path/to/data/mrcnn_nchw.uff -p ./config.py

这里,/path/to/data/需要改为你的路径,例如我的为

python mrcnn_to_trt_single.py -w ~/Mask_RCNN/data/mask_rcnn_coco.h5 -o ~/Mask_RCNN/data/mrcnn_nchw.uff -p ./config.py

转换成功,输出

UFF Output written to /home/lxj/Mask_RCNN/data/mrcnn_nchw.uff    (257MB)
UFF Text Output written to /home/lxj/Mask_RCNN/data/mrcnn_nchw.pbtxt  (1.1MB)

Step10 测试

测试参见
TX2上编译安装TensorRT的SampleUffMaskRCNN示例程序
注意修改config.h文件中的类别名.

你可能感兴趣的:(TensorRT,ubuntu,目标检测)