YOLOv8 模型权重格式详解

YOLOv8 模型权重格式详解

本文档详细介绍 YOLOv8 支持的各种模型权重格式,包括项目中已有的格式和常见的其他格式。

目录

  1. 项目中的模型文件
  2. 各格式详细说明
  3. 格式对比表
  4. 格式转换方法
  5. 各格式调用方法
  6. 选择建议

1. 项目中的模型文件

文件名 大小 格式 用途
yolov8n.onnx 13M ONNX 跨平台通用推理
yolov8n.bin 3.6M OpenVINO Intel CPU/GPU 加速
yolov8n.rknn 5.7M RKNN 瑞芯微 NPU 加速
yolov8n.trt 18M TensorRT NVIDIA GPU 加速 (x86)
yolov8n_arm.trt 14M TensorRT NVIDIA GPU 加速 (ARM)

2. 各格式详细说明

2.1 PyTorch (.pt)

概述:PyTorch 原生权重格式,是 YOLOv8 的源格式。

特点

  • 包含完整的模型结构和权重
  • 支持训练和推理
  • 可动态修改模型
  • 文件较大,包含优化器状态等额外信息

适用场景

  • 模型训练和微调
  • 开发调试阶段
  • 需要修改模型结构
  • 作为转换其他格式的源文件

优点

  • 灵活性最高
  • 支持所有 PyTorch 功能
  • 易于调试和修改

缺点

  • 推理速度相对较慢
  • 需要完整的 PyTorch 环境
  • 部署依赖较重

2.2 ONNX (.onnx)

概述:Open Neural Network Exchange,开放神经网络交换格式。

特点

  • 跨框架通用格式
  • 静态计算图
  • 广泛的硬件支持
  • 标准化的算子定义

适用场景

  • 跨平台部署
  • 作为中间格式转换到其他格式
  • 使用 ONNX Runtime 推理
  • 需要在多种硬件上运行

优点

  • 跨平台兼容性好
  • 生态系统丰富
  • 可作为转换枢纽
  • 支持多种推理引擎

缺点

  • 不支持动态操作
  • 某些复杂操作可能不支持
  • 性能不如专用格式

项目中的使用

python 复制代码
import onnxruntime as ort
session = ort.InferenceSession("yolov8n.onnx", providers=['CPUExecutionProvider'])

2.3 TensorRT (.trt / .engine)

概述:NVIDIA 深度学习推理优化器和运行时。

特点

  • 针对 NVIDIA GPU 深度优化
  • 支持 FP16/INT8 量化
  • 层融合和内核自动调优
  • 平台相关(不同 GPU 需重新生成)

适用场景

  • NVIDIA GPU 部署
  • 需要最高推理性能
  • 实时检测应用
  • 边缘设备(Jetson 系列)

优点

  • NVIDIA GPU 上性能最优
  • 支持多种精度优化
  • 内存占用优化

缺点

  • 仅支持 NVIDIA GPU
  • 不同 GPU/CUDA 版本需重新编译
  • 生成过程耗时

项目中的文件

  • yolov8n.trt:x86 平台(桌面/服务器 GPU)
  • yolov8n_arm.trt:ARM 平台(Jetson 系列)

2.4 OpenVINO (.bin + .xml)

概述:Intel 开发的深度学习部署工具包。

特点

  • 针对 Intel 硬件优化
  • 支持 CPU、集成 GPU、VPU、FPGA
  • 自动硬件适配
  • 支持异构计算

适用场景

  • Intel CPU 部署
  • Intel 集成显卡加速
  • Intel 神经计算棒(NCS)
  • 边缘计算设备

优点

  • Intel 硬件上性能优秀
  • 支持多种 Intel 加速器
  • 低功耗优化

缺点

  • 主要针对 Intel 硬件
  • 需要 OpenVINO 运行时

注意:OpenVINO 格式通常包含两个文件:

  • .bin:权重数据
  • .xml:模型结构(项目中可能缺失)

2.5 RKNN (.rknn)

概述:瑞芯微(Rockchip)NPU 专用格式。

特点

  • 针对瑞芯微 NPU 优化
  • 支持 INT8/FP16 量化
  • 低功耗高效能
  • 适合嵌入式部署

适用场景

  • 瑞芯微芯片(RK3588、RK3568 等)
  • 嵌入式 AI 应用
  • 低功耗边缘设备
  • 安防监控设备

