YOLOv8训练时根据results.cvs画出最终结果图

博客涉及YOLO和Python在人工智能领域的应用,但具体内容缺失。YOLO是目标检测算法,Python是常用编程语言,二者结合可推动人工智能发展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import csv
import matplotlib.pyplot as plt

# 读取结果文件
results_file = r"F:\yolov8\ultralytics-main\runs\train\exp\results.csv"
data = {
    'box': [],
    'cls': [],
    'dfl': [],
    'p': [],
    'r': [],
    'val_box': [],
    'val_cls': [],
    'val_dfl': [],
    'map@0.5': [],
    'map@0.5:0.95': []
}

with open(results_file, 'r') as f:
    reader = csv.reader(f)
    next(reader)  # 跳过文件头部分
    for line in reader:
        data['box'].append(float(line[1]))
        data['cls'].append(float(line[2]))
        data['dfl'].append(float(line[3]))
        data['p'].append(float(line[4]))
        data['r'].append(float(line[5]))
        data['val_box'].append(float(line[8]))
        data['val_cls'].append(float(line[9]))
        data['val_dfl'].append(float(line[10]))
        data['map@0.5'].append(float(line[6]))
        data['map@0.5:0.95'].append(float(line[7]))

# 绘制图形
fig, axs = plt.subplots(2, 5, figsize=(20, 10))

# 训练损失
color = 'lightblue'  # 设置点和线的颜色
axs[0, 0].plot(data['box'], linewidth=2, color=color)
axs[0, 0].scatter(range(len(data['box'])), data['box'], s=30, linewidths=0, color=color, label='box_Loss')
axs[0, 0].set_xlabel('Epoch')
axs[0, 0].set_ylabel('box_Loss')
axs[0, 0].legend()

axs[0, 1].plot(data['cls'], linewidth=2, color=color)
axs[0, 1].scatter(range(len(data['cls'])), data['cls'], s=30, linewidths=0, color=color, label='cls_Loss')
axs[0, 1].set_xlabel('Epoch')
axs[0, 1].set_ylabel('cls_Loss')
axs[0, 1].legend()

axs[0, 2].plot(data['dfl'], linewidth=2, color=color)
axs[0, 2].scatter(range(len(data['dfl'])), data['dfl'], s=30, linewidths=0, color=color, label='dfl_Loss')
axs[0, 2].set_xlabel('Epoch')
axs[0, 2].set_ylabel('dfl_Loss')
axs[0, 2].legend()

axs[0, 3].plot(data['p'], linewidth=2, color=color)
axs[0, 3].scatter(range(len(data['p'])), data['p'], s=30, linewidths=0, color=color, label='Precision')
axs[0, 3].set_xlabel('Epoch')
axs[0, 3].set_ylabel('Precision')
axs[0, 3].legend()

axs[0, 4].plot(data['r'], linewidth=2, color=color)
axs[0, 4].scatter(range(len(data['r'])), data['r'], s=30, linewidths=0, color=color, label='Recall')
axs[0, 4].set_xlabel('Epoch')
axs[0, 4].set_ylabel('Recall')
axs[0, 4].legend()


# 验证损失
axs[1, 0].plot(data['val_box'], linewidth=2, color=color)
axs[1, 0].scatter(range(len(data['val_box'])), data['val_box'], s=30, linewidths=0, color=color, label='val_box')
axs[1, 0].set_xlabel('Epoch')
axs[1, 0].set_ylabel('val_box')
axs[1, 0].legend()

axs[1, 1].plot(data['val_cls'], linewidth=2, color=color)
axs[1, 1].scatter(range(len(data['val_cls'])), data['val_cls'], s=30, linewidths=0, color=color, label='val_cls')
axs[1, 1].set_xlabel('Epoch')
axs[1, 1].set_ylabel('val_cls')
axs[1, 1].legend()

axs[1, 2].plot(data['val_dfl'], linewidth=2, color=color)
axs[1, 2].scatter(range(len(data['val_dfl'])), data['val_dfl'], s=30, linewidths=0, color=color, label='val_dfl')
axs[1, 2].set_xlabel('Epoch')
axs[1, 2].set_ylabel('val_dfl')
axs[1, 2].legend()

axs[1, 3].plot(data['map@0.5'], linewidth=2, color=color)
axs[1, 3].scatter(range(len(data['map@0.5'])), data['map@0.5'], s=30, linewidths=0, color=color, label='map@0.5')
axs[1, 3].set_xlabel('Epoch')
axs[1, 3].set_ylabel('map@0.5')
axs[1, 3].legend()

axs[1, 4].plot(data['map@0.5:0.95'], linewidth=2, color=color)
axs[1, 4].scatter(range(len(data['map@0.5:0.95'])), data['map@0.5:0.95'], s=30, linewidths=0, color=color, label='map@0.5:0.95')
axs[1, 4].set_xlabel('Epoch')
axs[1, 4].set_ylabel('map@0.5:0.95')
axs[1, 4].legend()



# 删除空白的子图
# fig.delaxes(axs[0, 4])
# fig.delaxes(axs[1, 4])

fig.tight_layout()

plt.show()

### 如何在YOLOv8检测结果上绘并可视化预测框 为了实现YOLOv8检测结果的可视化,在完成对象检测之后,可以采用Python中的`matplotlib`库来绘制像以及相应的边界框。下面是一个简单的例子,该过程涉及加载预训练模型、执行推理操作,并最终展示带有标注框的结果片。 ```python from ultralytics import YOLO import matplotlib.pyplot as plt import cv2 import numpy as np # 加载预训练好的YOLOv8n模型 model = YOLO('yolov8n.pt') # 对单张片进行推断 results = model.predict(source='path_to_image', save=False, show_labels=True) for r in results: im_array = r.plot() # 绘制预测后的像 im = cv2.cvtColor(im_array, cv2.COLOR_BGR2RGB) plt.figure(figsize=(10, 10)) plt.imshow(im) plt.axis('off') # 关闭坐标轴显示 plt.show() ``` 上述代码片段展示了如何使用官方API函数`.plot()`快速获得含有边框标记的输像[^1]。此方法适用于大多数情况下的简单应用需求;对于更复杂的定制化要求,则可能需要手动调整布上的元素位置与样式。 当涉及到更加精细控制的情况,比如改变颜色方案或是增加额外的信息层(如类别名称),则可以通过访问`r.boxes.data`属性获取到具体的边界框数据,并借助循环结构逐一遍历这些信息来进行个性化设置: ```python def draw_custom_bounding_boxes(image_path, result): img = cv2.imread(image_path) h, w = img.shape[:2] for box in result.boxes.data.tolist(): x1, y1, x2, y2, score, cls_id = map(int, box) color = (np.random.randint(0, 255), np.random.randint(0, 255), np.random.randint(0, 255)) txt_color = (255, 255, 255) if sum(color) < 465 else (0, 0, 0) label = f'{result.names[int(cls_id)]} {score:.2f}' (label_width, label_height), baseline = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.7, 2) cv2.rectangle(img, (x1, y1), (x2, y2), color=color, thickness=2) cv2.rectangle(img, (x1, max(y1-label_height-baseline-10, 0)), (min(x1+label_width+10, w), y1), color, -1) cv2.putText(img, label, (x1+5,max(y1-5,0)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, txt_color, thickness=2) return img custom_img = draw_custom_bounding_boxes('path_to_image', results[0]) cv2.imshow("Custom Bounding Boxes", custom_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段脚本允许用户指定不同的参数来自定义每个矩形的颜色及其内部标签文字的位置和外观特性[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值