快速体验Jetson Orin部署YOLOv11
2026/8/10 9:19:39 网站建设 项目流程

一、参考资料

Jetson Orin部署YOLOv11:推理速度提升3倍的完整指南 - 知乎

二、准备工作

1. 硬件选型参考

型号算力(TOPS)内存功耗价格适用场景
Orin Nano 4GB204GB7~15W~$250单路摄像头、简单检测
Orin Nano 8GB408GB7~15W~$350多路摄像头、中等模型
Orin NX 8GB708GB10~25W~$600复杂检测、2~4路并行
Orin NX 16GB10016GB10~25W~$900大模型、多路并行
Orin AGX 32GB20032GB15~50W~$2000高端场景、多模型

推荐:工业单路检测选Orin Nano 8GB,性价比最高。

2. 系统安装

刷JetPack

# 在主机上安装 NVIDIA SDK Manager# 下载地址:https://developer.nvidia.com/sdk-manager# 连接Orin,进入recovery模式(按住Recovery按钮,按一下Reset)# 打开SDK Manager,选择:# - Target Hardware: Jetson Orin Nano# - OS: JetPack 6.0 (基于Ubuntu 22.04 + CUDA 12.2)# - 勾选: Jetson Runtime, CUDA, cuDNN, TensorRT, OpenCV# 等待刷机完成(约20~30分钟)

刷机完成后首次启动Orin,进入Ubuntu系统:

# 检查环境cat/etc/nv_tegra_release# 应该显示: R36 (release), REVISION: 3.1, GCID: 35697395nvidia-smi# 显示Jetson GPU信息nvcc--version# 显示CUDA 12.2

系统优化

# 开启MAXN模式(最大性能模式)sudonvpmodel-m0# 开启所有CPU核心满频sudojetson_clocks# 关闭图形界面(节省约1GB内存和10W功耗)sudosystemctl set-default multi-user.targetsudoreboot# 创建swap(4GB内存容易不够用)sudofallocate-l8G /var/swapfilesudochmod600/var/swapfilesudomkswap/var/swapfilesudoswapon/var/swapfileecho'/var/swapfile none swap sw 0 0'|sudotee-a/etc/fstab

3. 安装Python环境

Jetson上不能用pip直接装PyTorch(需要用NVIDIA提供的预编译版本):

# 安装系统依赖sudoapt-getupdatesudoapt-getinstall-ypython3-pip libopenblas-base libopenmpi-dev libomp-dev# 创建虚拟环境python3-mvenv ~/yolo11_envsource~/yolo11_env/bin/activate# 安装PyTorch(Jetson专用版本)pipinstall--no-cache https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.3.0-cp310-cp310-linux_aarch64.whl# 安装torchvision(需要从源码编译)sudoapt-getinstall-ylibjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev pipinstalltorchvision==0.18.0# 安装Ultralyticspipinstallultralytics>=8.3.0# 验证python3-c"import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA: {torch.cuda.is_available()}')"# 输出: PyTorch: 2.3.0, CUDA: True

三、Jetson Orin部署YOLOv11

1. 模型转换(PyTorch → TensorRT)

1.1 导出ONNX

# export_onnx.pyfrom ultralyticsimportYOLO model=YOLO("yolo11s.pt")# 先下载好权重# 导出ONNXmodel.export(format="onnx",imgsz=640,opset=17,simplify=True,dynamic=False,# 固定输入尺寸,TensorRT优化更好half=False# 先导出FP32的ONNX)print("导出完成:yolo11s.onnx")

1.2 转TensorRT引擎

方式一:用trtexec命令行转换(推荐,更稳定)

/usr/src/tensorrt/bin/trtexec\--onnx=yolo11s.onnx\--saveEngine=yolo11s.engine\--fp16\--workspace=4096\--minShapes=images:1x3x640x640\--optShapes=images:1x3x640x640\--maxShapes=images:1x3x640x640# 方式二:用Python API转换# pip install tensorrtpython3 export_tensorrt.py

方式二:用Python API转换

pipinstalltensorrt python3 export_tensorrt.py
# export_tensorrt.pyimporttensorrtastrtimportosdefbuild_engine(onnx_path,engine_path,fp16=True):TRT_LOGGER=trt.Logger(trt.Logger.WARNING)builder=trt.Builder(TRT_LOGGER)config=builder.create_builder_config()# 设置工作空间(Jetson 8GB建议设2~4GB)config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE,4<<30)iffp16:config.set_flag(trt.BuilderFlag.FP16)# 显存优化config.set_flag(trt.BuilderFlag.STRICT_TYPES)# 读取ONNXnetwork=builder.create_network(1<<int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))parser=trt.OnnxParser(network,TRT_LOGGER)withopen(onnx_path,'rb')asf:ifnotparser.parse(f.read()):forerrorinrange(parser.num_errors):print(f"解析错误:{parser.get_error(error)}")returnNone# 构建引擎print("正在构建TensorRT引擎(可能需要5~15分钟)...")engine_bytes=builder.build_serialized_network(network,config)withopen(engine_path,'wb')asf:f.write(engine_bytes)print(f"引擎已保存到:{engine_path}")# 显示引擎信息engine=trt.Runtime(TRT_LOGGER).deserialize_cuda_engine(engine_bytes)print(f"输入绑定:{engine.get_binding_shape(0)}")print(f"FP16模式:{fp16}")build_engine("yolo11s.onnx","yolo11s_fp16.engine",fp16=True)

1.3 用Ultralytics直接导出(最简单)

