我们知道,机器的运算多事基于数字的,即AI也是基于数字的。但是我们的现实的AI应用场景中:人脸识别、阅读理解、声音情绪识别、王者荣耀……有的基于图像识别,有的基于声音识别,有的甚至不知道基于什么……我们似乎很难理解这些AI技术是怎么结合当代AI的“灵魂”「神经网络」模型去实现的。其实描述出来也很简单,今天,我们以一种OCR(文字识别)的场景为例,为大家进行说明AI技术的应用方式。
1 OCR:从图片到文字的全过程
即我们用相机拍摄了一张纸质文档,通过两个神经网络模型,辅以一些操作来提取图片中的文字。
Step1:将图片转化为数据(输入处理)
比如图片的宽、高均为50,我们就得到 3 * 50 * 50(共7500个0~255大小的数字)的一组数据(3代表红、绿、蓝三色通道)。
Step2:执行模型
我们将先数据输入「文本区域检测模型」,得到一组mask数据,其宽高和输入时一致的(如:50 * 50)。所谓mask,可以理解为以0、1为数据组成的一张“矩阵图”,0代表图片对应的位置没有文字,1代表有文字。
如上图,灰色部分代表0,表示机器认为该区域非文字区域,白色部分为1,表示机器认为该区域有文字。
Step3:提取文字区域(检测模型后处理)
那么,我们将对应掩码区域(白色部分)转化为矩形数据,即完成了文字区域检测。
我们再从原图中将对应的矩形区域裁剪下来,作为「文字识别模型」的输入图片。
Step4:将每份剪裁图片转化为数据
跟 Step1一样的操作,只不过这次转化的是剪裁的图片,不赘述咯。
Step5:将每份数据输入文本识别模型
文本识别模型为了就是要识别出来对应区域是什么文字啦,像这样子👇
当然,要得到这样的最终结果,我们还需要一些辅助操作。
Step6:识别模型的输出处理
该例中,识别的模型的输出被设计为一组不定长的数字串,比如我们的识别模型可以识别6000个字符的话,那么每组数组的长度就是6000,它们可以转化为字符串👇
Step7:识别内容组合
一片一片的文本内容,我们使用起来也不方便,所以,根据需求,我们可能对识别出来的文本进行必要的需求定制组合:
1)可以直接将输出拼接起来作为最终文本,比如完成一篇课文的内容;
2)可以提取需要的关键信息,比如发票中的关键金额等信息;
3)也可以构造结构化数据,比如结合文本的位置信息,将输出转化为Word、Excel等电子文档。
2 模型推理(使用模型的方法)
通过上面的例子,其实我们发现将AI应用到生活只要做好「任务拆解」、「输入处理」(前处理)、「输出处理」(后处理)几件事情就好了。
任何一个独立AI模型的使用可拆解为如下4步:
1)加载模型(网络&权重)
2)处理模型输入(前处理)
3)使用模型(推理)获取输出
4)模型输出处理(后处理)
图片中,「2 加载输入」即为前处理过程,「4 解析结果」即为后处理过程
3 推理实践
那么,上节,我们训练了一个纯娱乐的神经网络模型;本节,我们直接提供一个训练好的更靠谱的AI模型,并配上相关的推理代码,供大家实践模型的推理过程。
该模型是基于MNIST数据集训练的手写数字识别模型,可以识别类似下面的手写数字,识别准确率为:98.9%(通过测试集10000张测试图片得到)
GitHub地址:https://github.com/chrisYooh/MNIST_Play
推理代码位置:4_Forward/forward.py
自己试试看吧~