news 2026/2/17 1:58:29

训练日志报错怎么查?cv_resnet18_ocr-detection排错步骤详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
训练日志报错怎么查?cv_resnet18_ocr-detection排错步骤详解

训练日志报错怎么查?cv_resnet18_ocr-detection排错步骤详解

1. 为什么训练日志报错让人头疼?

你刚把自定义数据集准备好,满怀期待点下“开始训练”,结果界面卡在“等待开始训练...”,几秒后弹出一行红色提示:“训练失败,请查看日志”。再打开workdirs/目录,里面只有空文件夹和一个命名像train_20260105143022.log的日志文件——打开一看,满屏英文堆叠、路径报错、维度不匹配、CUDA out of memory……小白根本不知道从哪句开始看。

这不是你的问题。cv_resnet18_ocr-detection 是一套轻量但严谨的 OCR 文字检测模型(基于 ResNet18 主干 + DBNet 检测头),它对数据格式、环境依赖、硬件资源都比较“较真”。报错不是模型坏了,而是它在用最直白的方式告诉你:“这里不对劲,得改”。

本文不讲理论推导,不列公式,不谈超参调优。只聚焦一件事:当你看到训练日志里那一长串红色文字时,该怎么一步步定位、读懂、解决它。全程用大白话+真实错误截图+可复制命令,带你把“看不懂的日志”变成“能动手的线索”。

提示:本文所有操作均基于 WebUI 界面中“训练微调”模块的实际行为,所有路径、日志位置、错误模式均来自真实部署环境(Ubuntu 22.04 + PyTorch 2.0 + CUDA 11.8)。

2. 排错前必须确认的三件事

别急着翻日志。90% 的训练失败,其实卡在启动前。先花 2 分钟做这三步检查,能省下你 1 小时反复重试。

2.1 检查 WebUI 是否以正确权限运行

WebUI 启动脚本start_app.sh默认使用python命令,但它背后调用的是训练脚本train.py。如果服务是以root用户启动,而你的数据集放在/home/user/custom_data这类非 root 路径下,Python 可能因权限不足读不到标注文件。

快速验证命令:

cd /root/cv_resnet18_ocr-detection ls -l workdirs/ # 应该能看到可写权限(drwxr-xr-x 或类似)

❌ 错误信号:

  • 日志第一行出现PermissionError: [Errno 13] Permission denied
  • OSError: Unable to open file (unable to open file: name = 'xxx', errno = 13)

解决方法:
把数据集移到 root 可读写路径,例如:

