本教程主要测试tensorrt的maskrcnn例子,官方网址为sampleUffMaskRCNN
请确认已经安装好TensorRT 6.0,如果未安装,可参考博客
Ubuntu 18.04 安装配置TensorRT 6.0
本文基于以上链接,在conda创建名为trt的虚拟环境中进行.
依赖位置: 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
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
# 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
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)
#如果使用了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
)
git clone https://github.com/matterport/Mask_RCNN.git
export PYTHONPATH=$PYTHONPATH:$PWD/Mask_RCNN
方法如下:
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"
pip3 install imgaug
pip3 install keras==2.1.3
例如我的训练好的模型为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)
测试参见
TX2上编译安装TensorRT的SampleUffMaskRCNN示例程序
注意修改config.h文件中的类别名.