留个笔记自用
SEED: Semantics Enhanced Encoder-Decoder Framework for Scene Text Recognition
做什么
Text Recognition文字识别,抽取出图片中存在的文字
做了什么
主要解决的问题是一些图片存在模糊、倾斜等低质量情况
一般的解决Text Recognition的方法有三种,第一种就是普通的编码器-解码器框架,C就是文本信息。第二种是基于注意力的encoder-decoder。第三种是结合了全局语义信息的encoder-decoder,也是本文的基础框架模型。
首先是encoder部分,用于提取图片的视觉特征,由CNN等组成
然后是语义模型部分(Semantic Module)根据feature预测特征也就是图片的语义信息
然后是Attention部分,这部分和基于注意力的encoder-decoder一样,比较常见
然后是Pre-trained Model部分,生成word embedding,监督预测的语义信息
然后是Decoder部分,根据Attention的局部信息和语义的全局信息预测最后的结果
接下来需要提前了解几个结构
首先是ASTER结构,出自论文ASTER: An attentional scene text recognizer with flexible rectification,主要用处在于矫正图片由倾斜成平行图,这部分未看论文,看的是另外一个博主的解析
论文阅读(XiangBai——【PAMI2018】ASTER_An Attentional Scene Text Recognizer with Flexible Rectification )
Localization Network输入为源图像,结构是一个普通卷积网络,输出为控制点的位置
Grid Generator的输入是已有的Control point点集 + 矫正后的图(还未生成,但给定图大小可以取点)上的某个点坐标,输出是该点在矫正前(原图)上的点坐标位置
Sampler输入是原图 + 矫正后的图上的点在原图上的对应位置关系, 输出是矫正后的图,用到了样条插值
然后是第二个结构BiLSTM,这个就很常见了
简单来说就是正向LSTM和反向LSTM的结合,这里图中的上部分LSTML输入的序列为“我”、“爱”、“中国”,下面的LSTMR输入的序列为“中国”、“爱”、“我“,双向结果拼接在一起得到最后的结果
然后是文本分类模型FastText,这个就很好理解了
怎么做
整体结构分为四个模块,矫正模块、encoder模块、语义分析模块、decoder模块
首先是矫正模块,这部分输入图像为原图,输出图像为矫正文字为水平位置的结果图,这里论文说使用的矫正模块与 ASTER: An attentional scene text recognizer with flexible rectification这篇论文的模块完全相同。
然后是第二部分,encoder模块
输入为矫正图,输出为一个特征序列,这里先采用resnet生成第一步feature,然后再经过BiLSTM即双向LSTM,上面有提及。
然后是第三部分,语义信息模块,首先先将特征序列h flatten成一个一维向量,然后经过两层linear层即FC层得到语义信息S
这里的W1和W2和b1和b2均为参数,σ为激活函数Relu
然后是最后一部分decoder部分,这部分的输入有语义信息模块的语义信息S和encoder模块的特征序列h,首先S经过一个线性变化转换维度后作为GRU的初始化,而h作为它的常规输入,这样就是在全局语义信息的初始化下附带上局部信息。输出即为最终需要的单词
然后是LOSS部分
首先是语义信息的LOSS,这里的S即为语义信息,em即为word embedding,这里采用的是Pre-trained的FastText
然后是总LOSS
这个简单的LOSS由Lres和Lsem组成,后者即为语义信息的LOSS,前者res LOSS即是cross-entropy LOSS,是最后的输出单词和GT之间的LOSS
总结
1.这篇文章作者的意思是现在大部分的Text Recognition都是基于局部特征的,于是加了个全局语义特征作为监督方式,而至于歪斜之类的解决方法则是由ASTER矫正
2.语义监督部分用了fasttext监督,防止出现单词不在词库的情况,以解决单词遮挡等问题,确实这种语义方式有些许启发性,可以使用到图片分类、模型重建等存在遮挡的领域