图像增强在 OCR 中的实战作用
这篇文章就来分享一下我们实际做过的图像增强方式、效果对比、还有一些实验记录。
为什么 OCR 更依赖图像增强
图像增强这件事,其实很多做分类模型的朋友可能觉得"锦上添花",不增强也能训。但 OCR 是另一个物种。
OCR 有几个天然硬伤:
• 输入信息量少:一张车牌、小票、票据,本来就只有几个字符,容不得你漏一个;
• 字符很敏感:一个像素模糊都可能把 8 看成 B,或者 3 看成 5;
• 数据变化范围大:旋转、曝光、遮挡、脏污、低清晰度……这些都是现实 OCR 系统每天要打交道的;
分类模型学的是识别干净样本。OCR 模型得活在脏图里。
图像增强不会直接增加训练集容量,但会拉高模型的认知范围和抗噪能力。很多时候,模型训练得不好,不一定是网络不够,而是数据太"单纯"。
我们用过的图像增强方法
为了让模型识别能力更贴近真实环境,我们当时尝试了几种图像增强方式,基本可以分为以下几类:
几何变换类
模拟各种角度拍摄、图像倾斜、歪斜摆放等场景。
• 轻微旋转(±10°~15°):模拟车辆歪着进场、小票拍摄角度不正的情况。
• 缩放 + 裁剪:模拟摄像头或用户拍摄时框得不准,字符被切边或者缩小。
• 仿射/透视变换:稍复杂,但能很好模拟斜拍、侧拍。
光照和色彩类
现实中拍照会遇到强光、阴影、曝光不足,必须要模拟。
• 亮度增强/降低:模拟白天阳光强烈或夜间昏暗的图像。
• 对比度调整:模拟脏污和强光干扰。
• 颜色扰动(HSV 偏移):轻微改动色调,增加模型的颜色鲁棒性。
模糊/噪声类
模糊通常来自运动,而不是硬件故障。
• 高斯模糊:模拟镜头没对好焦或车牌快速移动时的拖影。
• 椒盐噪声:模拟图像传输压缩时的噪点,车牌压缩图经常出问题。
• 运动模糊(Motion Blur):模拟车辆进出过快导致的拉丝感。
自定义遮挡/拼接类(我们项目场景特有)
• 添加局部遮挡(半透明灰块、贴条):模拟有灰尘、车牌被装饰物遮挡的情况。
• 拼接错位字符图:把不同车牌字符截出来拼成新图,制造字符间距异常的样本。
这些操作虽然听着都挺"基础"的,但组合起来就是一套硬核训练法——模型识别能力从"只会认干净图"变成了"脏图也能八九不离十"。
实测效果对比
我们在一批验证集中分别测试了"不开增强"和"单种增强后训练"的结果,下面是一些实测数据(基于 CRNN+CTC OCR 结构,在 5k 训练样本上训练,验证集 1k 张):
| 增强方式 | 识别准确率提升(对比无增强) | 备注说明 |
|---|---|---|
| 轻微旋转 | +4.8% | 模型能容忍倾斜字符了。 |
| 高斯模糊 | +3.2% | 对夜间图表现特别明显。 |
| 色调扰动(HSV) | +2.9% | 提高对不同车牌底色/背景适应性。 |
| 对比度调整 | +1.5% | 作用不大,但不会掉精度。 |
| 添加噪声(椒盐) | +1.8% | 稳定性略提升。 |
| 添加遮挡(随机块) | +6.1% | 模型能"推测"部分被挡住的字符了。 |
| 增强全部组合(混合) | +9.3% | 效果最明显,但训练时间稍长。 |
最明显的提升来自两个方向:旋转和遮挡——这两种情况最常见。组合使用多种增强,效果远好于单独用一两种。
我们还发现一个现象:增强带来的提升,在训练数据量较小时特别明显。小数据集 + 强增强,比大数据 + 弱增强的效果更直接。
实用的增强组合策略
虽然增强方式很多,但不是所有增强都适合一起乱加,尤其在 OCR 场景里,一不小心加猛了,模型反而"学乱了"。
以下是我们做实验后踩出来的一些组合策略建议:
基础耐受增强
适合任何模型做基础鲁棒性打底。
✔ 轻微旋转(±10°)
✔ 亮度调节(+/-20%)
✔ 色调扰动(HSV 小幅偏移)
✔ 高斯模糊(1~2px)
效果稳定、几乎不会破坏字符形状,是我们默认打开的一组增强。
脏图专用抗压训练
适合针对实际部署环境"画面脏、反光多、模糊严重"的场景。
✔ 遮挡模拟(随机加灰块)
✔ 运动模糊(水平或竖直)
✔ 对比度压缩
✔ 背景扰动(局部添加噪声)
⚠ 这组增强会加大模型训练难度。建议在前面训练过一轮、或者模型已经"稳住"之后再加入。
我们找到的训练节奏:
• 前 10 轮训练不要加太重的增强。模型刚开始还没学会基本形状,加太多干扰会迷糊。
• 中期可以分批加增强。我们是每 5~10 个 epoch 动态开启一种新增强,逐步加压。
• 后期增强可适当减弱,避免过拟合在异常图上。最终测试集效果不好,有时不是模型退化,而是训练图太"花"了。
增强不是万能,但在 OCR 里它几乎是刚需
说实话,图像增强这个事,在很多模型训练工程师眼里都算"杂活",不够高大上。但我们项目做完之后最大的感受是:
在 OCR 这类任务里,增强不只是提升模型的一种方式,很多时候是它能不能「活下来」的前提。
我们曾经尝试不加任何增强,只用"干净数据"训练,模型在验证集上表现很好,但上线不到一小时就开始疯狂识错。最后一轮带增强训练后的模型,虽然训练 loss 跌得慢了一点,但实际稳定得多——尤其在夜间、雨天、边缘图像这些"真实世界的黑暗面"。
所以,如果你也正在做 OCR 项目,或者是小样本图像分类,不妨认真想一想:
与其花三天调网络结构,可能还不如花一天,好好做做数据增强。