前言
目的:读取和可视化events.out.tfevents文件
问题:yolo官方程序默认出的图样式和数据不够详细,如何提取出相应数据,方便自己查看详细和处理数据
方法:通过tensorboardX和tensorboard库读取数据,再通过matplotlib进行可视化
例如yolo结果数据都是固定样式图,不能方便查看其中每个点的具体数值。
方法
读取数据
为了读取 .tfevents
文件,我们可以使用tensorboard
和 tensorboardX
库的 event_accumulator
模块。展示如何使用 event_accumulator
读取 .tfevents
文件的内容:
如果下载失败可以替换清华园
-
安装
tensorboardX
:pip install tensorboardX pip install tensorboard
-
使用
event_accumulator
读取.tfevents
文件:from tensorboardX import SummaryWriter from tensorboard.backend.event_processing import event_accumulator # 指定 .tfevents 文件的路径 log_dir = "path/to/your/tfevents/file" # 加载事件文件 ea = event_accumulator.EventAccumulator(log_dir) ea.Reload() # 获取所有标量的标签 tags = ea.Tags()['scalars'] # 打印所有标量的标签及其对应的值 for tag in tags: events = ea.Scalars(tag) for event in events: print(f"Step: {event.step}, Value: {event.value}, Timestamp: {event.wall_time}")
输出的结果
里面展示了每条日志里面的数据,通过类似event.step调用属性
通过这种方式,您可以直接从 .tfevents
文件中读取和打印标量值,而无需启动 TensorBoard。
可视化数据
我们可以将读取事件文件的数据与Matplotlib的可视化相结合,生成一个折线图展示标量值随时间或步骤的变化。下面是一个完整的示例代码,将读取事件文件的数据并绘制成折线图。
注意:在使用此代码时,请确保已经安装了matplotlib
库。如果未安装,可以使用以下命令进行安装:
pip install matplotlib
import matplotlib.pyplot as plt
from tensorboard.backend.event_processing import event_accumulator
# 指定 .tfevents 文件的路径
log_dir = r"D:\lab\events.out.tfevents.1719811674.autodl-container-b23f4d8ce8-f821a354"
# 加载事件文件
ea = event_accumulator.EventAccumulator(log_dir)
ea.Reload()
# 获取所有标量的标签
tags = ea.Tags()['scalars']
# 绘制折线图
plt.figure(figsize=(10, 6))
# 遍历所有标量标签
for tag in tags:
events = ea.Scalars(tag)
steps = [event.step for event in events]
values = [event.value for event in events]
# 绘制每个标量标签的折线图
plt.plot(steps, values, marker='o', linestyle='-', label=tag)
# 添加标题和标签
plt.title('Scalar Values Over Steps')
plt.xlabel('Steps')
plt.ylabel('Values')
plt.legend()
# 显示图表
plt.grid(True)
plt.show()
-
导入库:
matplotlib.pyplot
:用于绘制图表。event_accumulator
:用于读取TensorBoard的事件文件。
-
指定事件文件路径:
- 将路径
log_dir
替换为你的事件文件的实际路径。
- 将路径
-
加载事件文件:
- 使用
EventAccumulator
来加载指定路径的事件文件,并调用Reload
方法来读取文件内容。
- 使用
-
获取标量标签:
- 使用
Tags()
方法获取所有的标量标签。
- 使用
-
绘制折线图:
- 创建一个新的图形窗口,并设置窗口大小。
- 遍历所有标量标签,对于每个标签,获取对应的所有事件(时间、步骤和值),并提取步骤和值。
- 使用
plt.plot
绘制每个标量标签的折线图。 - 最后,设置图表的标题、标签和图例,并显示图表。
总结
本文主要介绍读取和可视化events.out.tfevents文件,方便自定义的处理数据,例如可视化和分析详细的数据,不局限于原来yolo出现的图