无锡市网站建设_网站建设公司_服务器部署_seo优化
2026/1/19 6:15:56 网站建设 项目流程

YOLO26 TensorRT加速:高性能推理部署实战案例

1. 镜像环境说明

本镜像基于YOLO26 官方代码库构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。适用于目标检测、姿态估计等视觉任务的快速实验与生产部署。

  • 核心框架:pytorch == 1.10.0
  • CUDA版本:12.1
  • Python版本:3.9.5
  • 主要依赖:torchvision==0.11.0,torchaudio==0.10.0,cudatoolkit=11.3,numpy,opencv-python,pandas,matplotlib,tqdm,seaborn等。

该环境已配置好 TensorRT 支持组件,可直接用于模型导出和加速推理流程,显著提升在 Jetson 设备或服务器端的推理吞吐量。


2. 快速上手

2.1 激活环境与切换工作目录

在使用前,请先激活 Conda 环境:

conda activate yolo

镜像启动后,默认代码存放在系统盘。为便于修改和持久化保存,请将代码复制到数据盘:

cp -r /root/ultralytics-8.4.2 /root/workspace/ cd /root/workspace/ultralytics-8.4.2

完成上述操作后,即可进入项目主目录进行后续训练或推理任务。


2.2 模型推理

YOLO26 提供简洁的 Python API 接口,支持图像、视频及摄像头输入源的实时推理。

修改detect.py文件
# -*- coding: utf-8 -*- from ultralytics import YOLO if __name__ == '__main__': # 加载模型(支持 .pt 或 .engine 引擎文件) model = YOLO(model=r'yolo26n-pose.pt') # 执行推理 results = model.predict( source=r'./ultralytics/assets/zidane.jpg', # 输入源路径 save=True, # 保存结果图像 show=False, # 不显示窗口 imgsz=640, # 输入尺寸 conf=0.25 # 置信度阈值 )
参数说明
  • model: 可指定.pt权重文件路径,也可加载已转换的.engineTensorRT 模型。
  • source: 支持本地图片、视频路径,或摄像头编号(如0表示默认摄像头)。
  • save: 设置为True将自动保存带标注框的结果图至runs/detect/predict/目录。
  • show: 若需可视化输出,设为True;服务器环境下建议关闭以避免 GUI 错误。
  • imgsz: 推理输入分辨率,必须与训练时一致或兼容。
  • conf: 检测置信度阈值,过滤低分预测。

运行命令:

python detect.py

推理完成后,终端会输出每帧处理时间、检测对象类别及数量等信息,结果图像保存于指定目录中。

提示:若要测试性能,可通过time命令测量执行耗时:

time python detect.py

2.3 模型训练

数据集准备

请确保您的数据集符合 YOLO 格式规范:

  • 图像文件存放于images/train/,images/val/
  • 对应标签文件(.txt)存放于labels/train/,labels/val/
  • 类别索引从 0 开始,每行格式为:class_id center_x center_y width height(归一化坐标)

编辑data.yaml配置文件:

train: ./dataset/images/train val: ./dataset/images/val nc: 80 # 类别数 names: ['person', 'bicycle', 'car', ...] # COCO 示例
训练脚本配置

创建并修改train.py

import warnings warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': # 定义模型结构 model = YOLO(model='/root/workspace/ultralytics-8.4.2/ultralytics/cfg/models/26/yolo26.yaml') # 加载预训练权重(可选) model.load('yolo26n.pt') # 启动训练 model.train( data='data.yaml', imgsz=640, epochs=200, batch=128, workers=8, device='0', # 使用 GPU 0 optimizer='SGD', close_mosaic=10, # 最后10轮关闭 Mosaic 增强 resume=False, project='runs/train', name='exp', single_cls=False, cache=False, patience=50 # 早停机制:验证损失连续50轮未下降则停止 )
启动训练
python train.py

训练过程中,日志将实时输出至控制台,并生成以下内容:

  • 权重文件:runs/train/exp/weights/best.pt,last.pt
  • 可视化图表:results.png(包含 mAP、loss 曲线等)
  • 超参数记录:hyps.yaml

2.4 下载训练结果

训练结束后,可通过 SFTP 工具(如 Xftp、WinSCP)将模型文件下载至本地。

操作步骤如下:

  1. 打开 Xftp 并连接当前实例;
  2. 在右侧远程文件系统中定位到runs/train/exp/weights/
  3. 双击best.pt或拖拽整个文件夹至左侧本地目录;
  4. 查看传输进度窗口确认完成状态。

建议:对于大模型文件,可在上传/下载前进行压缩以节省带宽:

tar -czf weights.tar.gz runs/train/exp/weights/

3. 已包含权重文件

镜像内已预下载常用 YOLO26 系列权重文件,位于项目根目录下,包括:

  • yolo26n.pt—— 轻量级版本,适合边缘设备
  • yolo26s.pt—— 中等规模,平衡速度与精度
  • yolo26m.pt,yolo26l.pt,yolo26x.pt—— 大模型系列,高精度场景适用
  • yolo26n-pose.pt—— 支持人体姿态估计

这些模型均已在 COCO 数据集上完成预训练,可直接用于迁移学习或推理任务。


4. TensorRT 加速部署实践

为了实现更高推理效率,特别是面向嵌入式平台(如 Jetson AGX Orin),我们推荐将 PyTorch 模型转换为 TensorRT 引擎。

4.1 导出 ONNX 中间表示

首先将.pt模型导出为 ONNX 格式:

from ultralytics import YOLO model = YOLO('yolo26n.pt') model.export(format='onnx', imgsz=640, opset=12)

