当前位置: 首页 > news >正文

BiRefNet C++ TensorRT (二分类图像分割)

BiRefNet C++ TensorRT (二分类图像分割)

利用TensorRTCUDA的双边参考网络(BiRefNet)的高性能c++实现,针对实时高分辨率二分类图像分割进行了优化。
在这里插入图片描述


BiRefNet c++ TENSORRT旨在有效地在GPU上运行双边参考分割任务。通过利用TensorRT的优化和CUDA内核,它旨在以最小的延迟提供最先进的性能。

主要特性

  • TensorRT 加速:使用序列化的 TRT 引擎加速分割任务的推理过程。
  • CUDA 集成:全面基于 GPU 的预处理、后处理及内存管理。
  • 高分辨率支持:开箱即用,能够处理高分辨率图像(例如 1024x1024)。
  • 易于集成:采用 C++17 编码,便于集成到现有的流程中。

📢 最新动态

  • 增强的双边参考:通过利用双重参考指导,提升二分法分割输出的质量。
  • 改进的内存占用:针对大批次或高分辨率工作负载优化了 GPU 分配。
  • 可配置精度:支持 FP16FP32 模式(需要支持半精度的 GPU)。

📂 项目结构

BiRefNet/ 
├── include 
│ └── birefnet.h # Main BiRefNet class definition
├── src 
│ └── birefnet.cpp # Implementation of the BiRefNet class
├── CMakeLists.txt # CMake configuration 
└── main.cpp #
  • include/birefnet.h
    头文件,定义了 BiRefNet 类,该类负责 TensorRT 引擎的创建、执行和内存缓冲区管理。

  • src/birefnet.cpp
    源代码实现,包括加载序列化引擎、运行推理及处理输出后处理。

  • CMakeLists.txt
    使用 CMake 构建项目的配置文件。根据需要调整 TensorRT、CUDA 和 OpenCV 的路径。

  • main.cpp
    一个最小示例,演示了如何加载模型、对图像或视频进行推理并将结果保存。

🚀 安装步骤

  1. 克隆仓库

    git clone https://github.com/hamdiboukamcha/BiRefNet-Cpp-TensorRT.git
    cd BiRefNet-Cpp-TensorRT
    mkdir build && cd build
    cmake ..
    make -j$(nproc)
    

📦 依赖项

  • CUDA
    用于 GPU 加速和内核启动(例如,CUDA 11.x 或更新版本)。

  • TensorRT
    高性能深度学习推理库(推荐使用 v8.x 或更新版本)。

  • OpenCV
    用于图像加载、预处理和基本可视化。

  • C++17
    本项目使用现代 C++ 特性。请确保您的编译器支持 C++17 或更高版本。

🔍 代码概览

主要组件

  • BiRefNet 类

    • 从给定的引擎/模型路径初始化 TensorRT 引擎。
    • 处理预处理(图像大小调整、均值/标准差归一化等)。
    • 运行推理并将输出后处理为分割图。
    • 管理 CUDA 资源和流。
  • Logger 类(在 main.cpp 中)

    • 实现 TensorRT 的 ILogger 接口以进行自定义日志记录。

主要函数

  • BiRefNet::BiRefNet(…)
    构造函数,将 .trt(序列化的 TensorRT)引擎加载到内存中。

  • BiRefNet::predict(cv::Mat& image)
    主要推理函数:接受一个 OpenCV cv::Mat 作为输入,返回分割结果作为 cv::Mat。

  • BiRefNet::preprocess(…)
    将图像转换为归一化的浮点数(均值减法、除以标准差等)。

  • BiRefNet::postprocess(…)
    将原始输出重塑为有意义的图像数据,通常是一个 8 位或 32 位矩阵用于分割。

🎬 使用方法

准备TensorRT推理引擎:

  1. 将模型转换为 ONNX 格式,然后构建一个 TensorRT 引擎(例如,使用 trtexec 或自定义构建工具)。选择使用BiRefNet的预训练模型。

    trtexec --onnx=BiRefNet-general-resolution_512x512-fp16-epoch_216.onnx --saveEngine=BiRefNet-tiny.engine --fp16
    

    在这里插入图片描述

  2. 推理结果

    ./BiRefNetTRT
    Loading model from BiRefNet-tiny.engine...
    The model has been successfully loaded!
    Folder already exists!
    [Info] Processing time: 2452 ms for 1693479941020.jpg
    [Info] Saving result to: results/1693479941020.jpg
    [Info] Processing finished.
    

相关文章:

  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 1
  • [原创](Modern C++)现代C++的关键性概念: 妙用std::reference_wrapper, 让std::list容器具有随机访问功能.
  • Zookeeper(54)如何使用Zookeeper的命令行工具?
  • 寒假学习总结
  • 如何解决服务器端口被攻击:全面防护与快速响应
  • 侯捷 C++ 课程学习笔记:设计模式在面向对象开发中的应用
  • Soft Actor-Critic (SAC)算法
  • 嵌入式人工智能应用-第四章 逻辑回归 8
  • unity学习48:动态障碍物 Obstacle 对 NavMesh的影响
  • LearnOpenGL——高级OpenGL(下)
  • 企业级RAG开源项目分享:Quivr、MaxKB、Dify、FastGPT、RagFlow
  • 4.4 使用Datasets.map方法处理数据集:从基础到企业级优化
  • Spring IoC DI:控制反转与依赖注入
  • IGT_GPU_TOOL系列之CRC(一):test_grab_crc
  • SQLMesh 系列教程6- 详解 Python 模型
  • 2025/2/19机试准备
  • STM32 HAL库I2C函数使用详解:以MPU6050传感器为例
  • 配置终端代理
  • 【架构】分层架构 (Layered Architecture)
  • OpenResty
  • 慢品巴陵,看总编辑眼中的岳阳如何书写“山水人文答卷”
  • 西藏普兰县公安局网安大队向自媒体人宣传网络安全知识
  • 广西北流出现强降雨,1人被洪水冲走已无生命体征
  • 技术派|威胁F-35、击落“死神”,胡塞武装防空战力如何?
  • 贞丰古城:新垣旧梦间的商脉与烟火
  • 高新波任西安电子科技大学校长