优点

  • NPU 加速,性能优秀
  • 功耗低
  • 适合嵌入式场景

缺点

  • 仅支持瑞芯微平台
  • 需要 RKNN Toolkit

2.6 其他常见格式

CoreML (.mlmodel / .mlpackage)
  • 用途:Apple 设备(iOS、macOS)
  • 特点:针对 Apple Neural Engine 优化
TensorFlow SavedModel / TFLite (.pb / .tflite)
  • 用途:TensorFlow 生态、移动端部署
  • 特点:TFLite 适合 Android 和嵌入式
PaddlePaddle (.pdmodel)
  • 用途:百度 PaddlePaddle 框架
  • 特点:国产框架,适合国内部署
NCNN (.param + .bin)
  • 用途:腾讯开源的移动端推理框架
  • 特点:轻量级,适合移动端

3. 格式对比表

格式 文件大小 推理速度 跨平台 训练支持 主要硬件
.pt 中等 CPU/GPU
.onnx 中等 中等 通用
.trt 最快 NVIDIA GPU
.bin (OpenVINO) Intel
.rknn Rockchip NPU
.tflite 部分 移动端/嵌入式
.mlmodel 中等 Apple

性能对比(相对值,以 .pt 为基准 1.0)

格式 CPU 推理 GPU 推理 内存占用
.pt 1.0x 1.0x 1.0x
.onnx 1.2-1.5x 1.1-1.3x 0.8x
.trt - 2-4x 0.6x
OpenVINO 1.5-2x 1.3-1.8x 0.7x

4. 格式转换方法

4.1 从 .pt 转换到其他格式

使用 Ultralytics 提供的 export 功能:

python 复制代码
from ultralytics import YOLO

# 加载 PyTorch 模型
model = YOLO("yolov8n.pt")

# 转换为 ONNX
model.export(format="onnx", imgsz=640, simplify=True)

# 转换为 TensorRT (需要 NVIDIA GPU)
model.export(format="engine", imgsz=640, half=True)  # FP16
model.export(format="engine", imgsz=640, int8=True)  # INT8

# 转换为 OpenVINO
model.export(format="openvino", imgsz=640, half=True)

# 转换为 TFLite
model.export(format="tflite", imgsz=640)

# 转换为 CoreML (macOS)
model.export(format="coreml", imgsz=640)

# 转换为 PaddlePaddle
model.export(format="paddle", imgsz=640)

# 转换为 NCNN
model.export(format="ncnn", imgsz=640)

4.2 转换为 RKNN

RKNN 需要使用专门的工具包:

python 复制代码
from rknn.api import RKNN

rknn = RKNN()

# 配置
rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')

# 加载 ONNX 模型
rknn.load_onnx(model='yolov8n.onnx')

# 构建
rknn.build(do_quantization=True, dataset='calibration_data.txt')

# 导出
rknn.export_rknn('yolov8n.rknn')

4.3 命令行转换

bash 复制代码
# 使用 yolo 命令行工具
yolo export model=yolov8n.pt format=onnx imgsz=640
yolo export model=yolov8n.pt format=engine imgsz=640 half=True
yolo export model=yolov8n.pt format=openvino imgsz=640

5. 各格式调用方法

5.1 PyTorch (.pt) - Ultralytics 原生

python 复制代码
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
results = model("image.jpg", conf=0.5)

# 获取检测结果
for box in results[0].boxes:
    xyxy = box.xyxy[0].cpu().numpy()  # [x1, y1, x2, y2]
    conf = box.conf[0].item()          # 置信度
    cls = int(box.cls[0].item())       # 类别ID

5.2 ONNX - ONNX Runtime

python 复制代码
import onnxruntime as ort
import numpy as np
import cv2

# 创建会话
session = ort.InferenceSession("yolov8n.onnx", providers=['CPUExecutionProvider'])
# GPU: providers=['CUDAExecutionProvider', 'CPUExecutionProvider']

# 预处理
image = cv2.imread("image.jpg")
input_data = preprocess(image)  # letterbox + normalize + transpose

# 推理
outputs = session.run(None, {session.get_inputs()[0].name: input_data})

# 后处理
results = postprocess(outputs)

5.3 TensorRT

