如何将YOLOV4 Darknet训练日志接入Tensorboard实现指标可视化?
AlexeyAB版Darknet训练YOLOv4对接TensorBoard实操方法
1. 基础环境配置
在你现有Colab笔记本的Darknet编译完成后、启动训练前,新开代码单元运行以下命令:
- 安装TensorBoard依赖
!pip install tensorboard
- 加载Colab内置的TensorBoard扩展
%load_ext tensorboard - 创建TensorBoard日志专属存储目录
!mkdir -p ./tb_logs
2. 修改训练启动命令
原训练命令需要调整输出规则,把所有终端运行日志同步写入本地文件,必须加-map参数才会在训练过程中周期输出mAP指标,命令格式如下:./darknet detector train 你的obj.data路径 你的yolov4-custom.cfg路径 预训练权重路径 -map 2>&1 | tee train.log
运行该命令启动训练后,确认当前目录下已生成train.log文件且文件大小随训练持续增长。
3. 启动实时日志解析脚本
新开一个Colab代码单元,运行以下实时解析脚本,脚本会自动扫描训练日志的新增内容,提取Loss、学习率、mAP等核心指标,转换成TensorBoard可读的日志格式:
import time import re from torch.utils.tensorboard import SummaryWriter # 初始化日志写入器 writer = SummaryWriter(log_dir='./tb_logs') log_path = './train.log' last_pos = 0 current_step = 0 # 正则规则匹配训练日志对应字段 loss_pattern = re.compile(r'(\d+):\s+(\d+\.\d+)\s+avg,\s+(\d+\.\d+) rate,') map_pattern = re.compile(r'mAP@0.5\s*=\s*(\d+\.\d+)') while True: try: with open(log_path, 'r', encoding='utf-8', errors='ignore') as f: f.seek(last_pos) new_lines = f.readlines() last_pos = f.tell() for line in new_lines: # 提取迭代步、平均训练Loss、当前学习率 loss_match = loss_pattern.search(line) if loss_match: current_step = int(loss_match.group(1)) avg_loss = float(loss_match.group(2)) lr = float(loss_match.group(3)) writer.add_scalar('Train/AvgLoss', avg_loss, current_step) writer.add_scalar('Train/LearningRate', lr, current_step) # 提取验证集mAP@0.5指标 map_match = map_pattern.search(line) if map_match: map_val = float(map_match.group(1)) writer.add_scalar('Val/mAP@0.5', map_val, current_step) writer.flush() except FileNotFoundError: print("未检测到训练日志,等待训练启动...") time.sleep(10) # 每10秒扫描一次日志增量
脚本启动后会持续驻留运行,不需要额外手动操作。
4. 启动TensorBoard面板
再新开一个Colab代码单元,运行以下命令启动TensorBoard:%tensorboard --logdir ./tb_logs
命令运行后Colab会直接内嵌展示TensorBoard面板,训练过程中的Loss、学习率、mAP曲线会随训练推进实时更新。
补充说明
- 如果需要展示IOU、召回率、分类精确率等其他指标,只需要在解析脚本里新增对应正则匹配规则,从
train.log中提取对应数值后,调用writer.add_scalar()方法写入即可 - 训练中断重启前,记得删除旧的
train.log文件和tb_logs目录下的历史日志,避免不同训练轮次的指标曲线错位 - 不要在训练命令里加
-dont_show以外的日志屏蔽参数,否则会导致正则规则匹配不到对应指标字段
内容的提问来源于stack exchange,提问作者Rawan Al Maawali
相关产品推荐
相关产品推荐

