優點
- 可以直接從序列標籤學習,不需要詳細的標註
- 具有直接從圖像數據學習信息表現的DCNN的相同性質,既不需要手工特徵也不需要預處理步驟,包括實體化/分割,組件定位等;
- 具有 RNN 相同的性質,能夠產生一系列標籤
- 對類序列對象的長度無約束,只需要在訓練階段和測試階段對高度進行歸一化
- 比標準 DCNN 模型包含的參數要少的多,佔用更少的存儲空間
特徵序列提取
-
縮放到相同的高度
-
從卷積層產生的feature map中提取特徵向量序列,作爲循環層的輸入
特徵序列的每一個特徵向量在特徵圖上按列從左到右生成,第i個特徵向量是所有特徵圖第i列的連接,論文中設置每列的寬度爲單個像素
特徵圖上的每列對應與原始圖像的一個矩形區域(感受野),並且這些矩形區域與特徵圖上從左到右的相應列具有相同的順序。特徵序列中的每個向量關聯一個感受野,並且可以被認爲是該區域的圖像描述。
序列標註
循環層的優點
- RNN 具有很強的捕獲序列內上下文信息的能力。對於基於圖像的序列識別使用上下文提示比獨立處理每個符號更穩定且更有幫助。一些模糊的字符在其觀察其上下文時更容易區分
- RNN 可以將誤差差值反向傳播到其輸入(卷積層),從而允許在統一的網絡中共同訓練循環層和卷積層
- RNN 能夠從頭到尾對任意長度的序列進行操作
轉錄
轉錄就是 RNN 對每個像素的預測轉換爲標籤序列的過程。有兩種模式,包括無詞典轉錄和基於詞典的轉錄。
標籤序列的概率
採用 CTC 中定義的條件概率,按照每個時刻的預測 對標籤序列 定義概率,不用管每個標籤在 中的位置。
條件概率如下:輸入是一個序列 , 是序列長度,每一個 都是在集合 上的概率分佈,其中 包含了任務中的所有標籤。一個序列到序列的映射函數 定義在序列 上,其中 是長度。 將 映射到 上,首先刪除重複的標籤,然後刪除空格。例如 把 "–hh-e-l-ll-oo–"(’-'代表空格)映射到 “hello”。條件概率定義爲由 映射到 上的所有 的概率之和:
的概率定義爲 ,其中 是時刻 有標籤 的概率。
這裏的時刻可以對應到像素, 就是從BLSTM的輸出,對每個像素列的預測。 就是標註的標籤序列,每一個便是一個字符串,比如“hello”。
無字典轉錄
在這種模式下,將公式 中具有最高概率的序列 作爲預測。由於不存在找到精確解的可行方法,可以通過 近似發現,即在每個時刻 採用最大概率的標籤 ,並將結果序列映射到 。
基於字典的轉錄
在基於字典的模式中,每個測試採樣與詞典 相關聯,通過選擇詞典中公式 中最高概率的序列來識別標籤序列即 。然而,對於大型詞典,對詞典進行詳盡的搜索是非常耗時的,即對詞典中的所有序列計算公式 ,並選擇概率最高的一個。爲了解決這個問題,我們觀察到,通過無詞典轉錄預測的標籤序列通常在編輯距離度量下接近於實際結果。這表示我們可以將搜索限制在最近鄰候選目標 ,其中是最大編輯距離, 是在無詞典模式下從 轉錄的序列:
可以使用BK樹數據結構有效地找到候選目標,這是一種專門適用於離散度量空間的度量樹。BK樹的搜索時間複雜度爲,其中是詞典大小。因此,這個方案很容易擴展到非常大的詞典。在我們的方法中,一個詞典離線構造一個BK樹。然後,我們使用樹執行快速在線搜索,通過查找具有小於或等於編輯距離來查詢序列。
網絡配置
Lua代碼:https://github.com/bgshih/crnn
TensorFlow代碼:https://github.com/MaybeShewill-CV/CRNN_Tensorflow
CRNN論文翻譯:https://blog.csdn.net/Quincuntial/article/details/77679419