Machine-Learning

什麼是聯結主義時間分類 (CTC)?

  • December 30, 2017

我正在尋找一個光學字符識別(OCR)項目。在做了一些研究之後,我發現了一個看起來很有趣的架構:CNN+RNN+CTC。我熟悉卷積神經網絡 (CNN) 和循環神經網絡 (RNN),但什麼是連接主義時間分類 (CTC)?我想要通俗易懂的解釋。

您有一個數據集,其中包含:

  • 圖像 I1、I2、…
  • 地面實況文本 T1、T2、… 用於圖像 I1、I2、…

所以你的數據集可能看起來像這樣:

在此處輸入圖像描述

神經網絡 (NN) 為圖像的每個可能的水平位置(在文獻中通常稱為時間步長t)輸出一個分數。對於寬度為 2(t0,t1)和 2 個可能的字符(“a”,“b”)的圖像,這看起來像這樣:

| t0 | t1 --+-----+---- a | 0.1 | 0.6 b | 0.9 | 0.4

要訓練這樣的 NN,您必須為每個圖像指定地面實況文本的字符在圖像中的位置。例如,考慮一個包含文本“Hello”的圖像。您現在必須指定“H”開始和結束的位置(例如,“H”從第 10 個像素開始,一直到第 25 個像素)。“e”, “l, … 這聽起來很無聊,對於大型數據集來說是一項艱鉅的工作。

即使您設法以這種方式註釋了完整的數據集,還有另一個問題。NN 在每個時間步輸出每個字符的分數,請參閱上面顯示的表格以獲取玩具示例。我們現在可以在每個時間步長中選取最有可能的字符,即玩具示例中的“b”和“a”。現在考慮一個更大的文本,例如“Hello”。如果作者的寫作風格在水平位置使用大量空間,則每個字符將佔用多個時間步長。取每個時間步最可能的字符,這可以給我們一個像“HHHHHHHHeeeellllllllloooo”這樣的文本。我們應該如何將此文本轉換為正確的輸出?刪除每個重複的字符?這會產生“Helo”,這是不正確的。所以,我們需要一些巧妙的後處理。

CTC 解決了這兩個問題:

  • 您可以從對 (I, T) 中訓練網絡,而無需使用 CTC 損失指定字符出現在哪個位置
  • 您不必對輸出進行後處理,因為 CTC 解碼器會將 NN 輸出轉換為最終文本

這是如何實現的?

  • 引入一個特殊字符(CTC-blank,在本文中表示為“-”)以表示在給定時間步沒有看到任何字符
  • 通過插入 CTC 空白並以所有可能的方式重複字符,將基本事實文本 T 修改為 T'
  • 我們知道圖像,我們知道文本,但我們不知道文本的位置。所以,讓我們嘗試文本“Hi—-”,“-Hi—”,“–Hi–”,…的所有可能位置
  • 我們也不知道每個字符在圖像中佔據多少空間。因此,讓我們通過允許字符重複來嘗試所有可能的對齊方式,例如“HHi—-”、“HHHi—”、“HHHHi–”…
  • 你看到這裡有問題嗎?當然,如果我們允許一個字符重複多次,我們如何處理真正的重複字符,比如“Hello”中的“l”?好吧,在這些情況之間總是插入一個空格,例如“Hel-lo”或“Heeellll——-llo”
  • 計算每個可能的 T' 的分數(即每個轉換和這些的每個組合),對所有分數求和,從而產生對 (I, T) 的損失
  • 解碼很簡單:選擇每個時間步得分最高的字符,例如“HHHHHH-eeeellll-lll–oo—”,丟棄重複字符“H-el-lo”,丟棄空白“Hello”,然後我們完成。

為了說明這一點,請看下圖。它是在語音識別的上下文中,但是,文本識別是一樣的。即使字符的對齊方式和位置不同,解碼也會為兩個說話者生成相同的文本。

在此處輸入圖像描述

進一步閱讀:

引用自:https://stats.stackexchange.com/questions/320868

comments powered by Disqus