python 复制代码
import tensorrt as trt
import pycuda.driver as cuda
import pycuda.autoinit

# 加载引擎
with open("yolov8n.trt", "rb") as f:
    engine = trt.Runtime(trt.Logger()).deserialize_cuda_engine(f.read())

context = engine.create_execution_context()

# 分配内存并推理
# ... (需要更多代码处理输入输出绑定)

或使用 Ultralytics 简化调用

python 复制代码
from ultralytics import YOLO

model = YOLO("yolov8n.engine")  # 自动使用 TensorRT
results = model("image.jpg")

5.4 OpenVINO

python 复制代码
from openvino.runtime import Core

core = Core()
model = core.read_model("yolov8n.xml")
compiled_model = core.compile_model(model, "CPU")  # 或 "GPU"

# 推理
output = compiled_model([input_data])

5.5 RKNN

python 复制代码
from rknnlite.api import RKNNLite

rknn = RKNNLite()
rknn.load_rknn("yolov8n.rknn")
rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0)

# 推理
outputs = rknn.inference(inputs=[input_data])

6. 选择建议

按部署场景选择

场景 推荐格式 原因
开发调试 .pt 灵活,支持训练
通用部署 .onnx 跨平台兼容
NVIDIA GPU 服务器 .trt 性能最优
NVIDIA Jetson .trt (ARM) 边缘 GPU 加速
Intel CPU/集显 OpenVINO Intel 优化
瑞芯微开发板 .rknn NPU 加速
iOS/macOS .mlmodel Apple 优化
Android .tflite 移动端优化

按优先级选择

  1. 追求最高性能:TensorRT (.trt) > OpenVINO > ONNX > PyTorch
  2. 追求兼容性:ONNX > PyTorch > 其他
  3. 追求灵活性:PyTorch (.pt) > ONNX > 其他
  4. 嵌入式部署:RKNN/TFLite/NCNN(根据硬件选择)

本项目推荐

  • 训练和开发 :使用 .pt 格式
  • 通用测试 :使用 .onnx 格式(当前 test_ros1bag_perception_full.py 使用)
  • 支持自定义权重 :使用 test_ros1bag_perception_full_pt.py(支持 .pt.onnx
  • 生产部署:根据目标硬件选择对应格式

附录:常用命令速查

bash 复制代码
# 查看模型信息
yolo info model=yolov8n.pt

# 导出为 ONNX
yolo export model=yolov8n.pt format=onnx

# 导出为 TensorRT FP16
yolo export model=yolov8n.pt format=engine half=True

# 验证导出的模型
yolo val model=yolov8n.onnx data=coco.yaml

# 使用导出的模型推理
yolo predict model=yolov8n.onnx source=image.jpg
相关推荐
Dev7z4 小时前
基于YOLOv11的独居老人摔倒识别设计与实现(数据集+UI界面+训练代码+数据分析)
yolo
智驱力人工智能4 小时前
无人机河道漂浮物检测 从项目构建到价值闭环的系统工程 无人机河道垃圾识别 农村河道漂浮物智能清理方案 无人机辅助河道清洁预警
opencv·算法·安全·yolo·目标检测·无人机·边缘计算
Norach5 小时前
Ubuntu升级opencv版本至4.9.0
linux·经验分享·opencv·yolo·ubuntu·dnn
wfeqhfxz25887826 小时前
基于YOLOv10n的热带海洋蝴蝶鱼物种识别与分类系统_P3456数据集训练_1
yolo·分类·数据挖掘
码上掘金8 小时前
基于YOLO与MobileSAM的路面缺陷智能检测系统
yolo
Wulida00999115 小时前
军用装备视觉识别与分类_yolov10n-PST模型详解
yolo·目标跟踪·分类
FL162386312916 小时前
[C#][winform]基于yolov11的淡水鱼种类检测识别系统C#源码+onnx模型+评估指标曲线+精美GUI界面
人工智能·yolo·目标跟踪
音沐mu.18 小时前
【36】行人红绿灯数据集(有v5/v8模型)/YOLO行人红绿灯检测
yolo·目标检测·数据集·行人红绿灯数据集·行人红绿灯检测·闯红灯检测
Wulida0099911 天前
【目标检测】基于改进YOLOv13-C3k2-DWR的铲斗定位系统研究
人工智能·yolo·目标检测