您當前的位置:首頁 > 繪畫

文字識別中CTC損失的直覺解釋

作者:由 AI演算法與影象處理 發表于 繪畫時間:2019-10-15

編輯:zero

關注 蒐羅最好玩的計算機視覺論文和應用,AI演算法與影象處理

微信公眾號

,獲得第一手計算機視覺相關資訊

本文轉載自:公眾號:AI公園

作者:Harald Scheidl

編譯:ronghuaiyang

導讀

非常直觀的解釋了文字識別中非常常用的CTC損失和解碼的操作。

文字識別中CTC損失的直覺解釋

如果你想讓計算機識別文字,神經網路(NN)是一個不錯的選擇,因為它們目前的表現優於所有其他方法。這裡的神經網路通常由

卷積層(CNN)

遞迴層(RNN)

組成,前者用於提取特徵序列,後者用於透過該序列傳遞資訊。它輸出每個序列元素的字元得分,它只需要用一個

矩陣

來表示。現在,我們想對這個矩陣做兩件事:

訓練:計算神經網路的損失來訓練網路

推斷:解碼矩陣,得到包含在輸入影象中的文字

這兩項任務都由

CTC操作

完成。手寫識別系統概述如圖1所示。

讓我們更仔細地看看

CTC操作

,並討論它是如何工作的,剖析一下它所基於的複雜公式背後的巧妙思想。最後,如果你感興趣,我會給你一些參考資料,你可以在其中找到Python程式碼和(不太複雜的)公式。

文字識別中CTC損失的直覺解釋

圖1:手寫字識別的概要圖

我們為什麼要用CTC

當然,我們可以用文字行影象建立一個數據集,然後為影象的每個水平位置指定相應的字元,如圖2所示。然後,我們可以訓練一個神經網路輸出每個水平位置的字元得分。然而,這種解決方案有兩個問題:

在字元級標註資料集非常耗時(而且枯燥)。

我們只得到字元分數,因此需要進一步處理才能得到最終文字。一個字元可以跨越多個水平位置,例如,我們可以得到“ttooo”,因為“o”是一個寬字元,如圖2所示。我們必須刪除所有重複的“t”和“o”。但如果被認可的文字是“too”呢?刪除所有重複的“o”會得到錯誤的結果。如何處理這個問題?

文字識別中CTC損失的直覺解釋

圖2:影象中每個水平位置的標註

我們只需要告訴CTC loss函式影象中出現的文字。因此,我們忽略了影象中字元的位置和寬度。

不需要對已識別的文字進行進一步處理。

CTC如何工作

正如已經討論過的,我們不希望在每個水平位置上對影象進行標註(從現在開始,我們將其稱為

time-step

)。神經網路的訓練將以CTC損失函式為指導。我們只將神經網路的輸出矩陣和相應的ground-truth(GT)文字輸入到CTC損失函式中。但是它如何知道每個字元出現在哪裡呢?它不知道。相反,它嘗試影象中GT文字的所有可能的對齊,並對所有的得分求和。這樣,如果對齊分數的求和值很高,則GT文字的分數就很高。

文字編碼

還有一個問題是如何編碼重複的字元(還記得我們說過的“too”嗎?),它透過引入一個偽字元(稱為blank,但不要將它與“真正的”blank混淆,即空白字元)來解決。在下面的文字中,這個特殊字元將被表示為“-”。我們使用一個聰明的編碼模式來解決重複字元的問題:在編碼文字時,我們可以在任何位置插入任意多的空格,而在解碼時這些空格將被刪除。但是,我們必須在重複的字元之間插入空格,比如“he

ll

o”。此外,我們可以重複每個字元,只要我們喜歡。

我們來看一些例子:

“to”→“ttttttooo”,或“-t-o”,或“to”

“too”- >“ttttto - o”或“- t - o - o”,或“- o”,但不能是“too”

正如你所看到的,這個模式還允許我們輕鬆地建立相同文字的不同對齊,

例如“t-o”和“too”以及“-to”都表示相同的文字(“to”),但是對影象的對齊不同。該神經網路被訓練成輸出編碼文字(編碼在神經網路輸出矩陣中)。

損失的計算

我們需要計算給定對影象和GT文字的損失值來訓練神經網路。你已經知道,NN在每個時間步長輸出一個矩陣,其中包含每個字元的得分。一個極小矩陣如圖3所示:有兩個時間步長(t0, t1)和三個字元(“A”,“b”和空白“-”)。每個時間步的字元得分總和為1。

文字識別中CTC損失的直覺解釋

圖3:神經網路的輸出矩陣。字元機率用顏色編碼,數值在每個矩陣條目旁邊列印。細線是表示文字“a”的路徑,而粗虛線是表示文字“”的唯一路徑。

此外,你已經知道損失的計算方法是將GT文字的所有可能對齊的所有得分相加,這樣,文字在影象中出現的位置就不重要了。

