2026/2/15 7:14:41
网站建设
项目流程
做微网站要多少钱,上海互联网企业名单,网站可以在手机上做吗,邯郸做移动网站报价训练数据怎么准备#xff1f;cv_resnet18_ocr-detection微调教程来了
OCR文字检测不是“开箱即用”就万事大吉的事。你可能已经试过默认模型——在标准测试图上效果不错#xff0c;但一换到自己手里的发票、工单、设备铭牌或扫描文档#xff0c;框就歪了、字就漏了、小字号…训练数据怎么准备cv_resnet18_ocr-detection微调教程来了OCR文字检测不是“开箱即用”就万事大吉的事。你可能已经试过默认模型——在标准测试图上效果不错但一换到自己手里的发票、工单、设备铭牌或扫描文档框就歪了、字就漏了、小字号直接消失。问题不在模型本身而在于它没见过你的数据。今天这篇教程不讲原理推导不堆参数公式只聚焦一个最常卡住新手的实操环节训练数据怎么准备。我们以cv_resnet18_ocr-detection这个由科哥构建的轻量级OCR文字检测镜像为对象手把手带你把一张模糊的产线标签图变成模型能稳稳框出每一行文字的“熟人”。全程基于WebUI操作零命令行压力所有步骤都经过真实环境验证Ubuntu 22.04 RTX 3060连标注文件里多打一个空格都会报错的细节我们都给你标清楚了。1. 先搞懂为什么必须用ICDAR2015格式你可能会问“我有几百张带标注的图片JSON格式坐标是[x,y,w,h]不能直接用吗”答案是不能会训练失败。cv_resnet18_ocr-detection的训练模块严格依赖ICDAR2015 文字检测数据集格式这是行业通用标准也是DBDifferentiable Binarization算法原生支持的输入结构。它要求每张图对应一个纯文本.txt标注文件每行标注必须是8个数字 1段文本顺序为x1,y1,x2,y2,x3,y3,x4,y4,文本内容坐标是四边形顶点非矩形框按顺时针顺序排列文本内容不能含逗号否则会被误切分文件名必须与图片名严格一一对应如1.jpg→1.txt。这不是“矫情”而是因为DB算法需要四边形来拟合文字区域的真实几何形状——尤其是倾斜、弯曲、透视变形的文字行。矩形框x,y,w,h会丢失关键形变信息导致模型学不会“怎么框斜着的字”。小贴士如果你现有数据是COCO、YOLO或Pascal VOC格式别急着重标。文末附赠一个Python脚本3分钟自动转成ICDAR2015格式支持批量处理。2. 数据目录结构5步建好合规文件夹WebUI的“训练微调”Tab页不会帮你创建目录也不会智能识别路径。它只认一种结构错一个斜杠、少一个子文件夹点击“开始训练”后只会显示“数据集加载失败”。按以下结构在服务器上手动创建推荐路径/root/custom_data2.1 根目录与子文件夹custom_data/ ├── train_list.txt # 必须存在且内容格式固定 ├── train_images/ # 存放所有训练图片JPG/PNG │ ├── invoice_001.jpg │ ├── label_002.png │ └── ... ├── train_gts/ # 存放所有训练标注TXT与图片同名 │ ├── invoice_001.txt │ ├── label_002.txt │ └── ... ├── test_list.txt # 必须存在可为空但文件不能缺失 ├── test_images/ # 测试图片可选用于验证 │ └── sample_test.jpg └── test_gts/ # 测试标注可选与test_images对应 └── sample_test.txt关键注意点新手高频踩坑train_list.txt和test_list.txt是纯文本文件不是文件夹train_images/和train_gts/必须是同级子目录不能嵌套在其他文件夹里所有路径使用正斜杠/Windows风格的反斜杠\会导致路径解析失败图片和标注文件名完全一致仅扩展名不同大小写敏感test_list.txt即使不放测试数据也必须存在内容可为空或写一行占位符如# no test data。2.2 列表文件train_list.txt的正确写法这不是一个“列出所有图片名”的清单而是一个图片路径 对应标注路径的映射表每行一条用空格分隔。正确示例绝对路径从根目录算起train_images/invoice_001.jpg train_gts/invoice_001.txt train_images/label_002.png train_gts/label_002.txt train_images/form_003.jpg train_gts/form_003.txt❌ 常见错误写成相对路径./train_images/...WebUI不识别.漏掉train_images/前缀直接写invoice_001.jpg用制表符\t代替空格行尾有多余空格或不可见字符建议用VS Code打开开启“显示空白字符”。实操建议在本地用Excel整理好图片名和标注名复制两列用“查找替换”把制表符全换成空格再粘贴进记事本保存为UTF-8无BOM格式最后上传。3. 标注文件.txt8个数字文本的硬核规则这才是真正决定微调效果的核心。很多用户训练完发现“框不准”90%问题出在标注质量上。3.1 四边形坐标的获取方法你不需要手算顶点坐标。推荐两个零门槛工具LabelImgOCR专用版https://github.com/tzutalin/labelImg启动时加参数--output-formatICDAR画框后自动生成.txt格式即为x1,y1,x2,y2,x3,y3,x4,y4,文本。CVAT在线平台免费https://cvat.org创建任务时选择“Text detection”模板标注后导出格式选“ICDAR 2015”一键生成。科哥实测提示LabelImg对中文支持更稳CVAT适合多人协作但导出前务必检查“Export as ICDAR 2015”选项已勾选。3.2 标注内容必须满足的3条铁律规则正确示例错误示例后果顶点顺序必须顺时针100,200,300,200,300,250,100,250,采购单号100,200,100,250,300,250,300,200,采购单号逆时针框被翻转文字区域错乱文本内容禁用逗号订单编号ORD2024001订单编号,ORD2024001模型读取时截断只识别出“订单编号”空格是合法字符但首尾不能有12,800.0012,800.00前后有空格首尾空格被当作无效字符可能导致解码失败3.3 一个真实标注文件长这样文件名invoice_001.txt内容共3行对应图中3行文字42,187,752,187,752,225,42,225,客户名称上海智联科技有限公司 42,248,752,248,752,286,42,286,订单日期2024-03-15 42,309,752,309,752,347,42,347,金额总计¥86,500.00看懂了吗第1行从左上角(42,187)开始顺时针画出一个宽710高38的矩形这是水平文字坐标值是像素位置原图尺寸为768x1024所以这些数字都在合理范围内文本中用了中文冒号、数字、货币符号全部合法。4. WebUI训练全流程从填路径到看到模型现在目录和标注都准备好了打开浏览器进入http://你的服务器IP:7860切换到“训练微调”Tab页。4.1 填写训练参数3个必填项字段输入值说明训练数据目录/root/custom_data必须是绝对路径且结尾不加斜杠Batch Size4默认8但科哥建议RTX 3060显存6G设为4更稳CPU训练请设为1训练轮数10默认5但实际场景建议8–15轮太少学不透太多易过拟合学习率0.003默认0.007偏高易震荡0.003收敛更稳尤其对小数据集警告如果“训练数据目录”填错比如少写了/root/只写custom_data点击“开始训练”后页面会卡在“等待开始训练...”后台日志报FileNotFoundError: [Errno 2] No such file or directory——此时需重启WebUI服务才能清除缓存。4.2 开始训练 实时监控点击“开始训练”后界面会变成[●] 训练中... Epoch: 1/10 | Loss: 0.824 | LR: 0.0030 | Time: 42sLoss值会从1.x逐步降到0.3以下说明模型在有效学习每轮耗时取决于图片数量和GPU性能科哥实测50张图RTX 3060约40秒/轮训练日志实时输出在WebUI下方滚动显示关键信息包括Validating on test set...每轮结束自动在测试集上跑一次验证Best model saved at workdirs/xxx/最佳权重已保存按验证指标自动选择。4.3 训练完成后的3个关键产物训练结束后WebUI会弹出提示“训练完成模型已保存至workdirs/20240315_142233/”。进入该目录你会看到workdirs/20240315_142233/ ├── best.pth # 最佳权重微调后模型用于替换原模型 ├── last.pth # 最终轮权重不一定最好但可作备份 ├── train.log # 完整训练日志含loss曲线、时间戳 └── config.yaml # 本次训练的全部参数快照含数据路径、学习率等下一步怎么做把best.pth复制到模型主目录覆盖原权重路径/root/cv_resnet18_ocr-detection/weights/best.pth或直接在WebUI的“单图检测”页刷新页面系统会自动加载最新模型。5. 效果对比微调前 vs 微调后我们用同一张“设备巡检表”截图做测试含手写批注印刷体混合背景有阴影项目微调前原模型微调后我们的模型检测到的文字行数5行漏掉2行手写批注9行全部捕获定位准确率框偏移平均±12像素框偏移平均±3像素小字号8pt识别完全丢失100%框出并识别推理速度RTX 30600.48秒/张0.51秒/张几乎无损关键提升点原模型对“手写体阴影”鲁棒性差框经常包不住字微调后模型学会了把阴影区域当作文字背景的一部分不再把它当噪声过滤掉所有框都紧贴文字边缘为后续OCR识别文字内容提取提供了高质量输入。6. 常见问题速查5分钟定位并解决6.1 “训练失败No module named torch”现象点击“开始训练”后立即报错页面显示红色错误框。原因WebUI服务未用conda或venv隔离环境PyTorch被其他项目覆盖。解法cd /root/cv_resnet18_ocr-detection source env/bin/activate # 激活模型自带虚拟环境 bash start_app.sh # 重启服务6.2 “train_list.txt not found”现象路径填对了但提示列表文件不存在。原因train_list.txt文件编码不是UTF-8或文件权限为只读。解法# 转换编码Linux iconv -f GBK -t UTF-8 /root/custom_data/train_list.txt -o /root/custom_data/train_list_utf8.txt mv /root/custom_data/train_list_utf8.txt /root/custom_data/train_list.txt # 修改权限 chmod 644 /root/custom_data/train_list.txt6.3 训练Loss不下降卡在1.0以上现象10轮后Loss仍0.9无下降趋势。原因标注文件中存在坐标超出图片范围如x1800但图片宽只有768。解法用Python脚本批量校验文末提供或用grep -n 800 /root/custom_data/train_gts/*.txt快速定位超限行。6.4 测试时框出大量空白区域现象检测结果里出现几十个极小的框内容为空。原因检测阈值设得太低0.1模型把噪声当文字。解法在“单图检测”页将阈值调高至0.25或在训练时把train_gts/中明显误标的“伪文字”行删掉。7. 进阶技巧让微调事半功倍的3个实践7.1 数据增强不是可选项是必选项cv_resnet18_ocr-detection内置了基础增强随机旋转±5°、亮度对比度扰动但对真实场景仍不够。科哥推荐在准备数据时主动增强添加阴影用OpenCV给图片局部加灰度遮罩模拟背光场景模拟模糊对图片用cv2.GaussianBlur加轻微高斯模糊ksize3加入噪点用np.random.randint(0, 10, img.shape, dtypenp.uint8)叠加椒盐噪点。实效科哥在100张发票数据上加入上述增强漏检率下降37%尤其改善了扫描件模糊场景。7.2 小数据集也能训好用“冻结主干微调头”策略如果你只有50张图直接全参数微调容易过拟合。WebUI虽未暴露此选项但可手动修改编辑文件/root/cv_resnet18_ocr-detection/train.py找到model build_model(...)后插入# 冻结ResNet18主干网络只训练检测头 for param in model.backbone.parameters(): param.requires_grad False再启动训练Loss收敛更快泛化性更强。7.3 用ONNX导出做跨平台部署不依赖Python环境训练好的模型不一定要在原服务器上跑。导出ONNX后可部署到Windows客户端用C调用ONNX Runtime边缘设备Jetson Nano用TensorRT加速iOS/Android AppCore ML / NNAPI。导出步骤WebUI“ONNX导出”Tab输入尺寸选640x640平衡速度与精度点击“导出ONNX”下载model_640x640.onnx即可脱离Python环境运行。8. 总结OCR微调的本质是教会模型“看懂你的世界”今天我们拆解了cv_resnet18_ocr-detection微调中最关键的一环——训练数据准备。你已经知道为什么必须用ICDAR2015格式不是教条而是DB算法理解文字几何的唯一语言目录结构怎么搭才不报错5个文件夹2个列表文件一个都不能少路径必须绝对标注文件怎么写才有效8个数字要顺时针、文本禁用逗号、空格只能在中间WebUI训练三步走填对路径→设好参数→看懂日志效果提升看得见从漏检到全检从框歪到框准小数据也能有大改变。微调不是魔法它只是让通用模型学会你业务场景里的“方言”。你提供的每一张图、每一行标注都是在给模型上一堂专属课。下一步你可以用文末脚本把旧数据批量转成ICDAR格式尝试冻结主干策略用50张图训出可用模型导出ONNX把OCR能力嵌入到你的ERP或MES系统里。真正的AI落地从来不在云端而在你每天处理的那张发票、那份工单、那张设备铭牌上。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。