Skip to content

About

🔥🔥🔥TensorRT for YOLO26 (det/pose/seg/depth/obb/cls), YOLOv11,YOLOv10 YOLOv9,YOLOv8, ... 🚀🚀🚀 CUDA IS ALL YOU NEED. 🍎🍎🍎

Topics

Resources

Stars

1.5k stars

Watchers

31 watching

Forks

Repository files navigation

TensorRT-Alpha inference pipeline

Windows Linux TensorRT CUDA C++

English | 简体中文

简介

特色简介

C++ 推理仓库,基于 TensorRT + CUDA,手写全部 CUDA C 算子:

  • 端到端 GPU 推理:数据源 → 组批 → GPU 前处理 → 推理 → GPU 后处理 → 渲染 / 保存,全程零 CPU 往返。
  • 多 batch 推理:1 engine + N context 并发,每个 worker 独占一条 cudaStream。
  • 无损复刻原始 PyTorch 推理:对齐 ultralytics 官方实现,见 严格精度对齐。
  • 多种输入源:图片、图片目录、视频流(RTSP / RTMP / HTTP(S) / UDP)、webcam、URL —— 一个 --source 自动判别。
  • 高性能视频解码:借助 FFmpeg 硬解(NVDEC)加速视频解码。
近期计划
  • TODO:Nvidia Nano 等多款边缘设备(计划测试中)
  • TODO:支持 GStreamer —— 可拆卸 OpenCV,替换为 GStreamer 数据源
  • TODO:trt_alpha build —— ONNX → engine 一键序列化
  • TODO:展示更细粒度的性能测试 —— 用 Nsight Systems 剖析整条流水线的时间线(H2D / 推理 / D2H / 后处理 / 渲染的排布与空泡),用 Nsight Compute 逐个 CUDA kernel 剖析(占用率、访存、瓶颈定位)
  • TODO:更多模型系列
