1. 程式人生 > >Andrew NG 機器學習 筆記-week11-應用例項:圖片文字識別(Application Example:Photo OCR)

Andrew NG 機器學習 筆記-week11-應用例項:圖片文字識別(Application Example:Photo OCR)

1、問題描述和流程圖(Problem Description and Pipeline)

photo OCR:photo Optical Character Recognition

影象文字識別,要求從一張給定的圖片中識別文字。

這裡寫圖片描述

為了完成這樣的工作,需要採取如下步驟:

  1. 文字偵測(Test detection):將圖片上的文字與其他環境物件分離開來
  2. 字元切分(Character segmentation):將文字分割成一個個單一的字元
  3. 字元分類(Character classification):確定每一個字元是什麼

每一項任務可以由一個單獨的小隊來負責解決:

這裡寫圖片描述

2、滑動視窗(Sliding Windows)

滑動視窗是一項用來從影象中抽取物件的技術。

假使我們需要在一張圖片中識別行人,首先要做的是用許多固定尺寸的圖片來訓練一個能夠準確識別行人的模型。然後我們用之前訓練識別行人的模型時所採用的圖片尺寸在我們要進行 行人識別的圖片上進行剪裁,然後將剪裁得到的切片交給模型,讓模型判斷是否為行人,然後在圖片上滑動剪裁區域重新進行剪裁,將新剪裁的切片也交給模型進行判斷,如此迴圈直至將圖片全部檢測完。
檢測區域可能過小,無法檢測到進距離的人像。我們按比例放大剪裁區域,一新的尺寸對圖片進行剪裁,將每次剪裁到的圖片縮小至模型採納的尺寸,交給模型進行判斷,如此迴圈。

每次滑動視窗的大小是一個引數,成為步長(step size)或 步幅(stride ) ,每次移動一個畫素(步長為1),這樣通常表現很好但計算量太多,通常採用步長選擇4或8個畫素。

這裡寫圖片描述
這裡寫圖片描述

文字偵測

滑動視窗技術也被用於文字識別,先收集一些帶標籤的訓練集,正樣本表示影象中有文字的圖片,負樣本表示沒有文字,訓練完以後,我們就可以把他運用到新的影象中。

我們用一個較小的固定的比例來執行滑動視窗,如圖所示,白色區域表示文字檢測系統已經發現了文字。亮度表示模型輸出的概率值大小。

運用 展開器(expansion operator),對每一個白色的小點都擴充套件為一塊白色的區域。從數學上說,就是看每個畫素點是否在白色畫素塊的一定範圍內,如果在,就將其設為白色。

根據寬高比例,過濾掉瘦高的白塊。(認為單詞的長度通常比高度要大)。

這裡寫圖片描述

字元分割

訓練一個模型來完成字元分割,正樣本是可以分割的圖片,負樣本是不能分割的圖片。
模型訓練完後,我們仍然使用滑動視窗技術來進行字元的分割。

這裡寫圖片描述

字元分類

利用神經網路、支援向量機或者邏輯迴歸演算法訓練一個分類器即可。

3、獲取大量資料和人工資料(Getting Lots of Data and Artificial Data)

想要獲得一個比較高效的機器學習系統,一種最可靠的方式是 選擇一個低偏差的學習演算法,然後用一個巨大的訓練集來訓練它。

如何獲得那麼多的訓練資料呢?
在機器學習中有一個很棒的想法:人工資料合成(artificial data synthesis)
1. 白手起家,創造新的資料。
2. 已經有了一小部分帶標籤的訓練集,擴大它。

以字母識別為例
仿照想要識別的樣本,來設計帶標籤的樣本。
採集同一個字元的不同種字型,然後將這些字元應用某種模糊操作(變形、縮放、旋轉),並加上不同的隨機背景,這樣就有了一個關於字母C的樣本。

要合成這些看起來可靠的資料 還是要花點功夫的,為了使合成的資料接近真實資料。

通過使用合成的資料,我們實際上已經獲得了無限的訓練樣本。

這裡寫圖片描述

人工合成的第二種方法是對已有的樣本進行擴充。字母A來源於一個真實的樣本,我們可以取出A,進行人工扭曲或者人工變形,這樣就生成了A的16種新的樣本。用這種方法,可以把一個很小的 帶標籤訓練集 突然一下擴大 得到更多的訓練樣本 。

這裡寫圖片描述

另一個語音識別的例子。
給帶標籤的音訊樣本新增不同的背景聲音,來擴大樣本。

關於獲取更多的資料,要考慮:

  1. 確保模型是低偏差的(畫學習曲線)。增加特徵的數量或神經網路隱藏層的數量直到有一個低偏差。
  2. 考慮擴大10倍的訓練資料需要多長時間。

有關獲得更多資料的幾種方法:

  • 人工資料合成(artificial data synthesis)
  • 手工收集、標註資料(collect、label it yourself)
  • 眾包(crowd sourcing ,eg. Amozon Mechanical Turk)

4、上限分析:接下來做流程的哪部分( Ceiling Analysis_ What Part of the Pipeline to Work on Next)

在機器學習的應用中,我們通常需要通過幾個步驟才能進行最終的預測,我們如何能夠知道哪一部分最值得我們花時間和精力去改善呢?可以通過上限分析。

文字識別需要通過以下幾個步驟:

這裡寫圖片描述

流程圖中每一部分的輸出都是下一部分的輸入,上限分析中,我們選取一部分,手工提供100%正確的輸出結果,看應用的整體效果提升了多少。
假設我們的例子中總體效果為72%的正確率。
如果我們令文字偵測部分輸出結果為100%正確,發現系統的總體效果從72%提高到了89%。這意味著我們很可能會希望投入時間精力來提高我們的文字偵測部分。
接著我們手工選擇資料,讓字元切分輸出的結果是100%正確,發現系統的總體效果只提升了1%,這意味著,我們的字元切分部分可能已經足夠好了。
最後我們手工選擇資料,讓字元分類輸出的結果100%正確,系統的總體效果又提升了10%,這意味著我們也應該投入更多的時間和精力來提高應用的總體表現。