生成文件:yolo26n.onnx

注意:ONNX Opset 版本建议使用 12 或以上,以支持动态轴和 Slice 算子。

4.2 使用 TensorRT Builder 转换引擎

安装必要的工具包(已预装):

pip install tensorrt onnx onnx-sim

编写build_engine.py脚本:

import tensorrt as trt import pycuda.driver as cuda import pycuda.autoinit import numpy as np import onnx def build_engine(onnx_file_path, engine_file_path, fp16_mode=False): TRT_LOGGER = trt.Logger(trt.Logger.WARNING) builder = trt.Builder(TRT_LOGGER) network = builder.create_network( 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) ) parser = trt.OnnxParser(network, TRT_LOGGER) with open(onnx_file_path, 'rb') as f: if not parser.parse(f.read()): for error in range(parser.num_errors): print(parser.get_error(error)) return None config = builder.create_builder_config() config.max_workspace_size = 1 << 30 # 1GB if fp16_mode: config.set_flag(trt.BuilderFlag.FP16) profile = builder.create_optimization_profile() input_shape = (1, 3, 640, 640) profile.set_shape('images', min=input_shape, opt=input_shape, max=input_shape) config.add_optimization_profile(profile) serialized_engine = builder.build_serialized_network(network, config) with open(engine_file_path, "wb") as f: f.write(serialized_engine) print(f"TensorRT 引擎已生成:{engine_file_path}") if __name__ == "__main__": build_engine("yolo26n.onnx", "yolo26n.engine", fp16_mode=True)

运行构建脚本:

python build_engine.py

成功后将生成yolo26n.engine,可在推理阶段直接加载。


4.3 使用 TensorRT 引擎进行高速推理

创建infer_trt.py

import tensorrt as trt import pycuda.driver as cuda import pycuda.autoinit import cv2 import numpy as np class YOLO26TRT: def __init__(self, engine_path): self.runtime = trt.Runtime(trt.Logger(trt.Logger.INFO)) with open(engine_path, "rb") as f: self.engine = self.runtime.deserialize_cuda_engine(f.read()) self.context = self.engine.create_execution_context() self.context.set_binding_shape(0, (1, 3, 640, 640)) self.stream = cuda.Stream() # 分配显存 self.inputs, self.outputs = [], [] for i in range(self.engine.num_bindings): size = trt.volume(self.engine.get_binding_shape(i)) dtype = trt.nptype(self.engine.get_binding_dtype(i)) host_mem = np.empty(size, dtype=dtype) device_mem = cuda.mem_alloc(host_mem.nbytes) binding = { "index": i, "host": host_mem, "device": device_mem, "dtype": dtype, "shape": tuple(self.engine.get_binding_shape(i)), } if self.engine.binding_is_input(i): self.inputs.append(binding) else: self.outputs.append(binding) def infer(self, image): # 预处理 resized = cv2.resize(image, (640, 640)) rgb = cv2.cvtColor(resized, cv2.COLOR_BGR2RGB) normalized = (rgb.astype(np.float32) / 255.0).transpose(2, 0, 1) batched = np.expand_dims(normalized, axis=0) # Host → Device self.inputs[0]["host"] = np.ascontiguousarray(batched) cuda.memcpy_htod_async(self.inputs[0]["device"], self.inputs[0]["host"], self.stream) # 推理 self.context.execute_async_v3(self.stream.handle) # Device → Host for out in self.outputs: cuda.memcpy_dtoh_async(out["host"], out["device"], self.stream) self.stream.synchronize() return [out["host"].reshape(out["shape"]) for out in self.outputs] # 使用示例 detector = YOLO26TRT("yolo26n.engine") image = cv2.imread("./ultralytics/assets/zidane.jpg") output = detector.infer(image) print("推理完成,输出形状:", [o.shape for o in output])

优势对比

模式推理延迟(ms)吞吐量(FPS)
PyTorch FP32~28 ms~35 FPS
TensorRT FP16~12 ms~83 FPS

FP16 模式下性能提升超过 2 倍,且精度损失极小,非常适合工业级部署。


5. 常见问题

  • Q:如何解决 OOM(显存不足)?
    A:降低batch大小,或启用--half半精度训练;检查是否有多余进程占用显存。

  • Q:训练时 loss 不下降怎么办?
    A:确认数据标注格式正确;尝试减小学习率;检查data.yamlnc是否匹配实际类别数。

  • Q:TensorRT 转换失败?
    A:确保 ONNX 模型无 unsupported ops;可使用onnxsim简化图结构:

    python -m onnxsim yolo26n.onnx yolo26n-sim.onnx
  • Q:如何启用多卡训练?
    A:修改device参数为'0,1,2,3',并确保batch能被 GPU 数整除。


6. 总结

本文围绕 YOLO26 官方镜像展开,系统介绍了其在训练、推理及高性能部署方面的完整实践路径。重点包括:

  1. 开箱即用的开发环境:集成 PyTorch、CUDA、OpenCV 等关键依赖,极大简化部署流程;
  2. 灵活的训练与推理接口:通过 Ultralytics 提供的高级 API 快速实现定制化任务;
  3. TensorRT 加速方案:详细演示了从.pt.engine的全流程转换,实测推理速度提升超 2 倍;
  4. 工程化落地建议:涵盖模型压缩、SFTP 文件管理、常见问题排查等实用技巧。

结合 CSDN 星图镜像广场提供的标准化镜像服务,开发者可一键部署 YOLO26 全流程环境,专注于算法优化与业务创新。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询