更新日志
  • 2026.10.27 📚 文档重构:README 只保留 TensorRT + OpenCV 一条默认路线,FFmpeg 硬解与 FFmpeg + OpenGL 多路渲染各自独立成篇;六个编译脚本统一命名 build_<系统>_<库组合>
  • 2026.10.24 🎮 多路渲染收口:CUDA-GL interop 零拷贝显示、单击放大、per-source 结果队列;9 路 1080p 稳定(pinned 内存受 RLIMIT_MEMLOCK 限制时自动降级并只告警一次)
  • 2026.10.24 🧩 三套构建目录定型(build / build-ffm / build-gl)+ 两个开关(test 默认关、sample 默认开);移除 yolov8_old / yolov8_pose_old / yolov8_seg_old
  • 2026.10.24 ⚡ seg / depth / sem 结果合成全部下沉到 CUDA,OpenCV 与 GL 两个渲染器共用同一套实现
  • 2026.10.23 🖼️ 多路视频 + OpenGL 渲染后端(GLFW + CUDA-GL interop);OpenCV 降为可选后端(-DTRT_ALPHA_WITH_OPENCV=OFF)
  • 2026.10.21 🚀 release v1.3.0:FFmpeg 硬解改为编译期可选(--decode ffmpeg / --hwaccel nvdec),NVDEC 显存直通 + pinned 回拷,[source] 段与三态 HostCopy
  • 2026.10.20 🐛 修复非 640 输入(如 672)在 fused 预处理中的 float4 对齐越界
  • 2026.10.19 📦 samples 改为一任务一示例;清理无用参数与 input_output_names;补训练 / 部署文档(英 / 中)
  • 2026.10.18 🚀 YOLOV11 / YOLOV8 / YOLOV9 / YOLOV10 接入,全部走 YOLO26 的 fused 前后处理:yolov11 五任务;yolov8 重写五任务;yolov9 det + seg;yolov10 det(仅 one2many)。与 python 逐框对拍实测:框 ≤3.4e-4 px、conf ≤2e-6、mask 逐像素 0 差异
  • 2026.10.16 💖 release v1.0
  • 2026.10.15 🐧 Linux 支持:GCC 13 移植、行尾 / 编辑器策略归一、引擎序列化脚本;Windows 运行时 DLL 自动部署;参数解析与源探测硬化 + run 全参数矩阵测试脚本
  • 2026.10.14 🧠 YOLO26 全任务族补齐:cls / depth / obb / pose / seg / sem;首页架构图
  • 2026.10.12 🎯 YOLO26-det 接入:后处理算子族(decode / NMS / 融合 / 向量化),命名统一 yolo26 → yolov26
  • 2026.10.11 ⚡ 逐位对齐 OpenCV 的 CUDA 预处理算子族(resize / copyMakeBorder / cvtColor / hwc2chw / normalize + 融合核)
  • 2026.10.10 📦 legacy CUDA 核归档到 kernels/legacy/,公开头注释全面英译
  • 2026.10.07 🔍 代码评审硬化:batch 上限守卫、丢帧策略、覆盖输入守卫;CTest 入场(32 项)
  • 2026.10.06 🛡️ 运行期配置透视(logConfigBox + 死键 [unused] 判定);URL 流(rtsp / rtmp / http(s) / udp)+ 目录源 + 输出目录规则
  • 2026.10.05 🔢 输入布局抽象(轴字母串 Layout);静态 / 动态 batch 语义统一,以引擎 profile 为唯一真相源
  • 2026.10.04 📄 两级配置:新增 configs/base.ini,模型 ini 只保留特有字段
  • 2026.10.03 ⚙️ 高层 Infer API(InferParams / Infer / Stream / Result)+ renderer 可插拔
  • 2026.10.01 🚀 1 engine + N context:共享 ICudaEngine,4 worker 显存 ~356 → 309 MiB
  • 2026.09.30 🧩 目录按任务拆分 det / seg / kpt;CLI --net 支持全部模型并自动推导 configs/<net>.ini
  • 2026.09.29 🎯 任务类型扩展:YOLOv8-seg / U2Net(seg)、YOLOv8-pose(kpt)
  • 2026.09.28 🔥 YOLOv3 / YOLOv4 / YOLO-NAS / EfficientDet / YuNet 接入(det 共 11 个)
  • 2026.09.27 ⚡ 新增 trt_alpha bench(分步耗时 + p50/p90/p99 + FPS);YOLOv5 / v6 / v7 / YOLOX / YOLOR 接入
  • 2026.09.26 🖥️ CLI list / run 端到端推理;日志模块与内存池收尾
  • 2026.09.25 🔧 三级流水线骨架(source → pool → render)完成
  • 2026.09.24 🎉 全面重构:新框架 core + kernels,第一个模型 YOLOv8 跑通
  • 2026.09.20 🔥 重构框架,实现更高性能,解决历史遗留 bug
  • ...
  • 2023.01.01 🔥 更新 yolov3, yolov4, yolov5, yolov6
  • 2023.01.04 🍅 更新 yolov7, yolox, yolor
  • 2023.01.05 🎉 更新 u2net, libfacedetection
  • 2023.01.08 🚀 全网最快支持 yolov8 的 tensorrt 部署
  • 2023.01.20 🍏 更新 efficientdet, pphumanseg
  • 2023.12.09 🍁 更新 yolov8-pose
  • 2023.12.19 🍉 更新 yolov8-seg
  • 2023.12.27 💖 更新 yolonas

严格精度对齐

example:yolov26

YOLO26 task family: this repository (left) vs PyTorch (right)

部分对齐效果展示 —— 对齐了所有模型的精度

更多参考:对齐时,关闭矩形推理

部分性能展示

YOLO26n per-frame stage cost: TensorRT GPU vs ultralytics CPU

YOLO26n 单帧三段耗时 · 1080p / imgsz 640 / batch=2 折算到每帧 · 不含 H2D 上传与后处理 D2H

安装依赖

