微调后的YOLOv8分类器预测时触发TypeError错误求助
解决YOLOv8分类模型预测时的TypeError问题
问题描述
在Roboflow上完成YOLOv8分类模型微调并下载最优参数后,执行如下预测代码:
model2 = YOLO("spectrogramfinetunedyolo.pt") result = model2("640_X_640.jpg")
或调用model2.predict("640_X_640.jpg")时,持续报错:
TypeError: Unexpected type <class 'numpy.ndarray'>
已尝试修改文件类型、调整图片尺寸,问题仍未解决。
错误原因
报错源于torchvision的Resize变换无法处理numpy.ndarray类型的输入。该变换期望的输入为PIL Image或Tensor,但实际传入的是numpy数组,导致预处理流程中断。
解决方案
方案1:手动加载为PIL Image后传入模型
显式将图像以PIL格式加载,确保输入类型符合模型预处理要求:
from PIL import Image from ultralytics import YOLO model2 = YOLO("spectrogramfinetunedyolo.pt") # 以PIL格式加载图像 img = Image.open("640_X_640.jpg") # 执行预测 result = model2(img)
方案2:升级Ultralytics库到最新稳定版
部分旧版本可能存在图像加载与预处理的兼容问题,通过升级库修复:
pip install --upgrade ultralytics
方案3:调整模型预处理变换以支持numpy数组
如果需要直接处理numpy数组,可在模型的变换管道中添加numpy转PIL的步骤:
from torchvision import transforms from ultralytics import YOLO model2 = YOLO("spectrogramfinetunedyolo.pt") # 获取当前模型的预处理变换 current_transforms = model2.predictor.transforms # 新增numpy转PIL的变换,插入到现有变换前 new_transforms = transforms.Compose([ transforms.ToPILImage(), *current_transforms.transforms ]) # 更新模型的预处理变换 model2.predictor.transforms = new_transforms # 现在可以直接传入numpy数组或图像路径 result = model2("640_X_640.jpg")
内容的提问来源于stack exchange,提问作者Farida Yasser
相关产品推荐
相关产品推荐

