object detection with faster rCNN

Proposal and CropAndResize

1 custom plugin

  1. config.py 是为convert_to_uff 命令定义的。config.py文件中应该通过修改op字段将自定义层映射到TensorRT中的插件名称。插件参数的名称也应该与TensorRT插件所期望的完全匹配。如果config.py定义正确。NvUffParser将能够解析网络并使用正确的参数调用适当的插件。
  2. CropAndResized插件:根据产生的ROI坐标从特征图中裁剪出补丁,并将其调整为通用目标大小,例如7*7。输出张量用作“CropAndResize”插件后面的分类器的输入。
  3. Propsal 插件:从RPN中细化候选框,功能包括根据置信度选择顶框,执行NMS,最后选择在NMS之后具有最高置信度的顶框。

2 prerequisites

  1. ./download_model.sh下载相关的数据和模型
  2. patch uff converter

给UFF converter打补丁,修复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,可以忽略它,因为它应该已经被修复了。

config.py 中添加新的插件

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

3 run

  1. 上述步骤会在build/cmake/out文件夹中创建sample_uff_faster_rcnn 可执行文件。
 ./sample_uff_faster_rcnn --datadir /data/uff_faster_rcnn -W 480 -H 272 -I 2016_1111_185016_003_00001_night_000441.ppm

INT8 mode:

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

4 code

config.py

import tensorflow as tf
import graphsurgeon as gs


CropAndResize = gs.create_plugin_node(
    name='roi_pooling_conv_1/CropAndResize_new',
    op="CropAndResize",
    inputs=['activation_7/Relu', 'proposal'],
    crop_height=7,
    crop_width=7)
Proposal = gs.create_plugin_node(
    name='proposal',
    op='Proposal',
    inputs=['rpn_out_class/Sigmoid', 'rpn_out_regress/BiasAdd'],
    input_height=272,
    input_width=480,
    rpn_stride=16,
    roi_min_size=1.0,
    nms_iou_threshold=0.7,
    pre_nms_top_n=6000,
    post_nms_top_n=300,
    anchor_sizes=[32.0, 64.0, 128.0],
    anchor_ratios=[1.0, 0.5, 2.0])


namespace_plugin_map = {
"crop_and_resize_1/Reshape" : CropAndResize,
'crop_and_resize_1/CropAndResize' : CropAndResize,
"crop_and_resize_1/transpose" : CropAndResize,
"crop_and_resize_1/transpose_1" : CropAndResize
}


def preprocess(dynamic_graph):
    # Now create a new graph by collapsing namespaces
    dynamic_graph.append(Proposal)
    dynamic_graph.remove(dynamic_graph.find_nodes_by_name('input_2'))
    dynamic_graph.collapse_namespaces(namespace_plugin_map)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值