<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          OCR文字識別—基于CTC/Attention/ACE的三大解碼算法

          共 3900字,需瀏覽 8分鐘

           ·

          2022-02-09 17:36

          歡迎關(guān)注Smarter,構(gòu)建CV世界觀

          本文全面梳理一下OCR文字識別三種解碼算法,先介紹一下什么是OCR文字識別,然后介紹一下常用的特征提取方法CRNN,最后介紹3種常用的解碼算法CTC/Attention/ACE。

          什么是OCR文字識別?

          一般來說,文字識別之前需要先對文字進行定位(文字檢測主要有基于物體檢測和基于分割兩種方法),文字識別就是通過輸入文字圖片,然后解碼成文字的方法。本文主要講文字識別部分,文字識別主要分成三種類型:單字分類、整詞分類和整詞識別。當能夠定位出單字時,可以用圖像分類的方法直接對單字進行分類;當需要預(yù)測整詞數(shù)量較少時,可以對整詞進行分類;當有大量整詞需要預(yù)測并且沒有單字定位時,就需要用解碼序列的方法進行識別了。因此,文字識別中最常用的是文字序列識別,適用場景更為廣泛。本文將主要介紹文字序列識別的解碼算法。

          OCR解碼是文字識別中最為核心的問題。本文主要對OCR的序列方法CTC、Attention、ACE進行介紹,微信OCR算法就是參考這三種解碼算法的。

          不同的解碼算法的特征提取器可以共用,后面接上不同的解碼算法就可以實現(xiàn)文字識別了,以下用CRNN作為特征提取器。

          CRNN

          CRNN的特征抽取器由一個CNN和一個BiLSTM組成,其中BiLSTM使用的是stack形深層雙向LSTM結(jié)構(gòu)。

          CRNN特征提取器流程如下:

          1.假設(shè)輸入圖像尺寸為32x100x3(HxWxC),經(jīng)過CNN轉(zhuǎn)換成1x25x512(HxWxC)。

          2.將CNN的輸出維度轉(zhuǎn)換為25個1x512的序列,送入深層雙向LSTM中,得到CRNN的輸出特征,維度轉(zhuǎn)換成為25xn(n是字符集合總數(shù))。


          OCR文字識別的難點

          OCR文字識別的解碼主要難點在于如何進行輸入輸出的對齊。如上圖所示,如果每個1xn預(yù)測一個字符,那么可能會出現(xiàn)多個1xn預(yù)測同一個字符,這樣子得到的最終結(jié)果會產(chǎn)生重復字符。所以需要設(shè)計針對文字識別的解碼算法來解決輸入輸出的對齊問題。

          目前我了解到的主要有三種解碼方法,可以解決OCR解碼的一對多問題,分別為CTC、Attention和ACE三種。

          CTC

          CTC是最為經(jīng)典的OCR解碼算法,假設(shè)CRNN特征抽取器的輸出維度Txn,其中T=8,n包含blank(記作 - )字符(blank字符是間隔符,意思是前后字符不連續(xù))。對每一列1xn進行softmax得到概率最大的字符,得到的最終序列需要去除連續(xù)的重復字符,比如最終得到的序列為-stt-ate,那么去重合并后就得到state序列。

          那么state的序列概率就變成了所有去重合并后為state的字符序列概率之和,只要最大化字符序列概率,就可以優(yōu)化CRNN+CTC的文字識別算法。由于每個字符前后都可以插入blank,所以可以將所有可能狀態(tài)如下圖展開。

          為了方便起見,對于所有state序列的合法路徑做一些限制,規(guī)則如下:

          1.轉(zhuǎn)換只能往右下方向,其它方向不允許

          2.相同的字符之間起碼要有一個空字符

          3.非空字符不能被跳過

          4.起點必須從前兩個字符開始

          5.終點必須落在結(jié)尾兩個字符

          根據(jù)上述約束規(guī)則,遍歷所有"state"序列的合法路徑,“state”的所有合法路徑如下圖所示:

          其中綠色框部分為起點和終點,藍色箭頭為"state"序列的合法路徑。當然可以通過枚舉所有路徑,然后求所有路徑的概率之和即為"state"序列的概率。但是枚舉所有路徑計算復雜度太高了,于是CTC引入了HMM的前向-后向算法來減少計算復雜度(可以參考一下我之前的回答,增加隱馬爾可夫模型(HMM)的理解如何用簡單易懂的例子解釋隱馬爾可夫模型?)。

          以前向算法為例(后向算法可以認為是狀態(tài)序列的反轉(zhuǎn),計算方法相同),簡單來說,就是利用分治和動態(tài)規(guī)劃的思想,把8個時間點拆分成7個重復單元,然后先計算出第一個重復單元紅色虛線框中每個狀態(tài)的觀測概率,并且保存下來當作下一個重復單元的初始狀態(tài),循環(huán)計算7次就得了最終的觀測概率。比起暴力求解觀測概率,復雜度大大降低。

          Attention

          基于Attention的OCR解碼算法,把OCR文字識別當成文字翻譯任務(wù),即通過Attention Decoder出文字序列。

          RNN -> Seq2Seq

          左圖是經(jīng)典的RNN結(jié)構(gòu),右圖是Seq2Seq結(jié)構(gòu)。RNN的輸入序列和輸出序列必須有相同的時間長度,而機器翻譯以及文字識別任務(wù)都是輸入輸出不對齊的,不能直接使用RNN結(jié)構(gòu)進行解碼。于是在Seq2Seq結(jié)構(gòu)中,將輸入序列進行Encoder編碼成一個統(tǒng)一的語義向量Context,然后送入Decoder中一個一個解碼出輸出序列。在Decoder解碼過程中,第一個輸入字符為,然后不斷將前一個時刻的輸出作為下一個時刻的輸入,循環(huán)解碼,直到輸出字符為止。

          Seq2Seq -> Attention Decoder

          Seq2Seq把所有的輸入序列都編碼成一個統(tǒng)一的語義向量Context,然后再由Decoder解碼。由于context包含原始序列中的所有信息,它的長度就成了限制模型性能的瓶頸。如機器翻譯問題,當要翻譯的句子較長時,一個Context可能存不下那么多信息,就會造成精度的下降。除此之外,如果按照上述方式實現(xiàn),只用到了編碼器的最后一個隱藏層狀態(tài),信息利用率低下。

          所以如果要改進Seq2Seq結(jié)構(gòu),最好的切入角度就是:利用Encoder所有隱藏層狀態(tài)解決Context長度限制問題。于是Attention Decoder在Seq2Seq的基礎(chǔ)上,增加了一個Attention Layer,如上圖所示。

          在Decoder時,每個時刻的解碼狀態(tài)跟Encoder的所有隱藏層狀態(tài)進行cross-attention計算,cross-attention將當前解碼的隱藏層狀態(tài)和encoder的所有隱藏層狀態(tài)做相關(guān)性計算,然后對encoder的所有隱藏層加權(quán)求和,最后和當前解碼的隱藏層狀態(tài)concat得到最終的狀態(tài)。這里的cross-attention計算方式也為后來的Transformer框架打下了基礎(chǔ)(詳細看我之前寫的文章計算機視覺"新"范式: Transformer)。

          另外,從形式上看,Attention Decoder很自然的可以替換成最近非常流行的Transformer,事實上,最近也有幾篇基于Vision Transformer的文本識別算法。

          ACE

          基于ACE的解碼方法不同于CTC和Attention,ACE的監(jiān)督信號實際上是一種弱監(jiān)督(輸入輸出沒有做形式上的對齊,沒有先后順序信息,傾向于學習表征),并且可以用于多行文字識別。

          對于單行文字,假設(shè)輸出維度為Txn(T是序列長度,n是字符集合總數(shù)),那么第k個字符出現(xiàn)的總數(shù)為,然后除以T,就能得到第k個字符出現(xiàn)的概率分布(記作),做相同計算,可以求出所有字符的概率分布,最后和label字符的概率分布計算交叉熵優(yōu)化網(wǎng)絡(luò)。同理,對于多行文字,只需要將HxW壓縮成T=HW,然后計算所有字符的概率分布即可。

          CTC/Attention/ACE三種解碼算法比較

          從模型設(shè)計上來看,可以采用結(jié)合上面3種方法的多任務(wù)文本識別模型。在訓練時,以CTC為主,Attention Decoder和ACE輔助訓練。在預(yù)測時,考慮到速度和性能,只采用CTC進行解碼預(yù)測。多任務(wù)可以提高模型的泛化性,同時如果對預(yù)測時間要求不高,多結(jié)果也可以提供更多的選擇和對比。

          上圖來源于微信OCR技術(shù)的比較:

          1.CTC和ACE方法不需要額外的計算參數(shù),Attention需要額外的計算參數(shù)

          2.推理內(nèi)存,ACE < CTC < Attention;推理速度,ACE > CTC > Attention

          3.CTC效果更好一些,適合長文本;Attention可以得到語言模型;ACE可以用于計數(shù)和2D預(yù)測

          由于Attention依賴于上一個預(yù)測結(jié)果,導致只能串行解碼,推理速度影響較大,但是可以得到語言模型做pretrain遷移使用;而CTC可以通過引入blank字符做形式上對齊,并且通過HMM前向-后向算法加速;ACE則直接不依賴順序信息,直接估計整體分布。三者各有利弊,實際使用時,需要結(jié)合具體任務(wù)按需使用。


          Reference

          [1] An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

          [2] Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks

          [3] Robust Scene Text Recognition with Automatic Rectification

          [4] Aggregation Cross-Entropy for Sequence Recognition

          [5] mp.weixin.qq.com/s/6IGX


          強烈推薦以下三篇blog

          一文讀懂CRNN+CTC文字識別

          完全解析RNN, Seq2Seq, Attention注意力機制

          xiaodu.io/ctc-explained


          歡迎關(guān)注Smarter,構(gòu)建CV世界觀

          歡迎加入Smarter交流群,添加微信「cjy094617」,備注「學校-方向」即可

          瀏覽 16
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久热国产视频 | 欧美一级日韩一级 | 秋霞福利网 | 黄片视频在线 | AV网站免费在线观看 |