You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将YOLOv5 Python脚本迁移至YOLOv8?

YOLOv5脚本升级到YOLOv8的具体操作

1. 安装YOLOv8依赖

YOLOv8是ultralytics官方维护的新版本,先安装对应的库:

pip install ultralytics

2. 修改模型加载代码

替换原来用torch.hub.load加载YOLOv5的方式,改用YOLOv8专属的加载逻辑:

# 新增YOLO类导入,替换原模型加载代码
from ultralytics import YOLO
model = YOLO('yolov8x.pt')  # yolov8x对应原脚本的yolov5x,也可根据需求选yolov8s/yolov8m等

3. 调整检测结果处理逻辑

YOLOv8的推理结果结构和v5不同,需要修改检测框和类别的获取方式:

  • 原脚本的results.xyxy[0]对应YOLOv8的results[0].boxes
  • 类别ID从x[5]改为int(box.cls[0])
  • 检测框坐标从x[:4]改为box.xyxy[0]

4. 修改后的完整脚本

import cv2
import torch
import os
from PIL import Image
from ultralytics import YOLO  # 新增导入

# 加载预训练YOLOv8模型
model = YOLO('yolov8x.pt')

# 待使用的宽高比
aspect_ratios = [(1024, 1280)]

def auto_zoom(input_dir, output_base_dir):
    # 遍历输入目录下的所有文件
    for filename in os.listdir(input_dir):
        input_path = os.path.join(input_dir, filename)
        img = cv2.imread(input_path)

        if img is None:
            continue

        # 模型推理
        results = model(img)

        # 查找第一个检测到的人类(person类ID为0)
        human = None
        for box in results[0].boxes:
            if int(box.cls[0]) == 0:
                human = box.xyxy[0]
                break

        if human is None:
            print(f"图片{input_path}中未检测到人类。")
            os.remove(input_path)
            continue

        # 提取人类检测框坐标
        x1, y1, x2, y2 = map(int, human)
        # 此处可继续编写原脚本后续的裁剪逻辑

核心改动说明

  • 模型加载:YOLOv8用统一的YOLO类管理模型,支持加载、训练、推理全流程,比v5的hub加载更灵活
  • 结果结构:YOLOv8将检测框封装在boxes对象中,每个box包含坐标、类别、置信度等属性,结构更清晰
  • 类别判断:人类(person)的类别ID仍为0,和YOLOv5保持一致,无需调整类别判断逻辑

内容的提问来源于stack exchange,提问作者Furkan Gözükara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:47:19