在学术领域,输入或转录数学方程是一项繁琐且耗时的工作。虽然存在数学OCR解决方案,但许多基于笔画检测、不易访问或为付费闭源。通过Roboflow,任何人都可以进行数学方程识别。
尽管数学OCR解决方案确实存在,但与传统文本识别不同,它们远非丰富、易访问和开源。数学OCR特别是一个难以接近的问题。
考虑如下方程式:由于分数、根号和指数等结构的存在,大多数现有的OCR解决方案都会感到困惑。数学方程包含许多独特的字符、格式和语法,这些本身就难以学习,识别起来更是难上加难。
许多现有的传统OCR解决方案已经使用了计算机视觉的形式。虽然传统OCR解决方案并非全部相同,但大多数遵循类似的过程。
对象检测用于隔离文本块,然后是块内的单行文本,然后是行内的单词,然后是单词内的字母。然后,图像分类用于识别每个字母。字母、单词、行和文本块被重新组合成人类可读的文本。
在识别数学方程时,可以使用类似的概念将数学方程分解为单独的部分。不是使用文本的块、行和单词,而是使用对象检测来识别数学特有的语法和结构,如分数、根号和上标。
就像许多设计过程一样,这个过程充满了试错。最初尝试设计一个数学识别系统,将所有字符、结构等标记为单独的类别。这种方法导致了类别的严重不平衡。数学语法的性质意味着,像零、“x”、“y”和其他常见字符这样的类别会超过分数或不太常见的类别,最极端的情况下是60,000比1。尽管这是自然发生的,但在训练机器学习模型时,不平衡会使模型难以找到较少出现的类别,因为它没有足够的例子来学习。
通过Roboflow的“健康检查”,很明显最低出现的类别是字符。为了制作一个更平衡的数据集,从传统OCR设计中汲取灵感,设计了一个两步识别设计。
在这一步中,对象检测模型将隔离并识别所有字符,统一归为一个名为`character`的类别,并分别用各自的名称识别独特的结构。为了实现这一点,由于所有数据已经创建,使用Roboflow的重映射预处理步骤,将所有字符组织在一个类别下。这导致将103个类别重映射为一个。
使用“修改类别”预处理工具将103个字符类别重映射为一个
在这一步中,图像分类模型将识别每个字符,并返回相关的符号,类似于传统的OCR。
对于任何项目来说,高质量的大型数据集都是有帮助的,但对于这个项目来说尤其重要,也非常困难。
第一次尝试创建数据集包括从数学教科书中截取屏幕截图,并使用RoboflowAnnotate手动标记图片。尽管尽了最大努力,但这导致在一周内标记了50张图片,结果令人失望,mAP仅为27.6%。
基于第一次尝试的学习,第二次方法更加成功。它的目标是尽可能多、尽可能准确、尽可能快地产生数据。
最初的尝试揭示了在生成图像和注释以及底层方程本身时的一些偏见和效率低下。从数学教科书中截取屏幕截图并没有产生足够的数量、质量和多样性的方程,这对于训练数学OCR模型是有帮助的。
为了获得更大数量和更广泛的方程,转向了Mathway,这是一个在线数学问题求解器,深受学生欢迎。他们的网站有一个“热门问题”部分,有成千上万的方程由世界各地的学生提交给Mathway求解。
另一个需要解决的问题是生成图像。到目前为止,数据是教科书的屏幕截图或在渲染网站上手动输入的方程。但是,对于成千上万的方程,必须设计一个流线化的过程。新的工作流程使用了一种用于在网络上显示数学方程的数学方程渲染引擎,称为MathQuill。
MathQuill使用html2canvas,一个JavaScript包,创建HTML元素的图像,不仅创建了高质量的训练图像,还允许自动生成注释。这得益于MathQuill的HTML格式,使得查看数学方程中使用的所有字符和结构变得相对容易。
使用JavaScript,还可以获得方程中每个元素的确切位置。最初尝试使用`getBoundingClientRect()`函数,但由于边界框差异,转而使每个其他元素不可见,并映射对比度以获得边界框位置。
代码通过改变其他元素的可见性来找到每个字符/结构的边界框
一旦知道了边界框的位置,就可以构建一个COCO JSON注释文件,然后通过Roboflow的注释上传API上传。
除了在数据集生成方面进行的增强,包括使用不同的字体、字体大小和背景图像,还增加了裁剪、旋转、剪切、色调、饱和度、亮度、曝光、模糊和噪声等增强。
在训练了一个初始表现不佳的模型之后,使用roboflow.js创建了一个主动学习环境。使用已知的方程,现有代码生成了一个方程图像。一旦生成了方程图像,它就会被模型推断,模型会预测方程是什么。如果预测的方程不正确,它将把图像和注释重新提交到项目中,以帮助进一步训练模型。
结果是一个循环的主动学习过程,其中表现不佳的图像将自动添加到项目数据集中,用于改进模型在未来训练版本中的性能。
结果是,使用仅两个变化和增强的图像为每个独特方程创建了一个包含100,000张图像的数据集,大多数,如果不是全部,都有完美的注释。训练结果也反映了改进,特别是与之前的27.6%相比,新数据集达到了99.4%的mAP,98.1%的精确度和98.5%的召回率。
在创建数学OCR能力的过程中,使用Roboflow的工具来创建计算机视觉数据集和模型,使这个项目得以实现,使用了Roboflow管道的大部分: