OCR问题
通俗一点讲就是图像识别中的文字识别。比方说给一张图,请识别图中的文字。
滑动窗口探测法
该方法用于识别出图中哪些区域还有所指定的目标物体。
它选一个特定的尺寸的图片进行二分训练,判断这个尺寸的图片中是否含有要找的目标。
例如行人探测
问题,需要找出图片中哪有人,那么可以先选取一个 $82 \times 36$ 大小的小图片作为训练集进行训练。
得到训练模型后,使用一个滑动窗口
在原图上进行搜寻,每次移动的距离叫做step
,step
越小,效果越好。
第一步:文字检测
要识别图像中的字,得先知道哪些地方可能是字,所以文字检测是用来探测图像中的哪一部分是含有字的。
与行人检测
一样,我们需要先建立起训练集
在原图上我们运行滑动窗口算法,得到左下方的图。白点
越亮则表示该处有文字
的概率越大。根据文字的特征,一般文字都是横着的,而且是连着的,所以我们可以通过白点扩散
得到右下方的结果,这样就更加接近真实的结果了。
第二步:断字
例如现在已经截取到了含有字的那一块图片,那么就要对其进行断句(分词)例如:
这个问题用滑动窗口法也可,对于每一小块,我们取图片的对称轴即可以找到字母的间隔,就可以把文字断开了。
第三步:识字
这一步需要识别每一个独立的语言符号,对英语来说,就是识别出每一个字母:
这是一个典型的多分类问题。
合成数据
获得真实数据是一件很麻烦的事情,需要消耗人力物力,而文字识别这件事儿其实人工合成的数据也能达到训练效果,例如下面两幅图,人也很难区分哪一个是合成的。
获取大量数据:扭曲、加噪
扭曲
是模拟真实数据的一个好方法,例如现在有一个很标准的数字A。
同时在语音数据上,你或许已经有一个比较标准的数据,声音很清晰,那你可以试着对这断语音加入一些白噪声,看机器学习模型是否还能正确的识别它。
流水线学习
从上述OCR问题的解决方案来看,解决OCR问题可以分成三个步骤,而这三个步骤都分别对应一个机器学习问题
。
优化分析
那么有什么指标可以衡量一个OCR系统的好坏呢?答案是准确率,那么要是准确率很低,又该怎么优化呢。
因为OCR可以被拆成三个机器学习问题,所以我们可以把它们看出三个组件,通过调整每一个组件的准确率,我们可以提升系统整体的准确率。那么我们应该调整三个组件中的哪一个组件呢?
我们可以画出以下表格,第一行表示当前系统整体的准确率是72%,假设现在我们要来优化这个系统。
我们可以人工的把第一个组件文字检测
的准确率提高到100%,我的意思就是人工纠正那些被模型错误分类的数据,之后我们再次运行系统,得到的系统准确率是89%。
接着我们把断字
组件的准确率也提高到100%,得到的系统准确率是90%。
再把识字
组件准确率也提高到100%,那么最后的系统准确率肯定就是100%了。
好了,现在可以看到,通过提升文字检测
组件,我们可以把系统的整体准确率提高17%
,,断字
、识字
可以提高1%
和10%
,可以知道,文字检测
的贡献率是三个组件中最大的,所以我们可以把大多数优化的精力用在文字检测
这个组件上。
总结
很感谢Coursera提供的这样一个平台,让百万莘莘学子可以接触到这么多优质的资源,同时也很感谢Ng的这套机器学习课程,帮助大家很快速地踏入了机器学习的大门,教育无疆。
课程虽然结束,而我的言机器学习之旅也才刚刚开始,接下来的两个月我将花费大量时间研究NLP领域,同时也希望自己能够坚持自己的选择,能够披荆斩棘走向梦想的彼岸。