【AI实践】个人免费数学老师系列之(三):题目识别【OCR2.0】

出发点: 承接上一篇 【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实践】个人免费数学老师系列的下一篇将详细说明。

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实践】个人免费数学老师系列之(二):自动切题【目标检测】

【AI实践】个人免费数学老师系列之(三):题目识别【OCR2.0】(本篇)

【AI实践】个人免费数学老师系列之(四):题目解析【Qwen2.5-Math】

【AI实践】个人免费数学老师系列之(五):工程实践【代码开源】

猜你喜欢

转载自blog.csdn.net/vison20080808/article/details/143288916