LinXueyuanStdio / LaTeX_OCR_PRO

:art: 数学公式识别增强版:中英文手写印刷公式、支持初级符号推导(数据结构基于 LaTeX 抽象语法树)Math Formula OCR Pro, supports handwrite, Chinese-mixed formulas and simple symbol reasoning (based on LaTeX AST).
GNU General Public License v3.0
1.11k stars 235 forks source link

截图公式,预测结果完全不一致 #15

Closed cqvip-jq closed 4 years ago

cqvip-jq commented 4 years ago

训练结果:

2019-11-22 01:07:01,930:INFO: - Eval:  BLEU-4 is 86.85  ||  ExactMatchScore is 32.83  ||  EditDistance is 90.11  ||  perplexity is -1.22
2019-11-22 01:07:01,930:INFO: - New best score (19.76)!
2019-11-22 01:07:01,930:INFO: - Saving model...
2019-11-22 01:07:02,388:INFO: - Saved model in results/full/model_weights/

从训练集里挑一些png,识别效果非常好。

从网上截图一段公式,非常简单的公式识别都有问题,我的猜测是需要对图片做处理(比如二值化,对比度等)。

请问需要对截图做哪些处理才能提高预测效果呢?

截图识别效果如下(界面稍有调整):

image

LinXueyuanStdio commented 4 years ago

predict.py里缺少预处理过程,这是已知bug,正在处理

LinXueyuanStdio commented 4 years ago

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

  1. crop_image 把空白部分去掉,裁剪剩公式内容
  2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素
  3. downsample_image 下采样
cqvip-jq commented 4 years ago

好的,谢谢

jeremycurrygit commented 4 years ago

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

1. crop_image 把空白部分去掉,裁剪剩公式内容

2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素

3. downsample_image 下采样

事情并没有这么简单吧 生成的公式图片字体和测试图片的字体不一样,latex排版格式不一样都会影响结果

cqvip-jq commented 4 years ago

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

1. crop_image 把空白部分去掉,裁剪剩公式内容

2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素

3. downsample_image 下采样

事情并没有这么简单吧 生成的公式图片字体和测试图片的字体不一样,latex排版格式不一样都会影响结果

确实有这样的问题,我的理解,可以通过扩大样本集,把不同的字体/排版加进训练集,效果会更好

jeremycurrygit commented 4 years ago

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

1. crop_image 把空白部分去掉,裁剪剩公式内容

2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素

3. downsample_image 下采样

事情并没有这么简单吧 生成的公式图片字体和测试图片的字体不一样,latex排版格式不一样都会影响结果

确实有这样的问题,我的理解,可以通过扩大样本集,把不同的字体/排版加进训练集,效果会更好

就是不知道模型能否同时训练不同排版和字体 比如: 不同字体: 图片 图片 不同排版: 图片 图片

cqvip-jq commented 4 years ago

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

1. crop_image 把空白部分去掉,裁剪剩公式内容

2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素

3. downsample_image 下采样

事情并没有这么简单吧 生成的公式图片字体和测试图片的字体不一样,latex排版格式不一样都会影响结果

确实有这样的问题,我的理解,可以通过扩大样本集,把不同的字体/排版加进训练集,效果会更好

就是不知道模型能否同时训练不同排版和字体 比如: 不同字体: 图片 图片 不同排版: 图片 图片

这个需要 @LinXueyuanStdio 解答,我的理解不同字体,放在一起训练,相似的符号可能会出现冲突,但是每种字体独立训练各自模型是可以的,不过又得前置一个字体识别,又搞复杂了。

wumingwuyan commented 4 years ago

我们是否可以对原始训练数据进行处理,从而尽可能消除字体对训练结果的影响呢?

————————————————————————————————————————————— ————————————————————————————————————————————— ZhangKun Postgraduate,Applied Statistics Nanjing University Mobile:18912938641 E-mail:woweishuiyan@163.com —————————————————————————————————————————————

在2019年11月26日 17:02,cqvip-jq 写道:

要修复这个问题,可以参考model.utils.images下相关代码。预处理我在这里大概描述一下。

  1. crop_image 把空白部分去掉,裁剪剩公式内容

  2. pad_image 加空白填充,上下左右填充 8 个像素后用 bucket 确定最终大小,左上角空 8 个像素,填入公式内容的那些像素

  3. downsample_image 下采样

事情并没有这么简单吧 生成的公式图片字体和测试图片的字体不一样,latex排版格式不一样都会影响结果

确实有这样的问题,我的理解,可以通过扩大样本集,把不同的字体/排版加进训练集,效果会更好

就是不知道模型能否同时训练不同排版和字体 比如: 不同字体:

不同排版:

这个需要 @LinXueyuanStdio 解答,我的理解不同字体,放在一起训练,相似的符号可能会出现冲突,但是每种字体独立训练各自模型是可以的,不过又得前置一个字体识别,又搞复杂了。

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

LinXueyuanStdio commented 4 years ago

这个模型是支持手写体的,模型自己会无视字体差异进行识别,神经网络的这种特性就叫鲁棒性或者泛化性。简单地说,增大数据集就行了。当然,在给定参数量的情况下,数据集里各种字体种类越丰富,数据量越大,则模型泛化性能越好,但是平均识别成功率下降。然后又要增大模型参数量以提高识别成功率,如此往复。。。

想猥琐一点,可以针对各种字体构建多个模型进行模型融合。预处理的话,传统图像算法有能解决字体问题的吗?不还是靠神经网络。。。这样也就相当于在现有模型里加几层,四舍五入就是简单增加现有模型的参数量而已。。。这些都是应用层面的,如果单模自己都太菜的话,应用层再强也提升有限。

真正能解决问题的还是新方法新模型,需要一个强到识别率上90%的那种,那时的应用层面的手段才有意义。不过这不是本项目关心的范围了。

wumingwuyan commented 4 years ago

我想尝试一下使用xgboost来做识别那一块,不知道能否提高一定的泛化性能

————————————————————————————————————————————— ————————————————————————————————————————————— ZhangKun Postgraduate,Applied Statistics Nanjing University Mobile:18912938641 E-mail:woweishuiyan@163.com —————————————————————————————————————————————

在2019年11月26日 20:43,兮尘 写道:

这个模型是支持手写体的,模型自己会无视字体差异进行识别,神经网络的这种特性就叫鲁棒性或者泛化性。简单地说,增大数据集就行了。当然,在给定参数量的情况下,数据集里各种字体种类越丰富,数据量越大,则模型泛化性能越好,但是平均识别成功率下降。然后又要增大模型参数量以提高识别成功率,如此往复。。。

想猥琐一点,可以针对各种字体构建多个模型进行模型融合。预处理的话,传统图像算法有能解决字体问题的吗?不还是靠神经网络。。。这样也就相当于在现有模型里加几层,四舍五入就是简单增加现有模型的参数量而已。。。这些都是应用层面的,如果单模自己都太菜的话,应用层再强也提升有限。

真正能解决问题的还是新方法新模型,需要一个强到识别率上90%的那种,那时的应用层面的手段才有意义。不过这不是本项目关心的范围了。

— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.