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
相关推荐
mahtengdbb115 小时前
YOLOv10n-ADown改进实现路面裂缝与坑洼检测_计算机视觉_目标检测_道路维护_智能检测系统
yolo·目标检测·计算机视觉
音沐mu.18 小时前
【46】骰子数据集(有v5/v8模型)/YOLO骰子点数检测
yolo·目标检测·数据集·骰子数据集·骰子点数检测
2501_9361460420 小时前
YOLOv8轻量级改进:slimneck-prune技术实现番茄大小分选与成熟度识别
yolo
AI小怪兽20 小时前
轻量、实时、高精度!MIE-YOLO:面向精准农业的多尺度杂草检测新框架 | MDPI AgriEngineering 2026
开发语言·人工智能·深度学习·yolo·无人机
Lun3866buzha1 天前
【目标检测】厨房场景目标物检测与识别-YOLOv5改进版_HSPAN_DySample实战
yolo·目标检测·目标跟踪
ASF1231415sd1 天前
【基于YOLOv10n-CSP-PTB的大豆花朵检测与识别系统详解】
人工智能·yolo·目标跟踪
AI小怪兽1 天前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机
ASD125478acx2 天前
多类型孢子与真菌的智能识别与分类系统YOLO模型优化方法
yolo·目标跟踪·分类
2501_936146042 天前
【计算机视觉系列】:基于YOLOv8-RepHGNetV2的鱿鱼目标检测模型优化与实现
yolo·目标检测·计算机视觉
羊羊小栈2 天前
基于YOLO和多模态大语言模型的智能电梯安全监控预警系统(vue+flask+AI算法)
人工智能·yolo·语言模型·毕业设计·创业创新·大作业