出发点: 承接上一篇 【AI实践】个人免费数学老师系列之(二):自动切题【目标检测】,本篇介绍识别流程的第二步-题目识别OCR。
顺带总结科普一下当下火热的大型视觉语言模型(LVLM)、多模态开山之作CLIP等概念。
0、提纲:
- 核心概念
- 项目运行
- 参考资料
1、核心概念
OCR(Optical Character Recognition,光学字符识别)旨在提取图片上的文字信息(也可称为文字识别)。
OCR历史悠久,由德国科学家Tausheck在1929年率先提出,大致经历了传统模板匹配、AI-OCR-1.0、AI-OCR-2.0三个时代。
1.1 模板匹配时代
因为没有实战过,只介绍一下大致过程:
(1)准备一个包含所有可能字符的模板库,每个模板代表一个特定的字符;
(2)对待识别的字符图像进行处理,例如二值化、去噪等,以便于与模板进行比较;
(3)计算待识别字符图像与每个模板之间的相似度,选择相似度最高的模板作为识别结果。
很明显上述方案存在较多局限,例如对字体、字号、角度和光照等变化较为敏感,处理费力且较难扩展。
1.2 AI-OCR-1.0时代
自2012年AlexNet在ImageNet竞赛夺冠以来,深度学习方法开始在图像领域大幅超越传统算法,OCR领域也引入了深度学习。
AI-OCR-1.0时代的典型OCR系统会使用多模块流水线设计,至少包括文本检测和文本识别两个模块。
例如针对上图左侧的OCR过程主要包括:
(1)文本检测:将绿色多边形区域检测(分割)出来;
(2)文本识别:对各个子区域识别出包含的字符信息。
据了解,目前开源项目中,综合执行效率和识别效果来看,百度的PaddleOCR有口皆碑,成为业内尝试首选。
3年前,当时我们团队针对手机拍题场景,参照PaddleOCR自行搭建并微调了一套PyTorch方案:
(1)文本检测:使用 DBNet(ResNet-18);
(2)文本识别:使用 CRNN+CTC(ResNet-34)。
训练数据情况:拍题场景下,训练集(检测2000+张、识别75000+行);验证集(检测500+张、识别15000+行)
当时验收结果如下:
1.3 AI-OCR-2.0时代
遇到这个案例图片,OCR-1.0时代下我们会考虑用多达3-4个模型,来分别实现普通文本和数学公式的检测与识别。
而进入OCR-2.0时代,1个模型就能直接识别出结果。OCR过程简化成了端到端(End-to-end)的单项任务!
时代的重要推手就是大型视觉语言模型(LVLM)。
1.3.1 何为LVLM
大型视觉语言模型(LVLM)是近年AI的一个重要发展方向,结合了视觉和语言两种模态,旨在处理复杂的多模态理解与推理任务。主要应用于:视觉问答、图像生成、多模态检索。
OpenAI在2023年3月发布GPT-4,接受图像和文本输入的双模态人机交互。
如上图,GPT-4能够解读上面恶搞图的内容,准确地指出过时的VGA连接器插入新型智能手机的充电端口,是滑稽之举。
1.3.2 CLIP模型
其实,OpenAI早在2021年就推出了多模态预训练模型CLIP(Contrastive Language-Image Pre-training),它将文本和图像进行了有效匹配。
CLIP堪称多模态开山之作,也是LVLM的重要基石,像GPT-4就借鉴了CLIP的思路来调优。究竟CLIP为何物呢?
通过上图能了解CLIP基于对比预训练(Contrastive pre-training,也就是【对比学习】)原理,大致有3个步骤:
(1)从互联网上收集图像-文本对(约4亿个),分别对图像和文本进行特征提取(Encoder),再两两计算出向量的余弦相似度。
(2)将待识别的类别标签(label text)转换为句子格式(例如,将“dog”转换为“A photo of a dog.”)。
(3)通过计算最相似的文本向量,在没有针对特定图像分类任务训练的情况下,CLIP直接推理出输入图像为类别dog(zero-shotZSL,零样本学习)。
直观来说,就是让同一图像/文本对(正样本对)经过编码后越来越接近、非同一图像/文本对(负样本对)越来越疏远。
CLIP思路的伪代码如下图,其中包含了对称损失函数(Symmetric Loss Function)的计算方法。
1.3.3 GOT模型
在LVLM这波浪势的推动下,2024年9月由国内公司阶跃星辰StepFun联合中国科学院大学推出了GOT模型(《General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model》)。
GOT仅有580M参数,能识别场景文本、文档公式表格、乐谱、化学分子式、简单几何形状,可输出普通文字、markdown/tikz/smiles/kern各种格式。
如上图,GOT分三阶段训练,局部用到Meta的OPT和阿里的Qwen两个轻量化的大语言模型。
论文中提到,作者做了大量用于合成数据生产的数据引擎来支持各个训练阶段,这也是GOT成功的关键。
过程原理较复杂,此处不详述,下面直接看效果!
2、项目运行
2.1 GOT运行
conda create -n got python=3.10 -y
conda activate got
pip install -e .
pip install ninja
pip install flash-attn --no-build-isolation
- 下载模型后,运行:
python3 GOT/demo/run_ocr_2.0.py --model-name /GOT_weights/ --image-file /an/image/file.png --type format --render
- 推理时,显存占用5G+。运行成功后,在./results/目录下生成了demo.html,浏览器打开如下:
- 另一个成功case:
- 过程中也遇到不太成功的case,如下:
2.2 Qwen2-VL运行
对上图效果不太满意,于是考虑用LVLM大模型试试看:
效果相当惊艳,不得不感慨大模型的推理能力。【AI实践】个人免费数学老师系列的下一篇将详细说明。
- 感兴趣的读者,也可以自行免费尝试:https://www.modelscope.cn/studios/qwen/Qwen-Math-demo
3、参考资料
(1)百度PaddleOCR代码仓库:
https://github.com/PaddlePaddle/PaddleOCR/
(2)CLIP论文:
https://arxiv.org/abs/2103.00020
(3)GOT-OCR2.0代码仓库:
https://github.com/Ucas-HaoranWei/GOT-OCR2.0/
(4)GOT官方Demo:
https://www.modelscope.cn/studios/stepfun-ai/GOT_official_online_demo
(5)千问数学解题机器人:
https://www.modelscope.cn/studios/qwen/Qwen-Math-demo
- 附上该系列目录:
【AI实践】个人免费数学老师系列之(二):自动切题【目标检测】
【AI实践】个人免费数学老师系列之(三):题目识别【OCR2.0】(本篇)
【AI实践】个人免费数学老师系列之(四):题目解析【Qwen2.5-Math】
【AI实践】个人免费数学老师系列之(五):工程实践【代码开源】