grimoire / mmdetection-to-tensorrt

convert mmdetection model to tensorrt, support fp16, int8, batch input, dynamic shape etc.
Apache License 2.0
587 stars 85 forks source link

mmdet2trt run error #34

Open vedrusss opened 3 years ago

vedrusss commented 3 years ago

While running DCNv2 model convertion to TRT I'm getting following error:

Traceback (most recent call last):
  File "/usr/local/bin/mmdet2trt", line 11, in <module>
    load_entry_point('mmdet2trt', 'console_scripts', 'mmdet2trt')()
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/mmdet2trt.py", line 358, in main
    enable_mask=args.enable_mask)
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/mmdet2trt.py", line 147, in mmdet2trt
    int8_calib_algorithm=int8_calib_algorithm)
  File "/root/space/torch2trt_dynamic/torch2trt_dynamic/torch2trt_dynamic.py", line 513, in torch2trt_dynamic
    outputs = module(*inputs)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/models/detectors/two_stage.py", line 52, in forward
    result = self.roi_head_wraper(feat, rois, x.shape[2:])
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/models/roi_heads/cascade_roi_head.py", line 104, in forward
    i, feat, torch.cat([rois_pad, rois], dim=1))
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/models/roi_heads/cascade_roi_head.py", line 59, in _bbox_forward
    roi_feats = bbox_roi_extractor(x[:bbox_roi_extractor.num_inputs], rois)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/models/roi_heads/roi_extractors/single_level_roi_extractor.py", line 22, in forward
    return self.roi_extractor(feats, rois, roi_scale_factor)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/root/space/torch2trt_dynamic/torch2trt_dynamic/torch2trt_dynamic.py", line 298, in wrapper
    outputs = method(*args, **kwargs)
  File "/root/space/mmdetection-to-tensorrt/mmdet2trt/models/roi_heads/roi_extractors/pooling_layers/roi_align_extractor.py", line 15, in forward
    return self.module(feats, rois, roi_scale_factor)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 722, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/mmcv/runner/fp16_utils.py", line 164, in new_func
    return old_func(*args, **kwargs)
  File "/root/space/mmdetection/mmdet/models/roi_heads/roi_extractors/single_level_roi_extractor.py", line 92, in forward
    rois_ = rois[inds]
  File "/root/space/torch2trt_dynamic/torch2trt_dynamic/torch2trt_dynamic.py", line 298, in wrapper
    outputs = method(*args, **kwargs)
IndexError: too many indices for tensor of dimension 2

I want to decrease model inference time, that's why I've modified mmdet2trt.py script - added following opt_shape_param onto line 321 (all sizes are of mod32):

    opt_shape_param=[
        [
            [1,3,544,960],    #  all are same because it's needed to use built engine in C++
            [1,3,544,960],  
            [1,3,544,960], 
        ]
    ]

Running following command to get the error above:

mmdet2trt --save-engine=true mmdetection/configs/dcn/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco.py pytorch_models/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco_20200203-3b2f0594.pth pytorch_models/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco_20200203-3b2f0594_converted_fp32.pth

Notice: all that works fine if I use bigger sizes, for example [1,3,608,1088]. Why smaller sizes don't work?

enviroment: the converter is run within the Docker provided in the project.

Additional context Looks like there is some issue with padding during calibration step.

grimoire commented 3 years ago

Hi The convertor works on my side. (with 544x960), please install the latest code and try again. (mmdetection update the roi extract code to support onnx, break my code. I have fix it a few days ago)

And If you want to set the opt_shape_param in CLI:

mmdet2trt --save-engine=true \
    --min-scale 1 3 544 960 \
    --opt-scale 1 3 544 960 \
    --max-scale 1 3 544 960 \
    mmdetection/configs/dcn/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco.py \
    pytorch_models/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco_20200203-3b2f0594.pth \
    pytorch_models/cascade_rcnn_r101_fpn_dconv_c3-c5_1x_coco_20200203-3b2f0594_converted_fp32.pth