【ICCV2023】MRN: Multiplexed Routing Network for Incremental Multilingual Text Recognition

论文地址: MRN: Multiplexed Routing Network for Incremental Multilingual Text Recognition
源码地址:https://github.com/simplify23/MRN

论文阅读

在这里插入图片描述
这是一篇发表在ICCV2023上的论文,基于多语种文本识别的多路由网络,

背景和动机

越来越多的机器学习从业者希望模型可以不断学习到新的知识时,依然可以保持旧知识的记忆能力,这个任务设定就是增量学习,致力于解决模型训练的普遍缺陷:灾难性遗忘(模型在学习新知识的同时,对于之前习得的旧知识表现大幅下降,并趋向遗忘)
MRN主要关注增量学习下的多语言场景文本识别问题(Incremental Multilingual Text Recognition (IMLTR)),在IMLTR场景下,多语言文本识别存在语种多样性的挑战,增量学习+多语言会带来挑战:回放不平衡(Rehearsal-imbalance)

Rehearsal-imbalance

Rehearsal Set:在训练新任务时的时候,保留下来的一部分有代表性的少量旧数据。少量的旧数据可以显著缓解灾难性遗忘问题,如何挑选旧数据,如何利用新旧数据进行结合也是一部分工作主要研究方向。

场景文本识别的背景下,IMLTR的Rehearsal Set容易面对一些特殊的不平衡问题。1)数据层面(Data- imbalance):语种和语种之间,由于数据的收集难度不一和使用频率不一致(训到理想精度所需样本量),容易收集的语种数据量大,而难以收集的语种往往数据量小,这造成了语种和语种之间,数据的不平衡问题。2)类层面(Class-imbalance): 由于语言表达内容的差异,一些语言(中文,日语,韩语)字符类数量较多而数据样本较少。在Rehearsal Set中,如果照顾每种语言进行均匀抽样,语言的均匀加剧了类不平衡。3)字符层面(Variable length):文本识别任务中的每一张图像往往包含不定长的多个字符类。这使得Rehearsal Set彻底无法保持字符和数据的平衡。我们把这一挑战统一称为Rehearsal-imbalance。
由于这一现象的存在,IMLTR不能抽象成一个简单的增量学习任务,设计了一个更适合IMLTR的MRN(Multiplexed Routing Network)多路复用路由网络。

MRN解决Rehearsal Imbalance问题

传统的增量学习在做IMLTR(增量多语言文本识别)任务的时候,每种新语言到来都需要重新扩大字符表,MRN使用Rehearsal Set专注于预测当前字符的语种类别,保留并冻结旧模型的分类器,用旧模型的分类器预测旧字符,这样,2000的Rehearsal Set就被用于预测几个不同语种的得分(语言域权重),大幅度降低了模型对于Rehearsal Set的字符内容依赖,巧妙避免了Rehearsal set中rehearsal-imbalance的问题,更好地适用于IMLTR场景。(可视化Figure 5中展示了,即使Rehearsal set中不再有相应的字符(红色标注),模型依然能通过旧的分类器正确分辩字符结果)

MRN网络结构

在这里插入图片描述
对每一种语言的训练主要分为两个步骤:(1)只用相应的语言数据集训练模型;(2)将前面每种语言的模型全部冻结,用rehearsal set的数据集(包括当前语言)训练DM- Router(Domian MLP Router)权重投票器。Backbone预测出的特征经过DM-Router计算域得分(Domain Score)并进行后处理。每个语言的分类器分别进行预测,并通过zero padding进行拼接,拼接之后的特征和域得分相乘求最大值进行字符解码。后处理步骤语言模型的结果可以融合,所以模型可以依靠多个语言专家对同一图像进行复合预测。损失函数:语言域损失(当前属于哪种语言)和字符级损失。
DM-Router结构:
在这里插入图片描述
DM-Router对backbone中的特征进行拼接,并且参考MLP- Attention的类似做法进行字符序列-语言域的注意力和通道-语言域的注意力。字符和字符之间存在不同语种的可能性,比如TDR東京,存在英文针对前3个字符,中文,日语针对后2个字符更加擅长。这时,将字符序列-语言域进行类似MLP- Attention的机制可以很好的探索这一线索。而通道-语言域注意力可以探索高低特征维度对语言预测的影响。MLP- Attention之后的特征被压缩到只有一个维度,并进行Softmax操作

