news 2026/6/2 12:28:23

如何自定义训练数据集?cv_resnet18_ocr-detection格式要求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何自定义训练数据集?cv_resnet18_ocr-detection格式要求

如何自定义训练数据集?cv_resnet18_ocr-detection格式要求

OCR文字检测模型的实用价值,很大程度上取决于它能否适应你的具体业务场景——而标准预训练模型在复杂版式、特殊字体、低质量扫描件或行业专用符号面前,往往力不从心。这时候,“训练微调”就不是可选项,而是必经之路。本文不讲抽象理论,不堆砌公式,只聚焦一个最实际的问题:你手头有一批自己的图片和标注,该怎么组织它们,才能让 cv_resnet18_ocr-detection 这个镜像真正“学会”识别你的文字?从目录结构、文件命名、坐标格式到常见踩坑点,全部用大白话讲清楚。

1. 为什么必须严格遵循 ICDAR2015 格式?

你可能会想:“我直接把图片和txt扔进一个文件夹不就行了吗?”——不行。这不是开发者“故意设门槛”,而是模型训练流程本身决定的硬性约束。

这个镜像底层使用的是基于DB(Differentiable Binarization)算法的检测框架,它的数据加载器(DataLoader)被写死为只认一种输入模式:ICDAR2015 格式。这就像一台精密仪器,只接受特定规格的螺丝刀。你给它一把扳手,它不是“转得慢”,而是根本无法启动。

ICDAR2015 是国际公认的文本检测基准数据集,它的格式已成为行业事实标准。采用此格式,意味着:

  • 模型能准确解析每张图对应哪个标注文件;
  • 训练脚本能自动区分训练集与测试集;
  • 坐标系统与模型内部的特征图尺度对齐,避免因尺寸错位导致的训练崩溃。

所以,格式不是“建议”,而是“协议”。跳过这一步,后面所有操作都是空中楼阁。

2. 数据集目录结构:四层嵌套,缺一不可

镜像文档里给出的目录树是权威指南,但光看树形容易忽略关键细节。我们把它拆解成“人话版”操作清单:

custom_data/ ← 你起的名字,但路径里不能有中文、空格、特殊符号! ├── train_list.txt ← 必须叫这个名字,不能是train.txt或list_train.txt ├── train_images/ ← 必须叫这个名字,小写,带下划线 │ ├── 1.jpg ← 图片名可以是数字、英文、下划线,但不能有中文、空格、括号 │ └── 2.png ← 支持jpg/png/bmp,但建议统一用jpg ├── train_gts/ ← 必须叫这个名字,gts是ground truth缩写 │ ├── 1.txt ← 文件名必须和图片名完全一致(不含后缀) │ └── 2.txt ← 内容是纯文本坐标,不是json,不是xml ├── test_list.txt ← 同样必须叫这个名字 ├── test_images/ ← 同样必须叫这个名字 │ └── 3.jpg ← 测试图片,数量建议不少于训练图的10% └── test_gts/ ← 同样必须叫这个名字 └── 3.txt ← 对应的测试标注

2.1 关键细节说明

  • 路径安全第一:整个custom_data目录的绝对路径,例如/root/custom_data不能包含任何中文、空格、&#$等字符。Linux系统对路径非常敏感,一个空格就能让训练脚本报“File not found”。
  • 文件名一致性train_images/1.jpgtrain_gts/1.txt1必须完全相同。大小写也要一致(IMG1.jpgimg1.txt是两个不同文件)。
  • 列表文件是“索引”train_list.txt不是存图片,而是存“去哪里找图片和标注”的地址。它的内容是两列,用空格分隔:
    train_images/1.jpg train_gts/1.txt train_images/2.jpg train_gts/2.txt
    注意:路径是相对于custom_data/目录的,不是绝对路径;没有引号;每一行结尾不能有多余空格。

3. 标注文件(.txt):四点坐标,一行一框

这是最容易出错的一环。很多用户以为“只要把文字框出来就行”,结果训练时直接报错退出。核心规则就一条:每个文本框,必须且只能用一行,写满8个数字加一个文本内容。

3.1 正确格式详解

以一张图里有两个文字框为例,1.txt文件内容应为:

10,20,100,20,100,60,10,60,发票抬头 150,80,300,80,300,120,150,120,金额:¥12,800.00

我们来逐段拆解这一行:

  • 10,20:第一个点的 x, y 坐标(左上角)
  • 100,20:第二个点的 x, y 坐标(右上角)
  • 100,60:第三个点的 x, y 坐标(右下角)
  • 10,60:第四个点的 x, y 坐标(左下角)
  • 发票抬头:该框内识别到的文字内容(可为空,但逗号不能少)