依赖 版本 说明
CUDA 12.9 预处理 / 后处理由 CUDA C 实现,支持双 batch
TensorRT 10.16 支持 FP32 / FP16 / INT8 量化
OpenCV >= 4.5 解码 + 窗口 + 存图
C++ C++17
gcc(Linux) 13.3
Visual Studio(Windows) 2017 / 2019 / 2022

具体安装步骤:Windows or Ubuntu 24.04 or Docker

视频硬解和多路 GL 渲染是另外两条可选路线,依赖、编译、执行分别写在:

快速开始

1. 拉代码与编译
git clone -b v2-dev https://github.com/FeiYull/TensorRT-Alpha.git
cd TensorRT-Alpha
Windows(PowerShell)下编译
cmake -S D:\VS2022_Project\TensorRT-Alpha `
      -B D:\VS2022_Project\TensorRT-Alpha\build `
      -G "Visual Studio 17 2022" -A x64 `
      -DOpenCV_DIR=D:/ThirdParty/opencv/build/x64/vc16/lib `
      -DTensorRT_ROOT=D:/ThirdParty/TensorRT-10.16.1.11

cmake --build build --config Release -j 24
.\build\bin\Release\trt_alpha.exe list
Ubuntu 24.04环境下编译
cmake -S ~/workspace/TensorRT-Alpha -B ~/workspace/TensorRT-Alpha/build \
      -DCMAKE_BUILD_TYPE=Release \
      -DOpenCV_DIR=/home/feiyull/thirdparty/opencv4.8.1/lib/cmake/opencv4 \
      -DTensorRT_ROOT=/home/feiyull/thirdparty/TensorRT-10.16.1.11 \
      -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.9/bin/nvcc

cmake --build build -j24
./build/bin/Release/trt_alpha list

要 Debug:多配置生成器把 --config Release 换成 Debug;单配置生成器重配一次 -DCMAKE_BUILD_TYPE=Debug。产物进 bin/Debug/。

2. 序列化模型
# ONNX:用 ultralytics 官方命令行导出
pip install ultralytics
yolo export model=yolo26n.pt format=onnx imgsz=640 batch=2 opset=17 simplify=True

# 序列化:ONNX -> engine
trtexec --onnx=yolo26n.onnx --saveEngine=engines/yolov26n.trt --noTF32

更多参考:导出与序列化

上面 yolo export 只是拿 ultralytics 举个例,不代表只能用 ultralytics。换 MMDetection / Detectron2 / PaddleDetection / 自己写的 PyTorch 训练脚本,流程完全一样:先在各自框架里手动导出 ONNX,再交给 trtexec 序列化。本仓库只消费 ONNX,不负责导出。

3. 执行
./build/bin/Release/trt_alpha run --net yolov26 --source data/bus.jpg --show    # 图片
./build/bin/Release/trt_alpha run --net yolov26 --source data/people.mp4 --show   # 视频
./build/bin/Release/trt_alpha run --net yolov26 --source data/images/ --save output/det/   # 目录
./build/bin/Release/trt_alpha run --net yolov26 --source 0 --show              # 相机
./build/bin/Release/trt_alpha run --net yolov26 --source data/bus.jpg --save output/det/
# 量化模型换 --engine
./build/bin/Release/trt_alpha run --net yolov26 --source data/bus.jpg --engine engines/yolov26n_fp16.trt --show

Windows 下把 ./build/bin/Release/trt_alpha 换成 .\build\bin\Release\trt_alpha.exe。

更多参考:CLI 完整用法

源码里直接调用:

#include "trt_alpha/infer/infer.hpp"

int main(){
    trt_alpha::InferParams p;     
    p.model_type  = trt_alpha::ModelType::yolov26; // det, pose, cls, obb, depth
    p.source = "xxx.jpg";                          // xx.jpg, xx.mp4, camera_id, url, images' path
    // p.engine = "engines/yolov26.trt" p.config_path = "configs/yolov26.ini"
    trt_alpha::Infer  model(p);   trt_alpha::Stream stream = model.async();    trt_alpha::Result r;
    while (stream.get(r)){
        // here:get the results of inference
        // ......
    }
    stream.stop();
    return 1;
}