# Ultralytics内置了TensorRT导出功能(最推荐的方式)yoloexportmodel=yolo11s.ptformat=engineimgsz=640half=Truedevice=0# 直接在Jetson上运行yolo predictmodel=yolo11s.enginesource=camera://0

2. 推理脚本

2.1 高效推理(TensorRT引擎)

# infer_jetson.pyimportcv2importtimeimportnumpyasnpfromultralyticsimportYOLOclassJetsonDetector:""" Jetson Orin上运行YOLOv11 TensorRT引擎 专为边缘设备优化 """def__init__(self,engine_path,conf=0.3,iou=0.45):self.model=YOLO(engine_path,task='detect')self.conf=conf self.iou=iou# 预热(首次推理会编译着色器,需要预热)dummy=np.zeros((640,640,3),dtype=np.uint8)_=self.model(dummy,verbose=False)print("预热完成")defdetect(self,image,draw=True):"""检测单张图片"""results=self.model(image,conf=self.conf,iou=self.iou,verbose=False)detections=[]annotated=image.copy()forresultinresults:forboxinresult.boxes:cls_id=int(box.cls[0])cls_name=self.model.names[cls_id]conf_score=float(box.conf[0])x1,y1,x2,y2=map(int,box.xyxy[0])detections.append({"class":cls_name,"confidence":conf_score,"bbox":[x1,y1,x2,y2]})ifdraw:cv2.rectangle(annotated,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(annotated,f"{cls_name}{conf_score:.2f}",(x1,y1-5),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),1)returndetections,annotateddefbenchmark(self,num_frames=300):"""性能测试"""dummy=np.random.randint(0,255,(640,480,3),dtype=np.uint8)# 预热for_inrange(30):self.model(dummy,verbose=False)# 正式测试times=[]for_inrange(num_frames):start=time.perf_counter()_=self.model(dummy,verbose=False)times.append((time.perf_counter()-start)*1000)times=np.array(times)print(f"=== Jetson 性能测试 ({num_frames}帧) ===")print(f"平均延迟:{times.mean():.1f}ms")print(f"P50延迟:{np.percentile(times,50):.1f}ms")print(f"P99延迟:{np.percentile(times,99):.1f}ms")print(f"FPS:{1000/times.mean():.1f}")print(f"GPU显存: 已使用TensorRT引擎,显存占用见nvidia-smi")# === 使用示例 ===if__name__=="__main__":detector=JetsonDetector("yolo11s_fp16.engine",conf=0.3)# 性能测试detector.benchmark(num_frames=500)# 摄像头检测cap=cv2.VideoCapture(0)cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,480)whileTrue:ret,frame=cap.read()ifnotret:breakdets,annotated=detector.detect(frame)cv2.imshow("Jetson YOLOv11",annotated)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()

2.2 DeepStream部署(专业方案)

DeepStream是NVIDIA官方的视频分析SDK,能在Jetson上实现多路并行。

安装DeepStream:

# 安装DeepStreamsudoapt-getinstall-ydeepstream-7.0

创建配置文件:

# deepstream_config.txt(简化版)[application]enable-perf-measurement=1perf-measurement-interval-sec=5[stream0]uri=file:///path/to/test_video.mp4[primary-gie]unique-id=1engine-type=nvinfer config-file=detect_config.txt

运行DeepStream:

deepstream-app-cdeepstream_app_config.txt

Note:DeepStream配置比较复杂,入门建议先用Ultralytics推理,熟练后再迁移到DeepStream。

3. 速度优化对比

在Jetson Orin Nano 8GB上的实测数据:

方案FPS延迟(ms)功耗(W)说明
PyTorch FP32128315最慢,不推荐
PyTorch FP16185515半精度提升约50%
ONNX Runtime FP16224512比PyTorch快一倍
TensorRT FP16382610推荐方案,提速3倍
TensorRT INT8521910最快,精度损失约1%
TensorRT FP16 + 480p65158降低输入分辨率提速

结论:TensorRT FP16是最佳平衡点,速度提升3倍,精度几乎无损。

4. 部署中的三个关键细节

4.1 性能模式要手动开启

Jetson出厂默认不是满血状态,需要手动切换:

# 开启MAXN模式(最大性能模式)sudonvpmodel-m0# 开启所有CPU核心满频sudojetson_clocks

4.2 视频解码要用硬件加速

边缘设备通常接入USB摄像头或RTSP视频流。我们使用GStreamer管道做硬件解码,把视频处理从CPU卸载到GPU,避免CPU成为瓶颈。

4.3 推理和显示要异步并行

为了保证实时性,三个线程各司其职:

线程1(采集):持续抓帧 → 放入队列

线程2(推理):从队列取帧 → YOLO推理 → 输出结果

线程3(业务):读取结果 → 画框显示 → 判断是否报警

三个线程并行工作,互不阻塞。

四、FAQ

Q1:TensorRT构建引擎时OOM

方法一:减小workspace大小。

/usr/src/tensorrt/bin/trtexec--onnx=yolo11s.onnx--saveEngine=yolo11s.engine--fp16--workspace=2048

方法二:或者使用更小的模型

yoloexportmodel=yolo11n.ptformat=engineimgsz=640half=True

Q2:推理速度不稳定,时快时慢

解决方法

# 确保开启了MAXN模式和jetson_clockssudonvpmodel-m0sudojetson_clocks# 检查CPU调频cat/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor# 全部应该是performance

Q3:USB摄像头花屏

错误原因:Jetson的USB3.0可能不稳定。

解决方法:修改/etc/extlinux.conf

sudovim/etc/extlinux.conf# 在APPEND行末尾添加:usbcore.autosuspend=-1# 重启sudoreboot

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

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

立即咨询