实验

在实验上,我们选择了基于CTC的CRNN,基于Attention的TRBA,和最近流行的Transformer结构SVTR作为基本方法,并对比了不同增量学习方法在IMLTR场景下的性能评估。我们希望通过实验验证MRN性能大幅提升的关键在于它以一种巧妙的方式解决了rehearsal- imbalance的问题。但rehearsal- imbalance没法直接进行评估。为此,我们做了一系列的实验,来证明MRN的作用。
1、数据层面:为评估模型对Data-imbalance的效果,我们设计了改变Rehearsal set大小的实验。MRN在数据严重不平衡(较小的内存)时比其他方法有更大的增益,显示了其对数据不平衡的鲁棒性。
2、类层面:为了评估MRN是否更好的缓解class-imbalance问题,我们改变了语种的增量顺序(不同语种类数量差别大)来评估这一问题。 O1为:Chinese, Latin, Japanese, Korean, Arabic, Bangla. 大词汇量的语言(中,日,韩)出现更早,类别不平衡最为严重,这表明 MRN 可以更好地对抗类别不平衡。
3、字符层面: 不同的采样方式可以改变rehearsal set中每张图片的字符数量,以评估MRN是否能解决字符不定长的问题。Random 的性能优于Length(字符长度普遍更长),这意味着 MRN 可以很好地处理字符不定长问题。

总结

本文引入了一个新场景:增量多语言文本模型(IMLTR),作为一个文本识别领域进行增量学习的设定,IMLTR面临Rehearsal- imbalance的问题,这使得主流的增量学习方法并不适用。为此设计了专注于解决这一问题的MRN网络。

代码运行

搭建环境

创建虚拟环境

conda create -n mrn python=3.7 -y

激活环境

conda activate mrn

安装依赖、安装包

conda install pytorch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1 cudatoolkit=11.3 -c pytorch -c conda-forge
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
pip3 install lmdb pillow torchvision nltk natsort fire tensorboard tqdm opencv-python einops timm mmcv shapely scipy
pip3 install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.1/index.html

但是,在安装mmcv的时候报错了,安装失败,找了找解决方法,好像要下载whl文件,然后,执行下面的代码:

pip install mmcv_full-1.4.0-cp37-cp37m-manylinux1_x86_64.whl

环境就OK啦

开始运行

tiny_train.py里的这个和这个,改它!根据数据集放的位置改哦
在这里插入图片描述
改好了,运行下面的语句,看看会报什么错误(已经习惯了呜呜呜):

CUDA_VISIBLE_DEVICES=0 python3 tiny_train.py --config=config/crnn_mrn.py --exp_name CRNN_real
CUDA_VISIBLE_DEVICES=1 python tiny_train.py --config=config/crnn_mrn.py --exp_name CRNN_real

果然…

lmdb.Error: ../dataset/MLT17_IL/train_2017/Chinese: No such file or directory

config/crnn_mrn.py这个文件里面,数据集的路径没有改,改完执行一下
结果,因为没有pretrained model,没法进行到下一步了,联系作者,但是作者说鼓励大家自己直接训练
运行一下demo叭,看看效果如何,不对,demo还是需要预训练模型。还是得解决错误呀。

cd demo.py的路径
CUDA_VISIBLE_DEVICES=1 python3 demo.py --saved_model=./saved_models/CRNN_MRN/Chinese_0_0_best_score.pth --model_name=CRNN

最后改了crnn_mrn.py里面的一个参数,因为发现报的是预训练模型不存在,从头开始训练的话应该是某个参数需要修改,是start_task,要初始化为0。
在这里插入图片描述
开始训练了,练了个中文的识别器
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值