yolov7跑出结果之后怎么整理
时间: 2025-01-04 11:28:10 浏览: 10
### 处理和整理 YOLOv7 检测输出的结果
YOLOv7 的检测结果通常会以特定格式存储,这些数据可以进一步处理以便于后续分析或应用。下面介绍一种常见的方式来进行结果的整理。
#### 结果读取与解析
假设检测完成后,结果被保存到了 `runs\detect\exp` 文件夹下(具体路径可能因配置而异),其中包含了图像文件以及对应的标签文件 `.txt`。每个标签文件对应一张图片,并记录了该图中所有目标的信息。每行代表一个对象,字段依次为类别编号、中心坐标 (x, y)、宽度 w 和高度 h,均采用相对比例表示[^1]。
对于 Python 用户来说,可以通过如下方式加载并查看单个预测结果:
```python
import os
def load_yolo_results(result_dir='runs/detect/exp'):
results = []
# 遍历目录下的 .txt 文件
for filename in os.listdir(result_dir):
if not filename.endswith('.txt'):
continue
filepath = os.path.join(result_dir, filename)
with open(filepath, 'r') as f:
lines = f.readlines()
detections = [
{
"class": int(line.split()[0]),
"bbox": list(map(float, line.split()[1:])),
}
for line in lines
]
results.append({
"image_name": filename.replace(".txt", ""),
"detections": detections,
})
return results
```
此函数遍历指定文件夹内的标注文件,提取每一项检测到的对象信息,包括所属类别的索引及其边界框位置参数,最终返回结构化的列表形式的数据集。
#### 数据转换与可视化
为了更直观地理解检测效果,还可以利用 Matplotlib 或 OpenCV 库绘制带有标记边界的原图副本。这不仅有助于验证模型性能,也为报告撰写提供了素材支持。
```python
from PIL import ImageDraw, Image
import matplotlib.pyplot as plt
def visualize_detection(image_path, detection_data):
img = Image.open(image_path).convert('RGB')
draw = ImageDraw.Draw(img)
for det in detection_data['detections']:
bbox = det["bbox"]
label = str(det["class"])
width, height = img.size
# 将归一化后的坐标转回实际像素值
x_center, y_center, box_width, box_height = (
float(bbox[0]) * width,
float(bbox[1]) * height,
float(bbox[2]) * width,
float(bbox[3]) * height
)
top_left_x = max(0, round(x_center - box_width / 2))
top_left_y = max(0, round(y_center - box_height / 2))
bottom_right_x = min(width, round(x_center + box_width / 2))
bottom_right_y = min(height, round(y_center + box_height / 2))
draw.rectangle(
[(top_left_x, top_left_y), (bottom_right_x, bottom_right_y)],
outline="red",
width=2
)
text_position = (top_left_x, top_left_y - 10)
font_size = 15
draw.text(text_position, label, fill=(255, 0, 0), size=font_size)
plt.imshow(img)
plt.axis('off')
plt.show()
# 使用上述定义的方法来显示某张图片上的物体识别情况
visualize_detection(f'./{results[0]["image_name"]}.jpg', results[0])
```
这段代码实现了对给定图片的应用边界框绘图功能,使得能够清晰看到各个实例的具体定位状况。同时,在矩形上方附加文字说明所指代的目标种类名称。
#### 统计汇总
除了单独审查个别案例外,统计学视角同样重要。比如计算各类别出现次数分布直方图;评估平均置信度得分;跟踪 F1-Score 变动趋势等都是常用手段之一。特别是后者——F1-Score 被认为是衡量分类器效能的关键指标之一,在多轮迭代优化期间持续关注这一数值变化可以帮助我们判断调参方向是否正确有效[^2]。
阅读全文