更多参考:samples/sample_infer/sample_infer.cpp

模型支持

模型矩阵

✅ 已跑通并实测 · 🚧 规划中 · — 未提供 · 📥 点击下载 onnx

model fp32 fp16 int8 下载onnx
YOLO26
yolo26-det ✅ ✅ ✅ 📥
yolo26-seg ✅ ✅ ✅ 📥
yolo26-obb ✅ ✅ ✅ 📥
yolo26-cls ✅ ✅ ✅ 📥
yolo26-depth ✅ ✅ ✅ 📥
yolo26-sem ✅ ✅ ✅ 📥
yolo26-pose ✅ ✅ ✅ 📥
yolo26-tracking 🚧 🚧 🚧 —
YOLOV11
yolov11_det ✅ ✅ ✅ 📥
yolov11_seg ✅ ✅ ✅ 📥
yolov11_obb ✅ ✅ ✅ 📥
yolov11_cls ✅ ✅ ✅ 📥
yolov11_pose ✅ ✅ ✅ 📥
YOLOV9
yolov9_det ✅ ✅ ✅ 📥
yolov9_seg ✅ ✅ ✅ 📥
YOLOV10
yolov10_det ✅ ✅ ✅ 📥

其他(沿用 legacy 资产)

model fp32 fp16 int8 下载onnx
yolov3 ✅ — — 📥
yolov4 ✅ — — 📥
yolov5 ✅ — — 📥
yolov6 ✅ — — 📥
yolov7 ✅ — — 📥
yolov8_det ✅ ✅ ✅ 📥
yolov8_seg ✅ ✅ ✅ 📥
yolov8_cls ✅ ✅ ✅ 📥
yolov8_pose ✅ ✅ ✅ 📥
yolov8_obb ✅ ✅ ✅ 📥
yolox ✅ — — 📥
yolor ✅ — — 📥
yolo_nas ✅ — — 📥
efficientdet ✅ — — 📥
yunet ✅ — — 📥
u2net ✅ — — 📥

目录结构

目录树
app/                 CLI(run / bench / list / build)
cmake/               OpenCV / TensorRT / CUDA 探测 + 运行时部署
configs/             模型 INI(base.ini + <model>.ini 两级)
data/                图片 / 视频 / classes(需自行放入)
include/trt_alpha/   公共头
  ├── core/          引擎 / 内存池 / 队列 / 池 / 模型注册(零 OpenCV)
  ├── datasource/    数据源接口(OpenCV 实现,可替换为 GStreamer)
  ├── pipeline/      三级流水线调度
  ├── renderer/      渲染接口(OpenCV 实现)
  ├── kernels/       CUDA 算子(ops/ = 预处理 / 后处理算子族,legacy/ = 旧实现归档)
  └── det|seg|kpt|cls|depth|sem|obb/  任务类型与模型
src/                 实现
samples/             使用示例(含 sample_infer 高层 API 示例)
test/                单元测试(默认不编,-DTRT_ALPHA_BUILD_TESTS=ON)
scripts/             编译脚本(build_<系统>_<库组合>)+ 引擎序列化 / 参数矩阵

其他

Citation

@misc{FeiYull_TensorRT-Alpha,
  author = {FeiYull},
  title = {TensorRT-Alpha},
  year = {2023},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {https://github.com/FeiYull/tensorrt-alpha}
}

About

🔥🔥🔥TensorRT for YOLO26 (det/pose/seg/depth/obb/cls), YOLOv11,YOLOv10 YOLOv9,YOLOv8, ... 🚀🚀🚀 CUDA IS ALL YOU NEED. 🍎🍎🍎

Topics

Resources

Stars

1.5k stars

Watchers

31 watching

Forks

Releases

Used by

Contributors

Languages