训练日志在哪看?workdirs目录结构全解析
1. 引言:为什么需要理解 workdirs 目录?
在使用cv_resnet18_ocr-detectionOCR文字检测模型进行训练微调时,用户最常遇到的问题之一就是:“训练日志到底保存在哪里?如何查看训练过程是否正常?”
尤其是在 WebUI 界面中点击“开始训练”后,仅显示“训练完成!”,但没有直观的输出信息。此时,深入理解项目中的workdirs/目录结构就显得尤为重要。
本文将基于科哥构建的 cv_resnet18_ocr-detection 镜像环境,全面解析workdirs/的目录组织方式、关键文件作用以及如何通过日志判断训练状态和性能表现。帮助开发者快速定位问题、优化参数,并实现高效模型微调。
2. workdirs 目录概览与生成机制
2.1 目录位置与作用
workdirs/是该 OCR 模型在执行“训练微调”任务时自动生成的工作空间,位于项目根目录下:
/root/cv_resnet18_ocr-detection/ ├── workdirs/ ← 训练相关输出集中地 │ └── exp_20260105_143022/ │ ├── config.yaml # 训练配置 │ ├── log.txt # 主训练日志 │ ├── checkpoints/ # 权重保存 │ ├── tensorboard/ # 可视化日志(如有) │ └── eval_results/ # 验证集评估结果核心功能:记录每一次训练任务的完整上下文,包括超参配置、训练日志、模型权重、评估指标等,便于复现和调试。
2.2 命名规则与时间戳解析
每次启动训练,系统会以当前时间创建一个独立子目录,命名格式为:
exp_YYYYMMDD_HHMMSS例如:
exp_20260105_143022表示 2026年1月5日 14点30分22秒发起的训练任务
这种设计确保了多轮训练不会覆盖历史数据,支持后续横向对比不同实验的效果。
3. 核心子目录与文件详解
3.1 config.yaml:训练配置快照
这是训练开始前从 WebUI 界面读取并持久化的参数集合,内容如下所示:
train_data_dir: /root/custom_data batch_size: 8 num_epochs: 5 learning_rate: 0.007 input_size: [800, 800] backbone: resnet18 optimizer: SGD scheduler: StepLR用途说明:
- ✅ 查看实际使用的 Batch Size、学习率等关键参数
- ✅ 排查配置错误(如路径拼写、数值越界)
- ✅ 支持实验复现:可直接加载此配置重新运行相同实验
建议做法:每次训练后备份重要config.yaml文件,用于建立实验管理档案。
3.2 log.txt:主训练日志文件
这是诊断训练过程的核心日志,采用标准文本格式逐行输出,典型内容如下:
[INFO] Starting training at 2026-01-05 14:30:22 [CONFIG] Using device: cuda:0 (GPU detected) [DATA] Loading dataset from /root/custom_data [DATA] Train samples: 456 | Test samples: 120 [TRAIN] Epoch 1/5, Iter 0/57, Loss: 1.876, LR: 0.007000 [TRAIN] Epoch 1/5, Iter 10/57, Loss: 1.543, LR: 0.007000 [TRAIN] Epoch 1/5, Iter 20/57, Loss: 1.321, LR: 0.007000 [VAL] Epoch 1 finished. F-score: 0.682, Precision: 0.701, Recall: 0.664 [TRAIN] Epoch 2/5, Iter 0/57, Loss: 1.209, LR: 0.007000 ... [SAVE] Best model saved to checkpoints/best_model.pth (F-score improved) [INFO] Training completed successfully.日志关键字段解读:
| 字段 | 含义 | 关注重点 |
|---|---|---|
[TRAIN] | 训练阶段损失 | 观察 Loss 是否稳定下降 |
[VAL] | 验证阶段指标 | F-score/Precision/Recall 判断泛化能力 |
F-score | 综合准确率指标 | 越高越好,>0.8 为良好 |
[SAVE] | 模型保存提示 | 确认最优模型已存档 |
[ERROR]或[FAIL] | 错误信息 | 必须排查的根本原因 |
实战技巧:实时监控日志流
可通过以下命令动态查看日志更新:
tail -f workdirs/exp_20260105_143022/log.txt结合grep过滤关键信息:
# 查看所有验证结果 grep "\[VAL\]" workdirs/exp_20260105_143022/log.txt # 检查是否有报错 grep -i "error\|fail\|exception" workdirs/exp_20260105_143022/log.txt3.3 checkpoints/:模型权重存储目录
该目录保存训练过程中生成的所有.pth权重文件,典型结构如下:
checkpoints/ ├── best_model.pth # 最佳模型(按 F-score 保存) ├── last_model.pth # 最终轮次模型 ├── epoch_3.pth # 第3轮中间检查点(可选) └── backup_epoch_5.pth # 最终轮次备份文件用途说明:
best_model.pth:推荐用于推理部署的最终模型last_model.pth:可用于继续训练(断点续训)- 中间 checkpoint:支持训练中断恢复或回滚到特定轮次
⚠️ 注意:WebUI “ONNX 导出” 功能默认使用
best_model.pth进行转换,请确保其存在且性能达标。
3.4 eval_results/:验证集详细输出
该目录包含每轮验证后的预测结果与真实标签对比,常见文件有:
eval_results/ ├── predictions.json # 所有预测框与文本 ├── ground_truth.json # 真实标注数据 ├── metrics_per_image/ # 按图统计精度 │ ├── 3.jpg_precision.txt │ └── 3.jpg_recall.txt └── confusion_matrix.png # 类别混淆矩阵(若有多分类)这些文件可用于:
- 分析漏检(Recall 低)或误检(Precision 低)的具体样本
- 定制后处理策略(如阈值调整、NMS 参数优化)
3.5 tensorboard/(可选):可视化训练曲线
如果项目启用了 TensorBoard 支持,则会生成该目录,包含事件日志文件:
tensorboard/ └── events.out.tfevents.123456789可通过以下命令启动可视化服务:
tensorboard --logdir workdirs/exp_20260105_143022/tensorboard --port=6006浏览器访问http://服务器IP:6006即可查看:
- 训练 Loss 曲线
- F-score、Precision、Recall 变化趋势
- 学习率衰减过程
💡 提示:即使 WebUI 无图形展示,也可通过 TensorBoard 获取专业级训练分析能力。
4. 如何通过日志判断训练质量?
4.1 正常训练流程的日志特征
一个健康的训练过程应具备以下特点:
- Loss 持续下降:初期下降快,后期趋于平稳
- F-score 逐步上升:每轮验证后均有提升或保持高位
- 出现
[SAVE] Best model saved提示 - 无异常中断或 CUDA Out of Memory 报错
示例片段:
[VAL] Epoch 1 finished. F-score: 0.682 [VAL] Epoch 2 finished. F-score: 0.745 ← 上升 ✓ [VAL] Epoch 3 finished. F-score: 0.791 ← 上升 ✓ [SAVE] Best model saved to checkpoints/best_model.pth4.2 常见异常日志模式及应对方案
| 异常现象 | 日志表现 | 解决方法 |
|---|---|---|
| 数据加载失败 | [ERROR] File not found: train_images/1.jpg | 检查train_list.txt路径是否正确 |
| 标注格式错误 | [ERROR] Invalid box format in 1.txt | 确保 txt 文件为x1,y1,x2,y2,...,text格式 |
| 内存溢出 | CUDA out of memory | 减小batch_size至 4 或 2 |
| 损失不降 | Loss stuck around 2.0+ for many iterations | 检查学习率是否过高或过低 |
| 全部漏检 | F-score: 0.000 | 检查图像预处理是否破坏文本结构 |
🔍 故障排查优先顺序:日志 → 配置 → 数据路径 → 标注格式 → GPU资源
5. 工程实践建议:高效利用 workdirs
5.1 建立实验编号管理系统
建议手动为重要实验添加符号链接,方便追踪:
ln -s workdirs/exp_20260105_143022 workdirs/exp_v1_baseline ln -s workdirs/exp_20260106_091233 workdirs/exp_v2_augmented这样可以避免记忆复杂时间戳,提升团队协作效率。
5.2 自动归档脚本示例
编写简单脚本定期压缩旧实验,节省磁盘空间:
#!/bin/bash # archive_old_experiments.sh for dir in workdirs/exp_*; do if [ -d "$dir" ]; then exp_name=$(basename $dir) tar -czf "${exp_name}.tar.gz" "$dir" rm -rf "$dir" echo "Archived $exp_name" fi done5.3 结合 ONNX 导出验证效果
训练完成后,建议立即导出 ONNX 模型并在测试集上验证:
python onnx_inference_test.py \ --onnx-model outputs/model_800x800.onnx \ --test-dir /root/custom_data/test_images确认导出模型推理结果与训练日志中的 F-score 一致,防止部署偏差。
6. 总结
workdirs/目录是cv_resnet18_ocr-detection模型训练微调的核心输出区,掌握其结构对于高效开发至关重要。本文系统梳理了该目录的组成与使用方法:
config.yaml:记录训练配置,支持复现实验log.txt:主日志文件,用于监控训练进度与诊断问题checkpoints/:存放最佳与最终模型权重eval_results/:提供细粒度评估数据tensorboard/:可选的可视化分析工具
通过合理解析workdirs/中的信息,开发者不仅能回答“训练日志在哪看”这一基础问题,更能深入理解模型行为、优化训练策略,并构建可重复、可追溯的 AI 开发流程。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。