MMDet to tensorRT,简单易用的目标检测转换工具

介绍


mmdetection已经成为大家进行目标检测研究与开发的首选之一,丰富的开发组件与优秀的架构使得调参与训练变成轻松有趣。

但是对于广大工程师而言,如何将算法变成实际的生产力却是个让人困扰问题。mmdetection的便利性得益于pytorch对于动态网络的强大支持,但是这却是一把双刃剑,不完全固定的图结构使得模型向其他推理框架转换变得异常困难。

TensorRT是NVIDIA提供的推理框架,支持FP16,INT8,借助dGPU和Jetson的强大算力支持,成为很多人部署模型的首选。NVIDIA官方对于pytorch模型转换TensorRT提供的方案是借助ONNX作为中间层,进行两步走的转换。对于简单的分类网络而言并没有太大问题。但是检测网络通常具有更复杂的网络结构,特殊的算子,动态的输出尺寸,使得模型转换异常困难。mmdetection初步提供了ONNX的转换,但是仅有少数模型支持,而且即使转换成为ONNX,也无法保证能够转换成TensorRT。

MMDet to TensorRT


mmdet to tensorrt就是一个为了解决上述问题而诞生的工具:

项目链接:https://github.com/grimoire/mmdetection-to-tensorrt

主要功能:

  • mmdetection=>tensorrt转换:现已支持包括包括faster rcnn, cascade rcnn, ssd, retinanet等超过20种不同模型的转换,数量持续增加种。
  • fp16/int8模式支持:可以轻松实现fp16模型的转换,大多数模型也已经支持int8模式
  • batched input支持:以batch的形式输入数据通常可以得到更大的吞吐量,工具支持转换的模型以batch形式输入数据,只要显存吃得消,就可以享受大batch带来的速度提升。
  • 动态输入尺寸:不管输入的tensor形状如何,只要mmdetection支持的,我们都支持(大概)
  • 多策略组合:可以自定义自己的网络,组合各种mmdetection提供的模块,转换模型也不会是问题
  • deepstream支持:转换的模型可以在deepstream中使用,已实现相关组件,享受流畅的实时流媒体目标检测吧
  • 命令行与脚本支持:可以使用命令行工具轻松转换,也可以使用脚本定制你的转换。

使用方法

模型转换

CLI

mmdet2trt ${CONFIG_PATH} ${CHECKPOINT_PATH} ${OUTPUT_PATH}

PYTHON

opt_shape_param=[
    [
        [1,3,320,320],      # min shape
        [1,3,800,1344],     # optimize shape
        [1,3,1344,1344],    # max shape
    ]
]
max_workspace_size=1<<30    # some module and tactic need large workspace.
trt_model = mmdet2trt(cfg_path, weight_path, opt_shape_param=opt_shape_param, fp16_mode=True, max_workspace_size=max_workspace_size)
torch.save(trt_model.state_dict(), save_path)

使用转换后的模型进行推理:

trt_model = init_detector(save_path)
num_detections, trt_bbox, trt_score, trt_cls = inference_detector(trt_model, image_path, cfg_path, "cuda:0")

提取c++可用的序列化engine文件:

with open(engine_path, mode='wb') as f:
    f.write(model_trt.state_dict()['engine'])

模型还在不断更新中,如果有什么改进的建议欢迎提出

其他

作为项目的副产物,提供了一个可以直接转换pytorch模型的工具:
https://github.com/grimoire/torch2trt_dynamic
算是NVIDIA官方的https://github.com/NVIDIA-AI-IOT/torch2trt的威力加强版,增加了对于动态输入的支持,还有大量的新算子。本来打算PR给官方项目的,不过似乎官方为了兼容Tensorrt5暂时不打算做太大改动。因此就拿出来作为一个独立项目了。

其他2

欢迎大家PR,Issue
喜欢star,还有大家(求求你了)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。