mkdir -p /root/custom_data cp -r /home/user/my_ocr_data/* /root/custom_data/

然后在 WebUI 中填写路径:/root/custom_data

2.2 验证数据集结构是否“严丝合缝”

cv_resnet18_ocr-detection 只认一种格式:ICDAR2015 标准结构。少一个文件夹、多一个空格、txt 文件里换行符是 Windows 风格(\r\n),都会导致解析失败——而且错误提示往往藏在日志中段,非常隐蔽。

正确结构必须长这样(注意大小写、斜杠方向、无空格):

/root/custom_data/ ├── train_list.txt ├── train_images/ │ ├── 001.jpg │ └── 002.jpg ├── train_gts/ │ ├── 001.txt │ └── 002.txt ├── test_list.txt ├── test_images/ │ └── 003.jpg └── test_gts/ └── 003.txt

train_list.txt内容必须严格为两列、空格分隔、无表头、无空行:

train_images/001.jpg train_gts/001.txt train_images/002.jpg train_gts/002.txt

001.txt标注内容必须是:8个数字 + 逗号 + 文本,每行一条,文本部分不能含逗号,末尾不能有多余空格或空行:

120,45,210,45,210,78,120,78,发票编号:INV-2026-001 350,120,680,120,680,155,350,155,金额:¥1,280.00

❌ 常见“一眼看不出”的错误:

  • train_list.txt里写了./train_images/001.jpg(带./前缀)→ 报错:FileNotFoundError: train_images/001.jpg
  • 001.txt最后一行是空行 → 报错:IndexError: list index out of range(在解析坐标时崩)
  • 图片名是001.JPG(大写 JPG),但train_list.txt写的是001.jpg→ 报错:No such file or directory

快速自查命令(复制粘贴即可):

# 检查 train_list.txt 行数与图片数是否一致 wc -l /root/custom_data/train_list.txt | awk '{print $1}' ls /root/custom_data/train_images/ | wc -l # 检查前3行标注格式(应为8数字+逗号+文本) head -3 /root/custom_data/train_gts/001.txt | cat -n # 检查是否有隐藏的\r字符(Windows换行) file /root/custom_data/train_list.txt # 输出应为:train_list.txt: ASCII text # 若显示 "CRLF",说明是Windows格式,需转换: sed -i 's/\r$//' /root/custom_data/train_list.txt

2.3 确认显存是否真的够用

ResNet18 虽轻量,但 DBNet 的特征金字塔和后处理对显存依然敏感。Batch Size 设为 8 时,RTX 3090 足够,但 GTX 1060(6GB)就可能爆显存——此时日志不会直接写 “OOM”,而是报CUDA error: out of memory或更迷惑的Segmentation fault (core dumped)

查看当前显存占用:

nvidia-smi --query-gpu=memory.used,memory.total --format=csv # 示例输出:4212 MiB / 6144 MiB

安全建议:

  • GTX 1060 / 1660:Batch Size ≤ 4
  • RTX 2080 / 3060:Batch Size ≤ 8
  • RTX 3090 / 4090:Batch Size ≤ 16

注意:WebUI 界面中“Batch Size”输入框没有校验,输 32 也能点,但必崩。务必手动核对。

3. 日志文件在哪?怎么快速定位关键错误?

训练失败后,WebUI 会在页面底部显示类似训练失败:请查看 workdirs/train_20260105143022.log的提示。这个.log文件就是你的“破案现场”。

3.1 日志路径与命名规则

所有训练日志统一存放在:

/root/cv_resnet18_ocr-detection/workdirs/

文件名格式为:train_YYYYMMDDHHMMSS.log(例如train_20260105143022.log),按时间戳排序,最新的在最后。

快速进入并查看最新日志:

cd /root/cv_resnet18_ocr-detection/workdirs/ ls -t train_*.log | head -1 # 输出:train_20260105143022.log tail -n 50 train_20260105143022.log

tail -n 50是关键:训练崩溃点几乎总在日志末尾 10–30 行内。不要从头看!

3.2 读懂错误日志的“三句话法则”

绝大多数 Python 报错遵循固定结构,抓住三句话就能锁定根源:

  1. 最后一行(红色):错误类型 + 简短描述 → 告诉你“是什么问题”
  2. 倒数第二行(白色):出错代码所在文件和行号 → 告诉你“在哪出的问题”
  3. 倒数第三行(白色):出错前执行的函数调用链 → 告诉你“怎么走到这来的”

示例(真实截取):

Traceback (most recent call last): File "train.py", line 187, in <module> main() File "train.py", line 152, in main train_loader = get_dataloader(cfg, is_train=True) File "/root/cv_resnet18_ocr-detection/data/dataloader.py", line 42, in get_dataloader dataset = ICDAR2015Dataset(cfg, is_train) File "/root/cv_resnet18_ocr-detection/data/dataset.py", line 63, in __init__ self.load_data() File "/root/cv_resnet18_ocr-detection/data/dataset.py", line 98, in load_data with open(gt_path, 'r', encoding='utf-8') as f: FileNotFoundError: [Errno 2] No such file or directory: '/root/custom_data/train_gts/003.txt'

拆解:

  • 最后一行FileNotFoundError: [Errno 2] No such file or directory: 'xxx'→ 文件没找到
  • 倒数第二行line 98, in load_data→ 在dataset.py第 98 行崩了
  • 倒数第三行self.load_data()→ 是__init__函数调用了它

→ 结论:003.txt这个文件不存在,去检查train_list.txt里写的路径是否真实存在。

3.3 高频错误类型速查表

错误关键词(日志中搜索)典型报错片段最可能原因一句话解决
FileNotFoundErrorNo such file or directory: 'xxx.txt'数据集路径写错 / 文件名不匹配 /train_list.txt里路径有误ls命令逐级检查路径是否存在,特别注意大小写和扩展名
ValueErrorcould not convert string to float: 'abc'标注文件某行坐标不是纯数字(如写了中文逗号、空格、字母)head -n 5 xxx.txt查看前5行,确保全是x1,y1,x2,y2,x3,y3,x4,y4,文本格式
IndexErrorlist index out of range标注文件某行字段数不足9个(比如漏了文本,或坐标只有6个)检查xxx.txt每行是否严格为8个数字+1段文本,共9个字段
CUDA out of memoryCUDA error: out of memoryBatch Size 太大 / 图片尺寸太大 / 显存被其他进程占满降低 Batch Size 至 4,或在 WebUI 中减小“输入尺寸”(如设为 640×640)
AssertionErrorassert len(boxes) == len(texts)标注文件中坐标行数 ≠ 文本行数(常见于复制粘贴时多空行)wc -l xxx.txt查看行数,删除所有空行:sed -i '/^$/d' xxx.txt
ModuleNotFoundErrorNo module named 'torch'环境未激活 / 依赖未安装进入项目目录执行source venv/bin/activate && pip install -r requirements.txt

实用技巧:用grep快速过滤关键错误

# 查看日志中所有报错行(含 ERROR / Traceback / Exception) grep -E "(ERROR|Traceback|Exception)" train_20260105143022.log # 只看最后一处崩溃(最可能的根因) grep -A 5 -B 5 "FileNotFoundError" train_20260105143022.log | tail -n 20

4. 从报错到修复:一个完整排错实战

我们模拟一次真实场景:用户上传了自己制作的数据集,训练失败,日志如下(已脱敏):

... File "/root/cv_resnet18_ocr-detection/data/dataset.py", line 102, in load_data coords = [float(x) for x in coord_str.split(',')] ValueError: could not convert string to float: '120'

4.1 第一步:定位错误源头

  • 最后一行:ValueError: could not convert string to float: '120'→ 尝试把字符串'120'转成浮点数失败?这很奇怪,'120'明明是合法数字。
  • 倒数第二行:line 102, in load_data→ 打开dataset.py第 102 行:
    coords = [float(x) for x in coord_str.split(',')]
    这行代码是把coord_str(一个字符串,如"120,45,210,45,210,78,120,78")按逗号切开,再转成浮点数列表。

→ 问题来了:'120'能转 float,但'120 '(带空格)就不行。所以coord_str里很可能混入了不可见空格。

4.2 第二步:验证猜想

train_gts/下随便找一个标注文件,检查是否有空格:

head -1 /root/custom_data/train_gts/001.txt # 输出:120 ,45 ,210 ,45 ,210 ,78 ,120 ,78 ,发票编号:INV-2026-001 # 看到了!每个数字后面都有空格

4.3 第三步:批量修复

手动改几十个文件太慢。用sed一键清除所有空格:

# 进入标注目录 cd /root/custom_data/train_gts/ # 删除所有 .txt 文件中逗号前后的空格(保留文本部分不变) sed -i 's/ *, */,/g' *.txt sed -i 's/^[[:space:]]*//; s/[[:space:]]*$//' *.txt # 验证修复效果 head -1 001.txt # 应输出:120,45,210,45,210,78,120,78,发票编号:INV-2026-001

