TRT-SAHI-YOLO
項目地址
項目簡介
TRT-SAHI-YOLOv11
是一個基于 SAHI 圖像切割和 TensorRT
推理引擎的目標(biāo)檢測系統(tǒng)灰伟。該項目結(jié)合了高效的圖像預(yù)處理與加速推理技術(shù)檬果,旨在提供快速鞭衩、精準(zhǔn)的目標(biāo)檢測能力胶惰。通過切割大圖像成多個小塊進(jìn)行推理,并應(yīng)用非極大值抑制來優(yōu)化檢測結(jié)果,最終實現(xiàn)對物體的精確識別境钟。
功能特性
SAHI
圖像切割
利用CUDA
實現(xiàn)SAHI
的功能將輸入圖像切割成多個小塊,支持重疊切割俭识,以提高目標(biāo)檢測的準(zhǔn)確性慨削,特別是在邊緣和密集物體區(qū)域。TensorRT 推理
使用TensorRT 10
或者TensorRT 8
進(jìn)行深度學(xué)習(xí)模型推理加速套媚。
在Makefile中通過TRT_VERSION
變量控制編譯封裝TensorRT
版本的文件
注意事項
- 模型需要是動態(tài)batch的
- 如果模型切割后的數(shù)量大于batch的最大數(shù)量會導(dǎo)致無法推理
-
TensorRT 10在執(zhí)行推理的時候需要指定輸入和輸出的名稱缚态,名稱可以在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());
SAHI 效果對比
sliced.jpg
no_sliced.jpg