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