点击下方卡片,关注“机器视觉与AI深度学习”
视觉/图像重磅干货,第一时间送达!
此项目名为SPEED-SAM-C++-TENSORRT是 Segment Anything Model (SAM) 的高性能实现,使用 NVIDIA 的 TensorRT 进行高效推理,并使用 CUDA 优化 GPU 利用率。下面详细介绍了该实现的工作原理、如何编译它以及关键组件。 该项目专为快速图像分割任务而设计,可以根据选定的点或边界框对图像进行分割。它使用 TensorRT 从 ONNX 模型构建优化的推理引擎,从而可以在 NVIDIA GPU 上进行高效的深度学习推理。 该EngineTRT::build()方法解析 ONNX 模型并构建 TensorRT 引擎。如果需要动态形状支持(针对不同的输入大小),则配置优化配置文件。 该EngineTRT::saveEngine()功能允许将序列化的引擎保存到文件中,以方便在未来的会话中快速加载。 该类SpeedSam负责协调分割过程。首先,使用预先训练的编码器模型对图像进行编码。接下来,解码器模型根据输入点或边界框生成掩码。 基于点的分割(segmentWithPoint):用户单击图像来指定要分割的点。 边界框分割(segmentBbox):用户绘制一个边界框来定义分割区域。 该实现使用 CUDA 流来重叠数据传输和计算,从而减少延迟。 尽可能采用 FP16 精度来加速推理,而不会显著牺牲准确性。 TensorRT:一个用于高性能深度学习推理的库。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 的正确路径进行更新。运行应用程序
程序显示图像并等待用户选择一个点。一旦选择了点,模型就会根据指定的位置分割图像并叠加遮罩 用户可以在所需区域周围绘制一个边界框。然后模型会在定义的区域内分割图像并显示结果。 分割后的图像保存到指定的输出路径,并记录推理时间等性能指标。- 推理速度:图像编码器和掩码解码器实现了快速的推理时间,整个管道在大约 12 毫秒内完成。
- 内存管理:有效利用 GPU 内存和 CUDA 流可最大限度地减少延迟并最大限度地提高吞吐量。
- 精度设置:使用 FP16 精度的选项允许在速度和准确性之间进行权衡。
SPEED -SAM-C++-TENSORRT项目展示了使用 TensorRT 和 CUDA 对 Segment Anything 模型进行优化实现。通过利用 NVIDIA 强大的库,该项目实现了实时分割性能,使其适用于需要快速准确图像分析的应用程序。灵活的代码结构和全面的日志记录也使其成为在 GPU 上进行深度学习推理的开发人员的宝贵资源。觉得有用,麻烦给个赞和在看