yolov8打印IOU
时间: 2024-12-30 09:25:48 浏览: 16
### 如何在 YOLOv8 中打印 IOU
为了计算并打印YOLOv8中的IOU(交并比),可以利用`ultralytics`库提供的工具函数来获取预测结果,并基于这些结果手动计算或调用内置方法得到IOU值。下面展示了一个简单的例子,说明如何加载模型并对测试图片执行推理操作,随后提取边界框信息以计算两个矩形之间的IOU。
#### 导入必要的模块
```python
from ultralytics import YOLO
import cv2
import numpy as np
```
#### 定义计算IOU的方法
```python
def calculate_iou(boxA, boxB):
# 获取坐标(xmin,ymin,xmax,ymax)
xA = max(boxA[0], boxB[0])
yA = max(boxA[1], boxB[1])
xB = min(boxA[2], boxB[2])
yB = min(boxA[3], boxB[3])
interArea = max(0, xB - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)
iou = interArea / float(boxAArea + boxBArea - interArea)
return iou
```
#### 使用预训练好的YOLOv8模型进行推断
```python
model = YOLO("yolov8n.pt") # 加载预训练的小型版本模型[^1]
img_path = "path_to_your_image.jpg"
image = cv2.imread(img_path)
results = model(image)[0].boxes.data.cpu().numpy()
for result in results:
xyxy = result[:4] # 提取边框位置[xmin, ymin, xmax, ymax]
conf = result[4] # 置信度得分
cls = int(result[5]) # 类别索引
print(f"Detected object with confidence {conf:.2f} at location {xyxy}")
# 假设有一个已知的真实标签bbox作为比较对象
gt_bbox = [xmin_gt, ymin_gt, xmax_gt, ymax_gt]
pred_bbox = list(xyxy)
iou_value = calculate_iou(gt_bbox, pred_bbox)
print(f"The IOU between ground truth and prediction is: {iou_value:.2f}\n")
```
上述代码片段展示了如何定义一个辅助函数`calculate_iou()`来进行两组坐标的IOU计算,并将其应用于由YOLOv8产生的检测结果上。需要注意的是,在实际应用场景中,真实标签(`gt_bbox`)应该来自数据集标注文件而不是硬编码。
阅读全文