SPEED SAM C++ TENSORRT
🌐 1、概述
用于SAM
(segment anything model分割一切模型)的TensorRT
和CUDA
优化的高表现C++
实现,特别适用于实时图像分割任务。
📢 更新
- 模型转换:从ONNX模型构建TensorRT引擎以加速推理。
- 点和边界框分割:通过选定的点或边界框轻松分割图像。
- FP16精度:在速度与精度之间进行选择,支持FP16和FP32。
- 动态形状支持:利用优化配置文件高效处理可变输入大小。
- CUDA优化:利用CUDA进行预处理和有效的内存管理。
📢2、性能
2.1 推理时间
组件 | SpeedSAM |
---|---|
图像编码器 | |
参数 | 5M |
速度 | 8ms |
掩码解码器 | |
参数 | 3.876M |
速度 | 4ms |
完整流程(编码+解码) | |
参数 | 9.66M |
速度 | 12ms |
2.2 结果
📂 3、项目结构
SPEED-SAM-CPP-TENSORRT/
├── include
│ ├── config.h # 模型配置和宏定义
│ ├── cuda_utils.h # CUDA工具宏
│ ├── engineTRT.h # TensorRT引擎管理
│ ├── logging.h # 日志实用工具
│ ├── macros.h # API导出/导入宏
│ ├── speedSam.h # SpeedSam类定义
│ └── utils.h # 图像处理实用函数
├── src
│ ├── engineTRT.cpp # TensorRT引擎实现
│ ├── main.cpp # 主入口点
│ └── speedSam.cpp # SpeedSam类实现
└── CMakeLists.txt # CMake配置
🚀 4、编译运行
准备工作
git clone https://github.com/hamdiboukamcha/SPEED-SAM-C-TENSORRT.git
cd SPEED-SAM-CPP-TENSORRT
# 创建构建目录并编译
mkdir build && cd build
cmake ..
make -j$(nproc)
注意:根据需要更新CMakeLists.txt中的TensorRT和OpenCV正确路径。
📦 依赖项
- CUDA:NVIDIA的并行计算平台
- TensorRT:高性能深度学习推理
- OpenCV:图像处理库
- C++17:编译所需的最低标准
🔍 代码概览
主要组件
- SpeedSam 类 (speedSam.h):管理图像编码和掩码解码。
- EngineTRT 类 (engineTRT.h):TensorRT引擎创建和推理。
- CUDA 工具 (cuda_utils.h):CUDA错误处理宏。
- 配置 (config.h):定义模型参数和精度设置。
关键函数
- EngineTRT::build:从ONNX模型构建TensorRT引擎。
- EngineTRT::infer:对提供的输入数据运行推理。
- SpeedSam::predict:使用输入点或边界框分割图像。