[筆記] 機器學習 應用實例 : Photo OCR
光學字符識別 Photo OCR ( photo optical character recognition )
- 目的 : 讓計算機讀出照片中拍到的文字信息
Machine Learning pipeline
Photo OCR 步驟 :
文字檢測 ( Text detection ) : 把圖像瀏覽一遍,找出哪裡有文字信息
字符分割 ( Character segmentation ) : 將區域內的文字信息分割成獨立字符
字符識別 ( Character recognition ) : 運行分類器辨識這些字符
較複雜的系統也許在最後會進行拼字校正
Sliding windows
- 一個可以滑動的視窗來檢測是否存在所需要的信息
滑動的距離稱為步長 ( step size ) 或步幅參數 ( stride parameter )
- 步長值越小,表現得越好,但計算量也比較大
因為照片有遠近的關係,所以視窗需要按比例放大來重複檢測照片
文字檢測 ( Text detection )
- 收集樣本訓練出可以識別字符區域 ( y = 1 ) 的機器
- 使用 Sliding windows 檢測照片
- 識別後 ( 白色區域為存在字符串 )
- 經過擴展器 ( expansion operator ) 處理
- 最後過濾掉較異常的區塊 ( 文字區域應該是矮又寬的 )
字符識別 ( Character recognition )
- 收集樣本訓練出可以識別字符間隔 ( y = 1 ) 的機器
- 使用 Sliding windows 檢測 ( 只須向右移動 )
人工數據合成 ( Artificial data synthesis )
- 目的為獲取大量的訓練資料,適用於擁有大量資料就能改進的低偏差算法
兩種方法來人工獲取新的資料,以 OCR 的字符辨識為例 :
重頭開始創造新的資料
- 隨機選取一個字體 ( 網路上有許多字體庫 )
- 貼到隨機的背景上
也許加些模糊操作、變形操作、錯切、縮放、旋轉…
將小的訓練集放大成為更大的訓練集
- 選取一個真實的訓練資料
加入人工扭曲,把一個真實的訓練資料變成多個新的訓練資料
並不適用於所有問題,為了應用於某個特定問題,需要一些想法與觀察
- 例如辨識語音,可以在背景上加入背景噪音來成為新的訓練資料
無意義的變形來新增訓練資料,對於訓練機器是沒有幫助的
- 例如在舊有的訓練資料加上隨機噪音
取得更多資料的討論 :
- 取得更多資料前先確認,擁有更多資料對算法會有所改善,對於低偏差算法會有改善
思考取得預計的資料量需要花多少時間,以下是能取得更多資料的方法
- 人工數據合成
- 自行收集資料與標記
- Crowd source ( 雇用別人來幫忙標記 )
上限分析 ( Ceiling analysis )
- 對 pipeline 上的每個模組,進行人工檢測,也就是以 100% 的準確率來執行每個模組
模組 | 準確率 |
---|---|
整個系統 | 72% |
文字檢測 100% | 89% |
文字檢測、字符分割都 100% | 90% |
文字檢測、字符分割、字符識別都 100% | 100% |
依照上面的假設數據來看
- 優良的文字檢測能改善系統 89 - 72 = 17%
- 優良的字符分割能改善系統 90 - 89 = 1%
- 優良的字符識別能改善系統 100 - 90 = 10%
這樣能了解到改善各個模組,系統的上升空間上限是多少,來決定要在哪個模組投注較多的資源與人力