[English](./README.md) | [简体中文]

Image Over Text: Transforming Formula Recognition Evaluation with Character Detection Matching

[[ 论文 ]](https://arxiv.org/pdf/2409.03643) [[ 网站 ]](https://github.com/opendatalab/UniMERNet/tree/main/cdm) [[在线Demo 🤗(Hugging Face)]](https://huggingface.co/spaces/opendatalab/CDM-Demo)
# 概述 公式识别因其复杂的结构和多样的符号表示而面临重大挑战。尽管公式识别模型不断进步,但现有评估指标如 BLEU 和编辑距离仍存在显著局限性。这些指标忽视了同一公式的多种表示形式,并对训练数据的分布高度敏感,导致评估不公。为此,我们提出了字符检测匹配(CDM)指标,通过设计基于图像而非 LaTeX 的评分方法来确保评估的客观性。具体而言,CDM 将模型预测的 LaTeX 和真实 LaTeX 公式渲染为图像格式,然后使用视觉特征提取和定位技术进行精确的字符级匹配,结合空间位置信息。相比于仅依赖文本字符匹配的 BLEU 和编辑距离,CDM 提供了更准确和公平的评估。 CDM与BLEU、EditDistance等指标对比示意图:
Demo
> 从上述对比图中可以看出: - Case1: 模型预测正确,理论上ExpRate/BLEU/EditDist应该为1/1/0,实际上为0/0.449/0.571,完全无法反应识别准确性; - Case2 Vs Case1: 预测错误的模型(Case2) BLEU/EditDist指标确远优于识别正确的模型结果(Case1); - Case3: 模型预测错误较多,而BLEU指标确高达0.907,不符合直觉。 CDM的算法流程图如下:
Overview
可以看到CDM基于渲染图像的字符匹配方式,结果更加直观,且不受公式表达多样性影响。 # 更新记录 - 2025/09/28 - 解决了一些中文公式的渲染bug. - 2025/06/09 - 修复了字符框在匹配过程的一个bug. - 优化了匹配过程的一些参数. - 2025/06/05 - 支持中文公式评测. - 优化了处理速度. # 使用方法 ## 在线Demo体验 请点击HuggingFace Demo链接: [(Hugging Face)🤗](https://huggingface.co/spaces/opendatalab/CDM-Demo) ## 本地安装CDM CDM需要对公式进行渲染,需要相关依赖包,推荐在Linux系统安装配置 ## 准备环境 需要的依赖包括:Nodejs, imagemagic, pdflatex,请按照下面的指令进行安装: ### 步骤.1 安装 nodejs ``` wget https://registry.npmmirror.com/-/binary/node/latest-v16.x/node-v16.13.1-linux-x64.tar.gz tar -xvf node-v16.13.1-linux-x64.tar.gz mv node-v16.13.1-linux-x64/* /usr/local/nodejs/ ln -s /usr/local/nodejs/bin/node /usr/local/bin ln -s /usr/local/nodejs/bin/npm /usr/local/bin node -v ``` ### 步骤.2 安装 imagemagic `apt-gt`命令安装的imagemagic版本是6.x,我们需要安装7.x的,所以从源码编译安装: ``` git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.1 cd ImageMagick-7.1.1 ./configure make sudo make install sudo ldconfig /usr/local/lib convert --version ``` ### 步骤.3 安装 latexpdf ``` apt-get update sudo apt-get install texlive-full ``` ### step.4 安装 python 依赖 ``` pip install -r requirements.txt ``` ## 通过docker部署 如果安装上述的环境有问题,也可以通过docker来安装,步骤如下: - build docker image ``` docker build -f DockerFile -t cdm:latest . ``` 构建镜像的过程可能比较长,如果最后终端出现`Successfully tagged cdm:latest`,说明镜像构建成功。 - start a container ``` docker run -it cdm bash ``` 此时启动了容器并进入bash环境,可以进行CDM的评测。如果在启动的时候希望建立映射,可以加入参数:`-v xxx:xxx`,这样退出容器后,评测的结果还保存在宿主机。 ## 使用CDM 如果安装过程顺利,现在可以使用CDM对公式识别的结果进行评测了。 ### 1. 批量评测 - 准备输入的json文件 在UniMERNet上评测,可以用下面的脚本获取json文件: ``` python convert2cdm_format.py -i {UniMERNet predictions} -o {save path} ``` 或者,也可以参考下面的格式自行准备json文件: ``` [ { "img_id": "case_1", # 非必须的key "gt": "y = 2z + 3x", "pred": "y = 2x + 3z" }, { "img_id": "case_2", "gt": "y = x^2 + 1", "pred": "y = x^2 + 1" }, ... ] ``` `注意在json文件中,一些特殊字符比如 "\" 需要进行转义, 比如 "\begin" 在json文件中就需要保存为 "\\begin".` - 评测: ``` python evaluation.py -i {path_to_your_input_json} ``` ### 2. 启动 gradio demo ``` python app.py ```