4.4 第四步:重新训练 & 验证

回到 WebUI,点击“开始训练”。这次日志末尾出现:

[INFO] Epoch 1/5, Loss: 1.245, lr: 0.007000 [INFO] Epoch 2/5, Loss: 0.982, lr: 0.007000 ... [INFO] Training finished. Model saved to workdirs/20260105143022/best.pth

成功!整个过程不到 5 分钟。

5. 预防胜于治疗:三个训练前必做检查清单

避免重复踩坑,每次训练前花 1 分钟过一遍这个清单:

  • 路径检查:在 WebUI 输入的“训练数据目录”是否能cd进去?ls是否能看到train_list.txt
  • 文件检查train_list.txt第一行对应的图片和 txt 文件,用ls确认两者都存在且名字完全一致(包括大小写和扩展名)?
  • 内容检查:随机打开一个train_gts/xxx.txt,用cat -A查看是否含^M(Windows 换行)或^I(tab 字符)?
cat -A /root/custom_data/train_gts/001.txt # 正常应显示:120,45,210,45,210,78,120,78,文本$ # 若出现 ^M,则执行:sed -i 's/\r$//' *.txt

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/29 21:12:27

实测Qwen3-4B-Instruct-2507:中小企业AI应用效果超预期

实测Qwen3-4B-Instruct-2507&#xff1a;中小企业AI应用效果超预期 1. 为什么这次实测值得中小企业认真看 你有没有遇到过这些情况&#xff1f; 客服团队每天重复回答几十种商品咨询&#xff0c;却没人手做知识库更新&#xff1b; 市场部赶在促销前临时要写20条不同平台的文案…

作者头像 李华
网站建设 2026/2/17 1:57:12

近红外光谱数据集探索指南:从基础应用到价值挖掘

近红外光谱数据集探索指南&#xff1a;从基础应用到价值挖掘 【免费下载链接】Open-Nirs-Datasets Open source data set for quantitative and qualitative analysis of near-infrared spectroscopy 项目地址: https://gitcode.com/gh_mirrors/op/Open-Nirs-Datasets 一…

作者头像 李华
网站建设 2026/2/11 3:03:10

Windows右键菜单管理工具:让你的桌面操作更高效

Windows右键菜单管理工具&#xff1a;让你的桌面操作更高效 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否也曾遇到这样的情况&#xff1a;右键点击文件时…

作者头像 李华
网站建设 2026/2/8 0:29:51

避坑指南:通义千问3-14B在RTX4090上的部署常见问题解决

避坑指南&#xff1a;通义千问3-14B在RTX4090上的部署常见问题解决 本文不是“如何安装”&#xff0c;而是你跑起来之后突然卡住、报错、崩掉、慢得像幻灯片时&#xff0c;最需要的那一份急救手册。 RTX 4090 是消费级显卡中少有的能真正“单卡跑满”Qwen3-14B的硬件——24GB显…

作者头像 李华
网站建设 2026/2/15 19:39:26

金融数据接口实战心法:从数据获取到投资决策的蜕变之路

金融数据接口实战心法&#xff1a;从数据获取到投资决策的蜕变之路 【免费下载链接】akshare 项目地址: https://gitcode.com/gh_mirrors/aks/akshare 在金融市场瞬息万变的今天&#xff0c;掌握高效的金融数据接口工具已成为投资者提升决策质量的核心竞争力。无论是初…

作者头像 李华
网站建设 2026/2/3 23:17:48

解锁1Fichier下载限制:1fichier-dl效率工具的突破方案

解锁1Fichier下载限制&#xff1a;1fichier-dl效率工具的突破方案 【免费下载链接】1fichier-dl 1Fichier Download Manager. 项目地址: https://gitcode.com/gh_mirrors/1f/1fichier-dl 1fichier-dl下载管理器是一款专为突破1Fichier平台限制打造的效率工具&#xff0c…

作者头像 李华