Handwritten Mathematical Expression Recognition with Bidirectionally Trained Transformer
BTTR论文地址:https://arxiv.org/abs/2105.02412
代码地址:https://github.com/Green-Wood/BTTR
该论文是使用的数据集CROME数据集,论文发表在2021ICDAR期刊上,文档分析与识别国际会议(International Conference on Document Analysis and Recognition,ICDAR)
BTTR模型结构
BTTR模型实验结果
BTTR模型复现过程
然后就需要进行相应环境配置,下载安装anaconda那一套就看看其他博客。
然后就是按照readme文件进行配置环境。
首先创建一个conda的虚拟环境,名字为bttr python版本为3.7
然后在anaconda prompt中进入 bttr环境
然后下载pytorch 对于这个下载 我自己试出来的方法是下载这个,
对于pytorch的下载,一定要注意自己的cuda版本。
以及即时检测torch.cuda.is_available()的结果是否为true
也就是这个环境中显卡是否可以正常使用
然后下一步就是pip install -e.
对于这步需要在anaconda promte中进入含有requirement.txt文件中进行该操作
对于图上的base,自己懒的改了,进行这步操作需要在之前创建的bttr环境中
然后环境算是配好了,但是还是存在一些问题,会报一些错,如下
这个错问题在与torchmetrics版本有问题需要重新下载为0.5
进入bttr环境 pip install torchmetrics==0.5
对于这个报错,自己在csdn上找到的解决方案
然后就是对于yaml文件的设置,作者是多卡训练,平时使用一台电脑单卡学者
也就是把gpus:4进行注释掉然后加上gups:1
然后需要把accelerator: ddp进行注释掉,不然会报错NCCL
然后对于numworks这个看自己电脑报不报错,报的话就是设置为0,还是在这个config.yaml文件中设置,我自己主机和笔记本都是只能设置为0才可以跑,室友电脑可以不设置为0,这个看具体情况。
还有batch_size这个设置,我1650 4G只能跑batch_size=1,这个根据实际情况进行设置。
然后进入pycharm运行该段,也可以在pycharm中的Terminal中进入BTTR模型文件夹下,输入python train.py --config config.yaml ,然后会自己开始训练。
对于训练过程,自己使用1650显卡非常慢,使用了室友的3060也非常慢,因为这个需要训练300个epoch,所以自己在云GPU平台进行训练,使用了3080-10G,然后跑了200多个epoch,得到一个还算满意的模型权重。
然后这是一个代码自带的一个预测检验,总体来说还是一个不错的效果,比之前的WAP模型好多了,对于这个比较复杂的公式也可以很好的预测。
对于BTTR模型的优点,本文提出了一种双向训练的Transformer模型,与之前的一些方法相比较,有以下三个优点:(1)通过图像位置编码,模型可以获取图片的位置信息,引导自身合理分配注意力,缓解覆盖不足问题。(2)利用Transformer模型的置换不变特性,训练出具有双向语言建模能力的解码器,并且双向训练策略使BTTR模型能够在L2R和R2L两个方向进行预测。(3)采用Transformer解码器代替基于rnn的解码器,提高训练过程的并行化程度。该模型在HMER迈出了使用Transformer的一步,引领了HMER方向的整体发展。