一個對齊(或

path

,通常在文獻中稱為

path

)的得分是透過將相應的字元得分相乘來計算的。在上面的例子中,路徑“aa”的得分為0。4·0。4=0。16,路徑“a-”的得分為0。4·0。6=0。24,路徑“a”的得分為0。6·0。4=0。24。為了得到給定GT文字的分數,我們對與此文字對應的所有路徑的分數求和。假設示例中的GT文字是“a”:我們必須計算長度為2的所有可能路徑(因為矩陣有2個時間步長),即:“aa”、“a-”和“a-”。我們已經計算了這些路徑的得分,所以我們只需要對它們求和,得到0。4·0。4+0。4·0。6+0。6·0。4=0。64。假設GT文字為“”,我們看到只有一條對應的路徑,即“——”,得到總分0。6·0。6=0。36。

如果你仔細看,你會發現我們計算的是GT文字的機率,而不是損失。然而,損失只是機率的負對數。損失值透過神經網路反向傳播,神經網路的引數根據所使用的最佳化器進行更新,在此不再贅述。

解碼

當我們有一個訓練過的神經網路時,我們通常想要用它來識別以前沒有見過的影象中的文字。或者用更專業的術語來說>我們希望計算給定神經網路輸出矩陣的最有可能的文字。你已經知道了計算給定文字得分的方法。但這一次,我們沒有得到任何文字,事實上,這正是我們要找的文字。如果只有幾個時間步驟和字元,那麼嘗試所有可能的文字都是可行的,但是對於實際的情況下,這是不可行的。

一個簡單而快速的演算法是

最佳路徑解碼

,它包括兩個步驟:

它透過在每個時間步中選擇最可能的字元來計算最佳路徑。

它首先刪除重複的字元,然後從路徑中刪除所有空格,從而撤消編碼。剩下的表示已識別的文字。

如圖4所示。字元是“a”、“b”和“-”(空白)。有5個時間步驟。讓我們對這個矩陣應用我們最好的路徑解碼器:t0最可能的字元是“a”,同樣適用於t1和t2。空白字元在t3處得分最高。最後,“b”最有可能出現在t4。這給出了路徑aaa-b。我們刪除重複的字元,這將生成“a-b”,然後從剩餘的路徑中刪除任何空白,這將生成文字“ab”,我們將其輸出為可識別的文字。

文字識別中CTC損失的直覺解釋

圖4:神經網路的輸出矩陣,粗虛線表示最佳路徑。

當然,最佳路徑解碼只是一種近似。對於它給出錯誤結果的例子很容易構造:如果你從圖3中解碼矩陣,你將得到“”作為可識別的文字。但是我們已經知道“”的機率只有0。36而“a”的機率是0。64。然而,這種近似演算法在實際應用中往往能得到較好的結果。還有一些更高階的譯碼器,如beam-search解碼器、prefix-search解碼器和令牌傳遞譯碼器,它們也利用語言結構的資訊來改進解碼結果。

總結

首先,我們研究了神經網路解決方案所產生的問題。然後,我們看到CTC是如何解決這些問題的。然後,我們透過研究CTC如何編碼文字、如何進行損失計算以及如何解碼CTC訓練的神經網路的輸出來研究CTC的工作原理。

這將使你可以很好地理解在TensorFlow中呼叫ctc_loss或ctc_greedy_decoder等函式時,幕後發生了什麼。然而,當你想要自己實現CTC時,你需要了解更多的細節,尤其是想使它執行得更快。Graves等人[1]介紹了CTC運算,並給出了所有相關的數學計算。如果你對如何改進解碼感興趣,請參閱有關beam-search解碼的文章。我用Python和c++實現了一些解碼器和損失函式,你可以在github上找到。最後,如果你想了解如何識別(手寫)文字的全域性,請參閱我關於如何構建手寫文字識別系統的文章。

其他參考資料:

https://www。

cs。toronto。edu/~graves/

icml_2006。pdf

https://

towardsdatascience。com/

5a889a3d85a7

https://

towardsdatascience。com/

b051d28f3d2e

githubharald/CTCDecoder

githubharald/CTCWordBeamSearch

https://

towardsdatascience。com/

build-a-handwritten-text-recognition-system-using-tensorflow-2326a3487cd5

文字識別中CTC損失的直覺解釋

翻譯原文連結:

文字識別中CTC損失的直覺解釋

英文原文連結:

https://

towardsdatascience。com/

intuitively-understanding-connectionist-temporal-classification-3797e43a86c

文字識別中CTC損失的直覺解釋

翻譯和整理不易,希望大家能用你們發財的小手,點個贊支援哈~

歡迎關注:辛苦翻譯的小夥伴

AI公園

和辛勤的搬運工

AI演算法與影象處理

關注 蒐羅最好玩的計算機視覺論文和應用,AI演算法與影象處理

微信公眾號

,獲得第一手計算機視覺相關資訊

文字識別中CTC損失的直覺解釋

標簽: 文字  字元  CTC  神經網路  我們