English | 简体中文
特色简介
C++ 推理仓库,基于 TensorRT + CUDA,手写全部 CUDA C 算子:
近期计划
- 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 ⚙️ 高层
InferAPI(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
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-AlphaWindows(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 listUbuntu 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 --showWindows 下把 ./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;
}模型矩阵
✅ 已跑通并实测 · 🚧 规划中 · — 未提供 · 📥 点击下载 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 资产)
目录树
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_<系统>_<库组合>)+ 引擎序列化 / 参数矩阵
@misc{FeiYull_TensorRT-Alpha,
author = {FeiYull},
title = {TensorRT-Alpha},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {https://github.com/FeiYull/tensorrt-alpha}
}
