1. 程式人生 > >機器學習應用例項(照片OCR)(斯坦福machine learning week 11)

機器學習應用例項(照片OCR)(斯坦福machine learning week 11)

NG說:

我想介紹這部分內容的原因主要有以下三個:
第一,我想向你展示一個複雜的機器學習系統是如何被組合起來的。
第二,我想介紹一下機器學習流水線(machine learning pipeline)的有關概念以及在決定下一步做什麼時如何分配資源。
最後,我也想通過介紹照片OCR問題的機會來告訴你機器學習的諸多有意思的想法和理念。其中之一是如何將機器學習應用到計算機視覺問題中,第二是有關人工資料合成(artificial data synthesis)的概念。

照片OCR是指照片光學字元識別(photo optical character recognition)

1. OCR的大概步驟

  • 1.文字識別技術(Text detection)
    首先使用文字識別技術(Text detection)將給定的圖片掃描一遍,找出這張圖片中哪裡有文字資訊:
    這裡寫圖片描述
  • 2.字元切分
    接下來就是重點關注這些文字區域,對這些文字區域的矩形輪廓進行字元切分。
    這裡寫圖片描述
    這裡寫圖片描述

其實有很多照片OCR系統會進行更為複雜的處理,比如在最後會進行拼寫校正。

2 機器學習流水線(machine learning pipeline)

這裡寫圖片描述
這幅圖表示的就是照片OCR的流水線。

2.1 滑動窗體步驟

  • 1.文字檢測
    滑動窗的第一個步驟是文字檢測(text detection)。
    這裡寫圖片描述

    這裡寫圖片描述
    為了建立一個行人檢測系統,以下是具體步驟:
    • 1.指定行人矩形比例
      假如說我們把寬高比標準化到82:36這樣一個比例。
    • 2.蒐集樣本
      接下來我們要做的就是到街上去收集一大堆正負訓練樣本。
    • 3.如果你能得到大規模訓練樣本的話,然後你要做的事是訓練一個神經網路或者別的什麼學習演算法,輸入這些82×36維的影象塊,然後對y進行分類,把影象塊分成”有行人”和”沒有行人”兩類。這裡寫圖片描述
      也就是:訓練一個分類器,然後用一個滑動窗分類器來找出影象中出現的行人。
  • OCR文字檢測
    跟行人檢測類似你也可以先收集一些帶標籤的訓練集:
    這裡寫圖片描述
    使用這些訓練集來訓練識別文字的分類器。
    -字元分割
    如果你還記得的話,你應該知道流水線的第二步是字元分割。所以給出下面這樣的影象我們應該怎樣分割出影象中的單個字元呢?
    這裡寫圖片描述

    同樣地,我們還是使用一種監督學習演算法,用一些是否存在字元之間的分割區域的正樣本和一些負樣本來訓練一個分類器。
    這裡寫圖片描述

3 獲取大量資料和人工資料

想要獲得一個高效的機器學習系統,我們通常需要在低偏差的演算法中代入大量的訓練資料。但是我們如何獲取大量的訓練資料呢?
其實在機器學習中有一個很棒的想法,叫做“人工資料合成”(artificial data synthesis)。

第一種,是我們白手起家來創造新的資料。
第二種,是我們通過擴大一個已經存在的帶標籤的小的訓練集,來獲得資料。

4 總結

注意:

  • 嘗試獲取更多資料之前,先優化好你的分類器
  • 嘗試和你的團隊溝通,頭腦風暴
  • “眾包” (crowd sourcing)–人工標記樣本
    另一種很好的辦法,我們稱之為“眾包” (crowd sourcing)的辦法。
    現在已經有一些網站,或者一些服務機構能讓你通過網路僱一些人替你完成標記大量訓練資料的工作。通常都很廉價。
    “亞馬遜土耳其機器人”(Amazon Mechanical Turk)就是當前最流行的一個眾包選擇。
  • 關於上限分析(ceiling analysis)的內容。這種方式通常能提供一種很有價值的訊號,告訴你流水線中的哪個部分最值得你花時間。
    當我們面對這樣一個流水線時,你應該怎樣分配資源呢?哪一個方框最值得你投入精力,投入時間去改善效果呢?
    這裡寫圖片描述
    這裡寫圖片描述
    我們可以看到,如果我們擁有完美的文字檢測模組,那麼整個系統的表現將會從準確率72%上升到89%,因此效果的增益是17%。這就意味著,如果你在現有系統的基礎上花費時間和精力改善文字檢測模組的效果,那麼系統的表現可能會提高17%。