1. 程式人生 > >Stanford機器學習---第十四講.機器學習應用舉例之Photo OCR

Stanford機器學習---第十四講.機器學習應用舉例之Photo OCR

的系列文章進行學習。

不過博主的部落格只寫到“第十講 資料降維” http://blog.csdn.net/abcjennifer/article/details/8002329,後面還有三講,內容比較偏應用,分別是異常檢測、大資料機器學習、photo OCR。為了學習的完整性,我將把後續三講的內容補充上來,寫作方法借鑑博主Rachel Zhang

本欄目(Machine learning)包括單引數的線性迴歸、多引數的線性迴歸、Octave Tutorial、Logistic Regression、Regularization、神經網路、機器學習系統設計、SVM(Support Vector Machines 支援向量機)、聚類、降維、異常檢測、大規模機器學習等章節。內容大多來自Standford公開課machine learning中Andrew老師的講解和其他書籍的借鑑。(

https://class.coursera.org/ml/class/index

第十講. 機器學習應用舉例之——Photo OCR

=============================

(一)、Photo OCR Pipeline

(二)、滑動窗 Sliding Window

(三)、人造資料 Artificial Data

(四)、Ceiling Analysis

=====================================

(一)、Photo OCR Pipeline

演算法流程

Image ----> Text Detection

---->Character Segmentation ---->Character Recognition

有些還會有Spelling Correction,比如下圖中當把“Clean”中的字母“l”識別成數字“1”時,可通過單詞上下文糾正回來。

=====================================

(二)、滑動窗 Sliding Window

一、滑動窗概念

滑動窗是一種遍歷影象從而獲取正負樣本的方法。可根據正樣本的size,來選取不同尺度的滑動窗,如下圖:


二、Text Detection

1、訓練階段

通過滑動窗,可獲取如下圖所示的Text Detection演算法訓練所需的正負樣本。當滑動窗所取樣本正中間位置是某個字元,就認為是正樣本,否則為負樣本。

2、測試階段

如下圖

首先,用滑動窗遍歷影象,並用上面訓練的classifer對滑動窗所選的樣本進行二分類,會得到左下角的confidence map,每個畫素的灰度值大小描述了該畫素是字元的可能性/概率/confidence。但這並非我們要的輸出,我們要輸出的是表示字元邊界的bounding box。

然後,為了得到上述bounding box,用到一個操作叫做expansion,擴張。目的是為了把斷續的單個字串聯起來便於畫bounding box,如右下圖所示。舉例一個簡單的策略是,對於左下圖每個白色的畫素,將其周圍5或10個pixel範圍內的pixel全都染成白色。

最後,如右下圖所示,將每個連通域標一個bounding box出來,規則是高度和寬度符合一行字元的大小,比如最下面兩個case因為太窄而被去掉,最終輸出三個box。


三、Character Segmentation

用滑動窗(只需要在一個維度上進行滑動)對上面輸出的detection結果進行遍歷,如下圖所示,滑動窗中間可做字元分割的為正樣本,否則為負樣本。


四、Character Recognition

這個理解起來很簡單,就不詳述了。

=====================================

)、人造資料 Artificial Data

增加資料量是在模型具有low bias的前提下繼續提高模型效能的一個有效方法。

增加資料量的辦法:一是讓人去標註更多的資料,二是產生一些人造資料。

人造資料又有兩種生成方式,一是前景背景合成法,二是資料畸變擾動。

一、前景背景合成法

如下圖所示,左邊是真實資料,右邊是由背景和前景合成的資料。所謂背景前景合成法,指的是拿真實的字元前景和真實的非字元背景,貼合在一起,就生成一個假資料。這個假資料看起來和左邊的真資料並無太大差異,完全可以參與模型訓練。

二、資料畸變擾動

如下圖所示,對原始真實資料做一些類似旋轉、縮放等畸變變換,增加資料擾動,也可以生成一些資料。這樣做不僅可以增大資料量,而且可以讓模型具有例如旋轉不變的魯棒性,從而對資料畸變具有很強的適應性。

一定要注意一點,所增加的資料擾動型別,一定要是測試資料中存在的,如果只是加一些隨機的無意義的噪聲,對模型效能的提高並無幫助。比如,測試資料中並沒有字元上下或左右倒置的case,如果硬是人造出一些這樣的訓練資料做正樣本,勢必會讓模型感到困惑confused(如果負樣本中恰好有長得像倒置的字元的)。

=====================================

)、Ceiling Analysis

Ceiling Analysis不知道該怎麼翻譯,天花板分析?或者可以直觀地將其等同於最優分析,即找到這件事情的最好情況,你就可以知道現在這種條件下能達到的上限。如果對上限滿意,那麼就優化當前的方案,逼近上限;如果對上限都不滿意,那就不用在當前的方案上浪費時間了,另謀他路。

我們可以用Ceiling Analysis這種方法分析Photo OCR pipeline裡的各個模組,發現系統的短板,以決定接下來做什麼。下面說說Ceiling Analysis的分析思路,如下圖所示。

首先要知道,每個模組都有自身的準確率,這個準確率是獨立的,與其他模組無關

當前整個系統的輸出準確率是72%

1、首先,確保text detection模組100%的準確率,即該模組的輸出就是ground truth。這時測試系統的準確率,即在最優的text detection模型的前提下,系統可以達到的準確率上限,為89%,上漲17%。說明當前的text detection模組效能還有較大的提升空間。

2、然後,確保character segmentation模組100%的準確率,同上。在最優的text detection模型character segmentation模型的前提下,系統可以達到的準確率上限,為90%,僅上漲1%。說明當前的character segmentation模型就算優化到100%的準確率,也只對系統準確率造成1%的影響,可見系統短板並不在這裡。

3、最後,確保character recognition模組100%的準確率,同上。當所有模組都輸出ground truth時,系統輸出準確率自然達到100%,上漲10%. 這說明當前的character recognition模型的效能也有著一定的提升空間。

分析完畢,那麼接下來的工作,在text detectioncharacter recognition這兩個模組上下工夫就好了。