课程最后以一个图像OCR的例子作为结束,OCR技术本身讨论的不多(毕竟不是图像处理课程),但围绕该实例涉及到的训练数据获取和机器学习项目的上限分析还是很有意义的
本节讨论以下三个问题:图像OCR的基本步骤、机器学习训练数据的获取、上限分析
图像文字识别涉及到的工作主要分为:文本检测、字符分割、字符识别
图1-1. 图像OCR的基本步骤(图片来源:课程视频)
文本检测使用滑动窗口的方式,根据目标的长宽比预设窗口的尺寸,在待检图片上滑动,求出每个区域的概率
图1-2. 文本检测(图片来源:课程视频)
然后对图1-2右做膨胀,按照一定的长宽做筛选便得到最终的文本位置了
字符分割课程中还是用了文本检测的模板匹配的方式(虽然我的直觉是用联通域的方法):首先准备一些字符与字符间隔的图片作为模板,然后在待检区域内滑动,匹配的位置从中间做分割
图1-3. 字符分割(图片来源:课程视频),图上部分是模板,下部分是滑动分割过程
字符识别就有很多方法了,总体来说就是准备足够数量与种类的正负样本,丢到分类器里训练,然后拿出来做分类
对于一个机器学习算法,理论上来说训练样本越多,覆盖面越广,得到的模型就越好(当然在决定扩展训练数据之前还是需要评估下目前模型是否为过拟合)
扩展训练数据最直接的方法当然是去网上找咯,但很多情况下可能网上并没有符合自己需求的样本。这个时候就需要自己合成一些数据了
人工合成训练样本有两种方式:再创作(对于字符识别,可以利用不同的字体与不同的背景做排列组合,生成新样本);对现有样本做修饰(扭曲、旋转、加噪声。。。)
以图1-1为例,对于一个初步的图像文字识别算法,现在想要提升它的识别精度,那么我们需要在文本检测、字符分割和字符识别中的哪个下大功夫呢?
这个问题可以等价为分析当前整体算法的性能瓶颈,就是上限分析啦
上限分析的思路很简单,以图1-1为例:
1. 首先通过人工干预(把文本准确位置告诉算法)确保文本检测的精度是100%,看这种情况下整体算法的精度提升多少
2. 然后保持文本检测精度100%,确保字符分割精度为100%,看这种情况下整体算法的精度提升多少
3. 最后保持三项精度都为100%,看整体算法的精度提升值
4. 比较3个精度提升值,最大的表示对应的那一步是目前最影响算法整体精度的
图1-4. 图像OCR的上限分析(图片来源:课程视频)
图1-4所示的3个精度提升值分别为:17%、1%、10%,所以应该着重考虑文本检测的算法。