yolo11分类测试
时间: 2024-12-29 18:17:43 浏览: 11
### 使用YOLOv11进行图像分类测试
对于使用YOLOv11执行图像分类任务,尽管该版本主要专注于目标检测,但可以通过调整配置来适应分类需求。为了完成这一过程,需准备数据集并按照特定结构组织文件夹[^4]。
#### 准备工作
确保安装了必要的依赖库,并设置了适当的工作环境。如果采用的是预训练模型,则应下载对应的权重文件以便后续加载。对于自定义的数据集,建议将其划分为训练集、验证集以及测试集三个部分,并放置于指定路径下:
```
ClssifyDataSets
├── train
│ ├── 类别1
│ └── 类别2
├── val
│ ├── 类别1
│ └── 类别2
└── test
├── 类别1
└── 类别2
```
#### 修改配置文件
针对YOLOv11的配置文件(通常是`.yaml`格式),需要做如下修改以支持多类别分类任务:
```yaml
nc: 2 # 设置为所需的总类别数
names: ['cat', 'dog'] # 定义各个类别的名称列表
```
#### 编写Python脚本
编写一段简单的Python代码用于加载模型并对单张或多张图片实施推理操作。这里提供了一个基础框架作为参考:
```python
import torch
from pathlib import Path
from PIL import Image
import torchvision.transforms as transforms
def load_model(weights_path='best.pt'):
model = torch.hub.load('ultralytics/yolov5', 'custom', path=weights_path, force_reload=True)
return model.eval()
def predict_image(image_path, model):
img = Image.open(Path(image_path))
transform = transforms.Compose([
transforms.Resize((640, 640)),
transforms.ToTensor()
])
input_tensor = transform(img).unsqueeze(0)
with torch.no_grad():
outputs = model(input_tensor)
_, predicted_idx = torch.max(outputs.data, 1)
return int(predicted_idx), float(torch.softmax(outputs, dim=1)[0][predicted_idx])
if __name__ == '__main__':
model = load_model() # 加载本地保存的最佳模型参数
image_paths = ["path/to/cat.jpg", "path/to/dog.png"] # 替换成实际待测样本的位置
results = []
for p in image_paths:
label_id, confidence_score = predict_image(p, model=model)
print(f'Predicting {p}: Label={label_id}, Confidence Score={confidence_score:.4f}')
results.append({'image': str(p), 'prediction': label_id})
```
上述代码片段展示了如何读取一张图片并通过调用已训练好的YOLOv11模型来进行预测。注意这里的输入尺寸被固定成了\(640\times640\)像素大小;此外还应用了softmax函数计算每种类别属于当前实例的概率值[^3]。
阅读全文