提示:这四个点必须按顺时针顺序排列,从左上角开始。如果顺序乱了(比如按逆时针),模型会把框“拧”成一个奇怪的形状,训练效果极差。

3.2 常见错误与修正

错误示例问题分析正确写法
10 20 100 20 100 60 10 60 发票抬头用空格分隔,不是逗号10,20,100,20,100,60,10,60,发票抬头
10,20,100,20,100,60,10,60,"发票抬头"文本加了英文双引号10,20,100,20,100,60,10,60,发票抬头
10,20,100,20,100,60,10,60,文本内容为空,但末尾多了一个逗号10,20,100,20,100,60,10,60,(正确,空内容就留空)
10,20,100,20,100,60,发票抬头只写了6个数字,缺2个10,20,100,20,100,60,10,60,发票抬头

3.3 特殊情况处理

  • 无文字内容的框:比如只检测logo区域、印章轮廓,不需要识别文字。此时,最后一个字段留空即可:50,100,200,100,200,150,50,150,
  • 模糊/不确定的框:如果某个区域你拿不准是不是文字,宁可不标。乱标噪声数据比不标危害更大。
  • 极小文字框:坐标值不能为负数,也不能超过图片宽高。如果框的宽度或高度小于5像素,建议合并到邻近框,或舍弃。

4. 列表文件(.txt):路径是相对的,不是绝对的

train_list.txt的作用,是告诉训练程序:“请去train_images/目录下找1.jpg,然后去train_gts/目录下找1.txt”。

因此,里面的路径必须是相对于custom_data/目录的相对路径

4.1 正确 vs 错误对比

假设你的完整路径是/root/custom_data/,那么:

正确(相对路径):

train_images/1.jpg train_gts/1.txt train_images/2.jpg train_gts/2.txt

❌ 错误(绝对路径,会报错):

/root/custom_data/train_images/1.jpg /root/custom_data/train_gts/1.txt

❌ 错误(路径名写错):

images/1.jpg gts/1.txt # 缺少了 "train_" 前缀

4.2 生成列表文件的快捷方法

手动写几百行太痛苦。推荐用一段极简Python脚本自动生成(保存为gen_list.py,放在custom_data/目录下运行):

import os # 生成 train_list.txt with open("train_list.txt", "w") as f: for img_name in sorted(os.listdir("train_images")): if img_name.lower().endswith((".jpg", ".png", ".bmp")): base_name = os.path.splitext(img_name)[0] f.write(f"train_images/{img_name} train_gts/{base_name}.txt\n") # 生成 test_list.txt(同理) with open("test_list.txt", "w") as f: for img_name in sorted(os.listdir("test_images")): if img_name.lower().endswith((".jpg", ".png", ".bmp")): base_name = os.path.splitext(img_name)[0] f.write(f"test_images/{img_name} test_gts/{base_name}.txt\n")

运行后,train_list.txttest_list.txt就自动生成好了,零出错。

5. 训练前的最后检查清单

在WebUI里点击“开始训练”之前,请务必对照以下清单逐项确认。90%的训练失败都源于这里:

  • [ ]路径无误:你在WebUI中输入的“训练数据目录”是/root/custom_data,而不是/root/custom_data/(末尾斜杠有时会引发问题,建议不加)。
  • [ ]文件存在train_list.txttest_list.txt确实存在于custom_data/目录下。
  • [ ]图片可读:用ls -l custom_data/train_images/看下图片文件大小是否 > 0KB,避免空文件。
  • [ ]标注匹配:随机打开一个train_gts/1.txt,再打开对应的train_images/1.jpg,用画图软件粗略比对坐标是否大致框住了文字。
  • [ ]编码统一:所有.txt文件必须是UTF-8 编码(无BOM)。Windows记事本默认是ANSI,极易出错。请用 VS Code、Notepad++ 或 Sublime Text 打开并另存为 UTF-8。

警告:如果train_gts/1.txt里有中文,但文件编码是GBK,训练时会直接报UnicodeDecodeError,进程退出。这是新手最高频的报错原因。

6. WebUI训练参数设置:不是越大越好

镜像提供了三个可调参数,但它们之间有强关联,盲目调高可能适得其反:

