字元識別 CRNN CTC

2021-10-21 23:35:55 字數 2799 閱讀 7431

文字檢測過程分兩步,第一步為檢測出文字所在的位置,第二步根據檢測框裡的內容進行文字識別。

第一部分文字檢測,這裡介紹了sast演算法:

一、背景知識

1、迴圈神經網路rnn

迴圈神經網路recurrent neural network與其他cnn網路不同之處在於rnn每一點的輸出依賴於之前的結果。rnn主要用來處理序列資料,如文字,語音等。對於這類資料,基於cnn的前饋神經網路會對每乙個輸入的特徵都訓練出乙個單獨的引數,從而不能很好的進行引數的共享。而rnn可以通過對不同時間點的特徵共享引數來更容易的進行訓練,泛化效果也更好。

設hi表示某曾隱藏層,該層的計算同時與上一層隱藏層有關,即為 

xt表示當前層的輸入,將上式展開有:

每乙個輸入xt都會生成對應的ht,ht之間相互以鏈式連線。可以將ht看做是輸入向量序列(x^t,x^t-1,...x^1)的一種有損表示。根據不同的需要,ht可以控制損失的精度。例如對一些語言模型,可能只有輸入附近的文字比較重要,就不需要儲存t之前的所有序列資訊。

例如有如下輸入語句:i want to play basketball。在cnn網路中,這五個單詞分別作為5個輸入輸入網路中得到五個分類輸出,彼此之間沒有干涉

但對於語言來說,分類輸出是沒有意義的。語言輸入彼此之間存在著某種聯絡,例如play詞後面一定會有乙個名詞來表示想要玩什麼。如果我們的網路想要翻譯或者識別一句完整的話,就需要知道每個單詞之前說了什麼,這樣才能**出下乙個詞想要表達的意思。

由此引出rnn結構,這種具有依賴性的網路結構,允許關鍵資訊持續存在。

同樣輸入一句話,i want to play basketball,這五個單詞是以時序出現的,將這五個單詞一次輸入到lsrm結構中。首先是i,它作為時序上第乙個出現的單詞被用作x0輸入,擁有乙個h0輸出,並且改變了神經元a0的權重。單詞want作為時序上第二個出現的單詞作為x1輸入,這時網路結構的h1輸出不僅僅是由h1和x1決定的,也將由上一時刻的神經元狀態a0共同決定的,即上文講到的

之後的情況以此類推,直到輸入的最後乙個單詞basketball。

下圖為簡單的rnn網路模型示意圖

y代表真實值,o代表輸出值,l代表損失值。總的損失值為各個l之和。這樣的網路模型雖然具有了各個網路層之間的依賴性,但也意味著計算方式只能是順序計算,而不能進行平行計算,訓練過程過於緩慢。

2、seq2seq模型

為了讓網路計算加快,可以讓網路損失一些普適性,去掉hidden units之間的迴圈鏈結,而是建立起前一時間點的真實值和當前hidden unit的鏈結,則當前hidden unit並不依賴於前一點的h計算值。這樣每個h的計算就可以並行進行了。當然y並不能完全代替h,所以這一方法加快了計算速度的同時降低了模型的普適性。這一方法叫做teacher forcing,模型結構如下

利用teacher focing,可使得模型結構為乙個向量序列作為輸入,輸出乙個序列,如將已經定位裁剪出的特徵影象作為輸入,得到描述該的輸出文字序列,這種結構如下

x作為向量輸入網路得到結果,這一過程稱為為decoder/reader。計算出x的過程為encoder,使用rnn將輸入序列轉化為乙個向量。這種模式稱之為encoder-decoder或稱作sequence-to-sequence結構。

但是這樣的結構有些問題,尤其是rnn實際機制中存在長梯度消失的問題。對於較長的句子,很難寄希望於將輸入的序列轉化為定長的向量而儲存所有的有效資訊。所以隨著識別句子長度增加,這種結構的效果會顯著下降。

3、lstm結構

lstm全稱long short term memory,是一種特殊的網路結構,能夠學會間隔較久的依賴關係。

通常情況下的rnn神經單元的結構是非常簡單的,每個模組重複的構成一條網路鏈

lstm也具有這種模式,但是重複的模組擁有不同的結構。與rnn簡單的一層相比,lstm擁有四層,這四層以特殊的形式進行互動,並選擇保留資訊傳到下一層。且在原有模式基礎上新增了c向量,課看作細胞鏈。細胞鏈的作用類似於傳送帶,模組的狀態在整個鏈上執行,只有一些小的線性操作作用在細胞鏈上。資訊很容易的保持不變的流過整個鏈。

lstm可以在較長句子中依然讓每個模組之間儲存依賴關係。

二、crnn應用講解

1、網路結構

crnn網路結構即為cnn+rnn+ctc,如下

損失函式ctc

參考

Shape Context字元識別

關於shape context的文章,網上已經很多了。在這裡實現一下shape context描述子的視覺化。include hogimage.h using namespace std using namespace hog hogimage oimg struct color color col...

OCR字元識別

ocr optical character recognition 全稱光學字元識別技術,在halcon中,ocr常被用來分割區域及讀取識別影象中的字元含義。字元識別ocr原理及應用實現 ocr指電子裝置 掃瞄器 數位相機等 檢測在紙上列印的字元,通過檢測暗亮的模式確定其形狀,然後用字元識別方法將形...

OCR光學字元識別

沒搞過計算機視覺,只好拿來主義了 根據網上的推薦 1.google vision,識別效果還不錯,收費,而且對於複雜文字也不是很理想,所以繼續尋找開源 2.tesseract,最負盛名的開源識別軟體,據說google vision內部也是基於此。就我們公司的需求來說 提取中嵌入的文字 tessera...