优化 Tensorflow 目标检测模型 V2 Centernet 模型进行评估

Nar*_*rek 5 object-detection tensorflow tensorrt object-detection-api tensorflow2.0

centernet_resnet50_v2_512x512_kpts_coco17_tpu-8我正在Nvidia Tesla P100上使用张量流对象检测模型来提取边界框关键点,以检测视频中的人物。使用tensorflow.org 上的预训练数据,我每秒能够处理大约 16 帧。有什么方法可以提高该模型的评估速度吗?以下是我一直在研究的一些想法:

  • 修剪模型图,因为我只检测 1 种类型的对象(人)
    • 没有成功地做到这一点。在构建模型时更改label_map似乎并没有提高性能。
  • 对输入大小进行硬编码
    • 还没有找到一个好的方法来做到这一点。
  • 使用TensorRT等工具将模型编译为优化形式
    • 最初尝试转换为 TensorRT 并没有任何性能改进。
  • 批量预测
    • 看起来预训练模型的批量大小硬编码为 1,到目前为止,当我尝试使用 来更改它时,model_builder我发现性能有所下降。
    • 我的 GPU 利用率约为 75%,所以我不知道这里是否有很多收获。

joo*_*ack 3

在大多数情况下,与 Tensorflow 相比,TensorRT 每秒的帧数应该会大幅增加。

centernet_resnet50_v2_512x512_kpts_coco17_tpu-8可以在 TensorFlow Model Zoo 中找到。Nvidia 发布了一篇博客文章,描述如何使用 Deepstream 和 TensorRT 优化 TensorFlow Model Zoo 中的模型: https://developer.nvidia.com/blog/deploying-models-from-tensorflow-model-zoo-using-deepstream-and -triton-推理服务器/

现在关于您的建议:

  • 修剪模型图:修剪模型图可以通过将张量流模型转换为 TF-TRT 模型来完成。

  • 对输入大小进行硬编码:在 TF-TRT 中使用静态模式。这是默认模式,可通过以下方式启用:is_dynamic_op=False

  • 编译模型:我的建议是将模型转换为 TF-TRT 或首先转换为 ONNX,然后转换为 TensorRT。

  • 批处理:NVIDIA 博客文章中还介绍了指定批处理大小。

最后,对于我的模型,性能的大幅提升来自于在推理引擎中使用 FP16。(混合精度)您甚至可以尝试 INT8,尽管您首先必须进行校准。