筆記 - 機器學習 應用實例 - Photo OCR

[筆記] 機器學習 應用實例 : Photo OCR

  • 光學字符識別 Photo OCR ( photo optical character recognition )

    • 目的 : 讓計算機讀出照片中拍到的文字信息

Machine Learning pipeline

  • Photo OCR 步驟 :

    1. 文字檢測 ( Text detection ) : 把圖像瀏覽一遍,找出哪裡有文字信息

    2. 字符分割 ( Character segmentation ) : 將區域內的文字信息分割成獨立字符

    3. 字符識別 ( Character recognition ) : 運行分類器辨識這些字符

    4. 較複雜的系統也許在最後會進行拼字校正

Sliding windows

  • 一個可以滑動的視窗來檢測是否存在所需要的信息
  • 滑動的距離稱為步長 ( step size ) 或步幅參數 ( stride parameter )

    • 步長值越小,表現得越好,但計算量也比較大
  • 因為照片有遠近的關係,所以視窗需要按比例放大來重複檢測照片

文字檢測 ( Text detection )

  1. 收集樣本訓練出可以識別字符區域 ( y = 1 ) 的機器
  2. 使用 Sliding windows 檢測照片

  1. 識別後 ( 白色區域為存在字符串 )

  1. 經過擴展器 ( expansion operator ) 處理
  2. 最後過濾掉較異常的區塊 ( 文字區域應該是矮又寬的 )

字符識別 ( Character recognition )

  1. 收集樣本訓練出可以識別字符間隔 ( y = 1 ) 的機器
  2. 使用 Sliding windows 檢測 ( 只須向右移動 )

人工數據合成 ( Artificial data synthesis )

  • 目的為獲取大量的訓練資料,適用於擁有大量資料就能改進的低偏差算法
  • 兩種方法來人工獲取新的資料,以 OCR 的字符辨識為例 :

    1. 重頭開始創造新的資料

      • 隨機選取一個字體 ( 網路上有許多字體庫 )
      • 貼到隨機的背景上
      • 也許加些模糊操作、變形操作、錯切、縮放、旋轉…

    2. 將小的訓練集放大成為更大的訓練集

      • 選取一個真實的訓練資料
      • 加入人工扭曲,把一個真實的訓練資料變成多個新的訓練資料

  • 並不適用於所有問題,為了應用於某個特定問題,需要一些想法與觀察

    • 例如辨識語音,可以在背景上加入背景噪音來成為新的訓練資料
  • 無意義的變形來新增訓練資料,對於訓練機器是沒有幫助的

    • 例如在舊有的訓練資料加上隨機噪音
  • 取得更多資料的討論 :

    1. 取得更多資料前先確認,擁有更多資料對算法會有所改善,對於低偏差算法會有改善
    2. 思考取得預計的資料量需要花多少時間,以下是能取得更多資料的方法

      • 人工數據合成
      • 自行收集資料與標記
      • Crowd source ( 雇用別人來幫忙標記 )

上限分析 ( Ceiling analysis )

  • 對 pipeline 上的每個模組,進行人工檢測,也就是以 100% 的準確率來執行每個模組
模組 準確率
整個系統 72%
文字檢測 100% 89%
文字檢測、字符分割都 100% 90%
文字檢測、字符分割、字符識別都 100% 100%
  • 依照上面的假設數據來看

    • 優良的文字檢測能改善系統 89 - 72 = 17%
    • 優良的字符分割能改善系統 90 - 89 = 1%
    • 優良的字符識別能改善系統 100 - 90 = 10%
  • 這樣能了解到改善各個模組,系統的上升空間上限是多少,來決定要在哪個模組投注較多的資源與人力

tags: 筆記 機器學習 Machine Learning pipeline Sliding windows 人工數據合成 上限分析
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2019/09/25/Machine-learning-photo-OCR/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.