news 2026/4/16 10:44:59

如何自定义训练数据集?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/4/16 10:37:42

一文说清cp2102 usb to uart bridge controller配置流程

以下是对您提供的博文内容进行 深度润色与工程化重构后的版本 。我以一名资深嵌入式系统工程师兼技术教育博主的身份,彻底重写了全文—— 去除所有AI腔调、模板化结构和空泛术语堆砌,代之以真实开发场景中的思考逻辑、踩坑经验、参数取舍权衡与可落地的实操细节 。 全文…

作者头像 李华
网站建设 2026/4/16 10:37:43

Clawdbot镜像部署Qwen3-32B:开箱即用的Web Chat平台详细步骤

Clawdbot镜像部署Qwen3-32B&#xff1a;开箱即用的Web Chat平台详细步骤 1. 为什么你需要这个部署方案 你是不是也遇到过这些问题&#xff1a;想快速体验Qwen3-32B大模型&#xff0c;但本地显存不够、环境配置复杂、API密钥管理麻烦&#xff1f;或者团队需要一个无需开发就能…

作者头像 李华
网站建设 2026/4/16 10:37:43

从语音到策略——ASR + 大语言模型驱动的辩论对话系统设计实践

目录 前言1 引言&#xff1a;辩论场景对 AI 对话的特殊要求1.1 不是聊天&#xff0c;而是对抗与训练1.2 上下文、立场与规则的重要性 2 语音识别系统设计2.1 腾讯云 ASR 的选型原因2.2 实时转写与语音活动检测2.3 useAsr 的生命周期管理 3 输入融合机制3.1 语音输入与文本输入的…

作者头像 李华
网站建设 2026/4/16 10:37:43

Clawdbot整合Qwen3:32B效果展示:代码解释、调试建议、漏洞识别案例

Clawdbot整合Qwen3:32B效果展示&#xff1a;代码解释、调试建议、漏洞识别案例 1. 效果概览&#xff1a;为什么这个组合值得关注 你有没有试过在本地部署一个32B参数的大模型&#xff0c;还能让它像聊天App一样丝滑响应&#xff1f;Clawdbot Qwen3:32B 就是这样一个组合——…

作者头像 李华
网站建设 2026/4/16 10:37:42

MedGemma 1.5部署教程:国产麒麟V10+寒武纪MLU370异构AI芯片适配实录

MedGemma 1.5部署教程&#xff1a;国产麒麟V10寒武纪MLU370异构AI芯片适配实录 1. 为什么要在国产信创环境跑MedGemma&#xff1f; 你可能已经试过在NVIDIA显卡上跑MedGemma——流畅、响应快、效果稳。但如果你的工作环境是医院信息科、疾控中心或军工医疗单位&#xff0c;大…

作者头像 李华