为什么MORAN v2要加双向解码器BidirDecoder让识别率再上台阶的完整原理【免费下载链接】MORAN_v2MORAN: A Multi-Object Rectified Attention Network for Scene Text Recognition项目地址: https://gitcode.com/gh_mirrors/mo/MORAN_v2MORAN 是一款用于场景文本识别Scene Text Recognition的注意力网络擅长从街景、文档、图片中识别弯曲变形的文字。MORAN v2 在 v1 的基础上引入的双向解码器BidirDecoder是它识别率再上台阶的关键之一。本文将用通俗的方式讲清楚单向解码器卡在哪里、BidirDecoder 的完整原理是什么、以及如何用一个参数开启它。一、MORAN 速览先摆正再读字MORAN 的名字本身就是架构的写照整条流水线分两级见 models/moran.py模块作用源码位置MORNMulti-Object Rectification Network对弯曲、透视变形的文字图像做拉直矫正models/morn.pyASRNAttention Sequence Recognition Network对矫正后的图像逐字符做序列识别models/asrn_res.pyv2 相对 v1 的三处升级来自 README.md✅ 更稳定的矫正网络支持单阶段训练✅ 骨干网络从 VGG 换成ResNet✅ 引入双向解码器 BidirDecoder借鉴自 ASTER 的技巧——这正是本文主角。二、单向解码器卡在哪错误会滚雪球 ⚠️ASRN 的识别部分是一个注意力解码器循环每一步网络根据已读出的字符和上一步的隐状态在图像特征序列上算出一组注意力权重盯着图像中最可能出下一个字符的位置再吐出这个字符核心是 models/asrn_res.py 中的AttentionCell。问题在于这个解码器只能从左往右单向读。读到第 3 个字符时它知道前面 1、2 长什么样却不知道后面还有什么一旦中间某个字符读错比如把1认成l错误的上下文会带偏后面的每一步形成错误累积场景文本往往模糊、对比度低、背景复杂歧义更多滚雪球效应更明显。打个比方这就像蒙上一只眼、只往前看地走迷宫——看不到出口方向走错一步就很难回头。三、BidirDecoder 完整原理两条解码通道互为校验 3.1 结构一个编码器两个注意力解码器开启BidirDecoder后ASRN 共享同一套编码器ResNet 两层双向 LSTM但末端分出两套独立的注意力解码器attentionL2R从左到右正常读attentionR2L从右到左倒着读。定义见 models/asrn_res.py前向输出两个方向的预测结果models/asrn_res.py。3.2 训练给倒读通道一份倒过来的答案右到左通道不能直接照抄原标签数据集加载器会把标签反转一份再送入模型tools/dataset.pylabel_rev label[-1::-1] $。训练时两个解码器的预测拼接在一起、标签也拼接在一起一起算交叉熵main.py。另外训练时注意力权重还会经过一层随机扰动fracPickupmodels/fracPickup.py防止注意力死盯单个像素位置这也是 v2 训练更稳定的细节之一。3.3 推理置信度投票谁更有把握听谁的 ⚖️测试时两个解码器都会跑一遍各自给出识别结果和每个字符的最大概率。MORAN 取平均置信度更高的那条结果作为最终答案如果胜出的是右到左通道再把字符串翻转回正常顺序投票逻辑见 main.py。这本质是一个零额外标注成本的自集成self-ensemble两条独立视角同一张图被从两个方向读了两遍随机错误大概率被抵消互补上下文倒读通道在读第一个字符时知道的是原文末尾的上下文能纠正正读通道开头的误判置信度过滤拿不准的样本自动交给更有把握的那条通道。四、效果实测v1 → v2 榜单对比 README.md 公布的常用识别测试集准确率%测试集v1课程训练v2单阶段训练变化IIIT5K91.293.42.2IC1392.493.20.8SVT-P76.179.73.6CUTE8077.481.94.5IC15 (2077)68.873.95.1可以看到难度越大的测试集CUTE80、IC15 系列提升越明显——恰好印证了双向解码对模糊、易混样本的价值。需要说明的是v2 的提升来自三处升级的合力其中双向解码器是推理侧的白捡收益不增加标注、不改数据只多跑一次解码。五、如何开启 BidirDecoder一个参数搞定 训练时只需在命令里加上--BidirDecoder开关参数定义见 main.py官方训练脚本 train_MORAN.sh 已默认开启python main.py --train_nips 数据集路径 --train_cvpr 数据集路径 \ --valroot 验证集路径 --cuda --BidirDecoder开启后数据加载器会自动多返回一份反转标签tools/dataset.py无需手动处理官方演示脚本 demo.py 与推理封装 inference.py 均默认以BidirDecoderTrue构建模型配合demo.pth权重即可直接体验双向解码效果代价解码器参数约翻倍、推理需多跑一遍解码。由于编码器被共享总体开销很温和换来的是榜单上实打实的准确率提升非常划算。六、总结单向注意力解码器只见过去、不见未来早期误判会滚雪球BidirDecoder 让 MORAN v2 用正读 倒读两条解码通道互为校验推理时按平均置信度投票选出更可靠的答案一个参数即可开启不依赖额外标注在 CUTE80、IC15 等困难数据集上带来 4% 的提升这套编码器共享 双解码集成的思路是理解后续场景文本识别模型双向解码、多尺度投票的一个很好的起点。【免费下载链接】MORAN_v2MORAN: A Multi-Object Rectified Attention Network for Scene Text Recognition项目地址: https://gitcode.com/gh_mirrors/mo/MORAN_v2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考