参数推荐值为什么这么选风险提示
Batch Size4 或 8默认8适合GTX 1060级别显卡。如果你的GPU显存小(<4GB),必须降到4甚至2,否则训练启动就OOM(内存溢出)设为16,显存不够,训练直接崩溃
训练轮数(Epoch)5–10这是一个微调(Fine-tune)任务,不是从零训练。原模型已在大量数据上预训练,5轮足够让权重适应你的新数据设为50,模型会过拟合你的小数据集,泛化能力暴跌
学习率0.001–0.0070.007是默认值,适合大多数场景。如果你的数据量很少(<100张),建议降到0.001,让模型更“温柔”地学习设为0.1,权重更新幅度过大,loss曲线剧烈震荡,最终不收敛

简单口诀:“小数据,小学习率;小显存,小Batch;微调任务,少Epoch”。

7. 训练完成后的验证:别急着部署

模型训练完,workdirs/下会生成一堆文件。最关键的验证步骤,不是看log里loss降了多少,而是立刻用单图检测功能,跑一张你用来训练的图

  • 如果检测结果和你标注的框基本重合,文字也识别出来了 → 成功。
  • 如果一个框都检测不到 → 回头检查标注格式、路径、编码。
  • 如果框歪了、漏了、多了 → 检查坐标顺序、列表文件是否漏行、图片分辨率是否远超训练尺寸(如训练用800x600,你传了4000x3000的图)。

记住:训练只是第一步,验证才是闭环的最后一环。没有验证的训练,等于没做。

8. 总结:自定义训练的本质,是建立“信任契约”

你提供给模型的数据,不是冷冰冰的文件,而是一份“信任契约”:

  • 你承诺:我的图片清晰、标注精准、格式规范;
  • 模型承诺:它会认真“看懂”这些例子,并把学到的规律,迁移到你未来上传的每一张新图上。

这份契约的基石,就是 ICDAR2015 格式。它看似繁琐,实则是为了确保双方“说同一种语言”。当你严格按照本文的目录、文件、坐标、编码要求准备好数据,剩下的,就交给那个紫色界面里的“开始训练”按钮。它背后,是 ResNet18 的稳健特征提取,是 DB 算法的可微分二值化,更是科哥为你封装好的、开箱即用的工程化诚意。

现在,你的数据集,准备好了吗?

--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 2:50:33

SiameseUIE效果展示:同一新闻稿生成NER实体列表+RE关系图谱+EE事件链

SiameseUIE效果展示&#xff1a;同一新闻稿生成NER实体列表RE关系图谱EE事件链 1. 为什么说“一次输入&#xff0c;三重收获”&#xff1f; 你有没有遇到过这样的场景&#xff1a;手头有一篇刚收到的行业新闻稿&#xff0c;需要快速梳理出里面的关键人物、公司、地点&#xf…

作者头像 李华
网站建设 2026/5/31 0:37:21

C语言对接nanopb的内存管理最佳实践

以下是对您提供的博文进行 深度润色与重构后的技术文章 。我以一位深耕嵌入式系统多年、亲手在STM32/RISC-V裸机及FreeRTOS上落地过数十个nanopb项目的工程师视角,重写了全文: ✅ 彻底去除AI腔调与模板化结构 (如“引言/概述/总结”等机械分节) ✅ 语言更贴近真实开…

作者头像 李华
网站建设 2026/5/29 4:04:53

快速掌握YOLOv9:官方镜像助你高效学习目标检测

快速掌握YOLOv9&#xff1a;官方镜像助你高效学习目标检测 你是否曾为配置YOLO环境耗费一整天&#xff0c;却卡在CUDA版本不兼容、PyTorch编译失败或依赖冲突上&#xff1f;是否在训练时反复遭遇CUDA out of memory却不知从何排查&#xff1f;又是否想快速验证一个新想法&…

作者头像 李华
网站建设 2026/5/30 17:08:32

解析minidump中的蓝屏线索:实战调试示例

以下是对您提供的博文《解析minidump中的蓝屏线索:实战调试示例》的 深度润色与专业重构版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI腔调与模板化表达(如“引言”“总结”“首先/其次”等机械结构) ✅ 所有内容有机融合为一条逻辑严密、层层递进的技术叙事流 …

作者头像 李华
网站建设 2026/5/29 4:17:56

5分钟部署Z-Image-Turbo,科哥WebUI让AI绘画快速上手

5分钟部署Z-Image-Turbo&#xff0c;科哥WebUI让AI绘画快速上手 1. 为什么这款图像生成工具值得你花5分钟试试&#xff1f; 你有没有过这样的经历&#xff1a;写完一篇干货满满的知乎回答&#xff0c;却卡在配图环节——找图耗时、版权存疑、风格不搭&#xff0c;最后只能用一…

作者头像 李华