如何将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
相关产品推荐
相关产品推荐

