博客
关于我
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
阅读量:791 次
发布时间:2023-02-23

本文共 2396 字,大约阅读时间需要 7 分钟。

旋转目标检测模型的C++部署实践

近期,我们完成了一次基于C++的旋转目标检测模型部署项目,现将完整的部署过程和相关代码分享给大家。以下将详细记录从TensorRT安装到模型部署的全过程。

一、项目背景

本次工程采用了GGHL框架作为旋转目标检测的基础平台。选择GGHL主要基于以下几个原因:一是框架优化程度高,适合高效部署;二是框架支持丰富,具备完善的文档资源;三是框架架构清晰,便于后续模型的扩展和优化。

在旋转目标检测领域,主要采用的两种参数表示方法:

  • 五参数表示法(x, y, w, h, θ)
  • 八参数表示法(x1, y1, x2, y2, x3, y3, x4, y4)
  • 两种表示方法在后期处理时可以相互转换。我们在本次项目中选择了八参数表示法作为主要参数化方法。这一选择基于以下考虑:八参数表示法能够更直观地描述多个目标的位置信息,适合复杂场景下的检测需求。

    二、TensorRT安装步骤

  • 准备工作
  • 在开始安装前,请确保系统环境满足以下条件:

    • CUDA版本:11.6及以上
    • Ubuntu系统:22.04 LTS版本及以上
    • 内存建议:建议至少有8GB以上的内存
    1. 安装方式选择
    2. TensorRT提供了三种主要的安装方式:deb、tar、rpm。根据个人系统环境,我们选择了tar安装方式进行操作。

      1. 获取TensorRT安装包
      2. TensorRT的安装包可以通过以下官方链接获取:

        https://developer.nvidia.com/tensorrt-getting-started

        1. 执行安装
        2. 完成包的下载后,按照以下步骤进行安装和配置:

          # 切换到TensorRT安装目录cd /home/crescent/TensorRT-8.4.15# 创建编译目录mkdir -p build && cd build# 执行cmake命令cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out# 开始编译make -j$(nproc)
          1. 环境变量配置
          2. 在安装完成后,需要配置CUDA和TensorRT相关的环境变量。以下是我的zshrc配置示例:

            # CUDA路径配置export PATH=/usr/local/cuda:$PATHexport CUDA_HOME=/usr/local/cuda# TensorRT路径配置export TRT_LIBPATH=/usr/local/cuda/../libexport TRT_INCLUDE_PATH=/usr/local/cuda/../include
            1. 验证安装结果
            2. 完成TensorRT安装后,可以通过运行以下命令进行验证:

              ./sample_mnist

              运行完成后,应会出现以下输出,表明TensorRT安装成功:

              [I] Building and running a GPU inference engine for MNIST[I] Input:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#-:.-=@@@@@@@@@@@@@@@@@@@%=     . *@@@@@@@@@@@@@@@@@% .:+%%%  *@@@@@@

              如果出现上述输出,说明TensorRT安装成功,可以继续后续部署工作。

              三、模型部署详细步骤

            3. 模型准备
            4. 在实际部署前,需要准备好目标检测模型文件。以下是一些常用的模型格式:

              • ONNX格式:适合TensorRT进行推理
              • TensorRT的 native format(.plan)
              1. 模型转换
              2. 将训练好的模型转换为TensorRT支持的格式。以下是常用的转换工具:

                • tensorrt-converter(ONNX转换工具)
                • custom ONNX converter
                1. 模型优化
                2. 在TensorRT中对模型进行优化,包括:

                  • 模型量化(Quantization)
                  • 模型剪枝(Pruning)
                  • 模型布局优化(Optimization)
                  1. 推理部署
                  2. 完成模型优化后,进行最终的推理部署。以下是TensorRT的推理部署步骤:

                    import tensorrt as trtimport numpy as np# 加载已优化的模型model = trt.read_trt_model("/path/to/trt.model")# 创建输入张量input_tensor = trt.tensor_to_tensor(np.array([image_data]))# 进行推理result = model.inference(input_tensor)# 获取输出数据output_data = result.output

                    四、注意事项

                  3. 环境变量配置
                  4. 在实际运行前,请确保以下环境变量已正确配置:

                    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/../libexport PATH=$PATH:/usr/local/cuda/../bin
                    1. CUDA显卡管理
                    2. 确保在运行TensorRT时,CUDA显卡已被正确管理。可以通过以下命令查看显卡状态:

                      nvidia-smi
                      1. 模型兼容性
                      2. 部分模型可能需要进行额外的修改以适配TensorRT环境。具体修改方法,请参考TensorRT官方文档。

                        五、总结

                        本次项目的核心目标是实现旋转目标检测模型的C++部署。通过TensorRT的支持,成功实现了模型在边缘设备上的实时推理。整个过程涵盖了模型优化、环境配置、编译调试等多个环节,力求做到高效、稳定、可靠。

    转载地址:http://brsfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现重载[ ](附完整源码)
    查看>>
    Objective-C实现重载()(附完整源码)
    查看>>
    Objective-C实现链表(附完整源码)
    查看>>
    Objective-C实现链表traversal遍历算法(附完整源码)
    查看>>
    Objective-C实现链表交换节点算法(附完整源码)
    查看>>
    Objective-C实现链表逆转(附完整源码)
    查看>>
    Objective-C实现长短期记忆人工神经网络LSTM(附完整源码)
    查看>>
    Objective-C实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)
    查看>>
    Objective-C实现队列(附完整源码)
    查看>>
    Objective-C实现阶乘递归factorialRecursive算法(附完整源码)
    查看>>
    Objective-C实现阿特巴希密算法(附完整源码)
    查看>>
    Objective-C实现随机图生成器算法(附完整源码)
    查看>>
    Objective-C实现随机数生成器(附完整源码)
    查看>>
    Objective-C实现随机森林算法(附完整源码)
    查看>>
    Objective-C实现随机正态分布快速排序算法(附完整源码)
    查看>>
    Objective-C实现随机生成一个 RxC 列联表(附完整源码)
    查看>>
    Objective-C实现隐藏任务栏(附完整源码)
    查看>>
    Objective-C实现隔离数字的小数部分, 取这个数字并从底数中减去它,返回结果算法(附完整源码)
    查看>>
    Objective-C实现雪花算法(附完整源码)
    查看>>
    Objective-C实现雪花飘落效果(附完整源码)
    查看>>