CDM ensures the objectivity and accuracy of evaluation by rendering predicted and ground-truth LaTeX formulas into images, and then using visual feature extraction and localization techniques to perform precise character-level matching, combined with spatial position information.
FastCDM aims to address performance issues. As a high-performance optimized version of the original CDM, FastCDM employs the browser-based KaTeX rendering engine instead of traditional LaTeX compilation, resulting in significantly improved speed.
The core objective of FastCDM is to provide a convenient user experience during the training process, helping to advance formula recognition tasks. We are committed to:
- Providing simple and easy-to-use API interfaces for convenient integration of evaluation within the training loop.
- Supporting both real-time evaluation and batch evaluation modes.
- Providing visualization tools for evaluation metrics during the training process.
- Extreme Performance: Based on the KaTeX rendering engine, it is tens of times faster than the traditional LaTeX compilation process.
- Simplified Deployment: No need to install complex LaTeX environments (ImageMagick, texlive-full, etc.).
- Accurate Evaluation: Adopts character detection matching methods to avoid the unfairness issues associated with traditional text metrics.
- Continuous Optimization: Supplements and refines CDM symbol support, with continuous iterative improvements.
- Easy Integration: Provides a unified API interface for easy integration into various training frameworks. Future integration with mainstream training frameworks such as PyTorch and Transformers is planned.
Although KaTeX is extremely fast, it is a lightweight solution optimized for the Web and cannot support 100% of all obscure LaTeX syntax.
For the vast majority of standard formulas, it performs perfectly. This is a reasonable and sustainable technical choice.
You can check KaTeX's support coverage here: 🔗 KaTeX Support Table
You need to install node.js and chromedriver in advance.
- For
node.jsinstallation, please refer to here. - For
chromedriverinstallation, please refer to here.
pip install fastcdmfrom fastcdm import FastCDM
chromedriver_path = "driver/chromedriver"
# Initialize FastCDM evaluator
evaluator = FastCDM(chromedriver_path=chromedriver_path)
# Evaluate
cdm_score, recall, precision = evaluator.compute(gt="E = mc^2", pred="E + 1 = mc^2", visualize=False)
# Evaluate and visualize
cdm_score, recall, precision, vis_img = evaluator.compute(gt="E = mc^2", pred="E + 1 = mc^2", visualize=True)We provide a visualization Demo developed with Gradio, which you can try on HuggingFace Spaces. You can also launch it locally:
python3 scripts/app.pyWe welcome all forms of contribution, including but not limited to:
- Submitting issue reports
- Suggesting improvements
- Submitting code changes (please open an issue for discussion first)
Please contact us via the project's issues.
This project is open-sourced under the Apache 2.0 license. You are free to use, modify, and distribute the code of this project under the terms of the license.