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老師的講解和其他書籍的借鑑。(
第十四講. 機器學習應用舉例之——Photo OCR
=============================
(一)、Photo OCR Pipeline
(二)、滑動窗 Sliding Window
(三)、人造資料 Artificial Data
(四)、Ceiling Analysis
=====================================
(一)、Photo OCR Pipeline
演算法流程:
Image ----> Text Detection
有些還會有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 detection和character recognition這兩個模組上下工夫就好了。