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:使用輸入點或邊界框分割圖像。