主页 > 其他  > 

BiRefNetC++TensorRT(二分类图像分割)

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

利用TensorRT和CUDA的双边参考网络(BiRefNet)的高性能c++实现,针对实时高分辨率二分类图像分割进行了优化。


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

主要特性 TensorRT 加速:使用序列化的 TRT 引擎加速分割任务的推理过程。CUDA 集成:全面基于 GPU 的预处理、后处理及内存管理。高分辨率支持:开箱即用,能够处理高分辨率图像(例如 1024x1024)。易于集成:采用 C++17 编码,便于集成到现有的流程中。
📢 最新动态 增强的双边参考:通过利用双重参考指导,提升二分法分割输出的质量。改进的内存占用:针对大批次或高分辨率工作负载优化了 GPU 分配。可配置精度:支持 FP16 或 FP32 模式(需要支持半精度的 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 一个最小示例,演示了如何加载模型、对图像或视频进行推理并将结果保存。

🚀 安装步骤

克隆仓库

git clone github /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推理引擎:

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

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

推理结果

./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.
标签:

BiRefNetC++TensorRT(二分类图像分割)由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“BiRefNetC++TensorRT(二分类图像分割)