tensorrt 结合 sahi 目标检测

TRT-SAHI-YOLO

项目地址

TRT-SAHI-YOLO

项目简介

TRT-SAHI-YOLOv11 是一个基于 SAHI 图像切割和 TensorRT 推理引擎的目标检测系统。该项目结合了高效的图像预处理与加速推理技术,旨在提供快速、精准的目标检测能力。通过切割大图像成多个小块进行推理,并应用非极大值抑制来优化检测结果,最终实现对物体的精确识别。

功能特性

  • SAHI 图像切割
    利用 CUDA 实现 SAHI 的功能将输入图像切割成多个小块,支持重叠切割,以提高目标检测的准确性,特别是在边缘和密集物体区域。

  • TensorRT 推理
    使用 TensorRT 10 或者 TensorRT 8 进行深度学习模型推理加速。
    在Makefile中通过 TRT_VERSION 变量控制编译封装 TensorRT 版本的文件

注意事项

  1. 模型需要是动态batch的
  2. 如果模型切割后的数量大于batch的最大数量会导致无法推理
  3. 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
    

使用

  1. 自动裁剪
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());
  1. 指定裁剪宽高和重合比例
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());

SAHI 效果对比

sliced.jpg

no_sliced.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容