TRT-SAHI-YOLOv11
项目地址
项目简介
TRT-SAHI-YOLOv11
是一个基于 SAHI 图像切割和 TensorRT
推理引擎的目标检测系统。该项目结合了高效的图像预处理与加速推理技术,旨在提供快速、精准的目标检测能力。通过切割大图像成多个小块进行推理,并应用非极大值抑制来优化检测结果,最终实现对物体的精确识别。
功能特性
SAHI
图像切割
利用CUDA
实现SAHI
的功能将输入图像切割成多个小块,支持重叠切割,以提高目标检测的准确性,特别是在边缘和密集物体区域。TensorRT 推理
使用TensorRT 10
或者TensorRT 8
进行深度学习模型推理加速。
在Makefile中通过TRT_VERSION
变量控制编译封装TensorRT
版本的文件
注意事项
- 模型需要是动态batch的
- 如果模型切割后的数量大于batch的最大数量会导致无法推理
-
TensorRT 10在执行推理的时候需要指定输入和输出的名称,名称可以在netron中查看
#ifdef TRT10 if (!trt_->forward(std::unordered_map<std::string, const void *>{ { "images", input_buffer_.gpu() }, { "output0", bbox_predict_.gpu() } }, stream_)) { printf("Failed to tensorRT forward."); return {}; } #else std::vector<void *> bindings{input_buffer_.gpu(), bbox_output_device}; if (!trt_->forward(bindings, stream)) { printf("Failed to tensorRT forward."); return {}; } #endif
使用
- 自动裁剪
cv::Mat image = cv::imread("inference/persons.jpg");
// cv::Mat image = cv::imread("6.jpg");
auto yolo = yolov11::load("yolov8n.transd.engine");
if (yolo == nullptr) return;
auto objs = yolo->forward(tensor::cvimg(image));
printf("objs size : %d\n", objs.size());
- 指定裁剪宽高和重合比例
cv::Mat image = cv::imread("inference/persons.jpg");
// cv::Mat image = cv::imread("6.jpg");
auto yolo = yolov11::load("yolov8n.transd.engine");
if (yolo == nullptr) return;
auto objs = yolo->forward(tensor::cvimg(image), 640, 640, 0.4, 0.4);
printf("objs size : %d\n", objs.size());