Coursera-吳恩達-機器學習-(第11周筆記)應用例項:photo OCR
Week 11 ——Application Example: Photo OCR
目錄
影象OCR(Optical Character Recognition)
1-1 問題描述
在這一段介紹一種 機器學習的應用例項 照片OCR技術。 我想介紹這部分內容的原因 主要有以下三個
- 第一 我想向你展示 一個複雜的機器學習系統 是如何被組合起來的
- 第二 我想介紹一下 機器學習流水線(machine learning pipeline)的有關概念, 以及在決定下一步做什麼時, 如何分配資源。
- 最後,通過介紹照片OCR問題 的機會來告訴你, 機器學習的諸多 有意思的想法和理念 。其中之一是如何將機器學習 應用到計算機視覺問題中, 第二是有關 人工資料合成(artificial data synthesis)的概念。
OCR技術 主要解決的問題是讓計算機 讀出照片中拍到的文字資訊。
OCR pipeline的意思主要是把一個ML系統分割為幾個連續的部分,如下圖:
如果你有一個工程師的團隊 在完成同樣類似的任務, 那麼通常你可以讓 不同的人來完成 不同的模組 ,所以我可以假設 文字檢測這個模組 需要大概1到5個人 ,字元分割部分 需要另外1到5個人 ,字母識別部分 還需要另外1到5個人。
在複雜的機器學習系統中 流水線的概念 已經滲透到各種應用中
1-2 滑動窗(sliding windows)
為了更好地介紹 影象的檢測 ,我們從一個簡單一點的例子開始, 我們先看這個探測行人的例子:
在行人檢測中 你希望照一張相片 然後找出影象中 出現的行人
這個問題似乎 比文字檢測的問題更簡單, 原因是 大部分的 行人都比較相似, 因此可以使用一個固定寬高比的 矩形來分離出你希望找到的行人。
我們要做的是 首先對這個影象取一小塊長方形, 比如這是一個 82×36的影象塊, 我們將這個影象塊 ,通過我們訓練得到的分類器 來確定 這個影象塊中是不是有行人。 如果沒問題的話, 我們的分類器 應該報告這個影象塊 y=0 因為沒有行人 。
做完這以後 , 我們再向右滑動一點視窗 然後同樣地 把影象塊傳入分類器, 你每次滑動視窗的 大小是一個引數 ,通常被稱為 步長(step size) 。這樣一個滑動的過程就叫做:滑動窗(sliding windows)。
接下來我們轉向 文字識別的例子 ,讓我們來看看 對於照片 OCR 流水線中 要檢測出文字 需要怎樣的步驟 。
1 第一步通過滑動窗在影象中找出有字母的部分,然後把他變白方便下一步提取。
2 分割字母,使用滑動窗在上一部提取的畫素中提取分割的部分。
3 字母分類
1-3 獲取大量的圖片
人工合成數據
扭曲合成數據
Getting Lots of Data and Artificial Data獲取大量資料和人工合成數據。
要想獲得一個比較高效的 機器學習系統, 其中一種最可靠的辦法是 選擇一個低偏差的學習演算法 ,然後用一個巨大的訓練集來訓練它 。但你從哪兒得到那麼多的訓練資料呢? 其實在機器學習中 有一個很棒的想法 叫做“人工資料合成”(artificial data synthesis) 。 就是說用一個小的訓練集 將它擴充為一個 大的訓練集 ,這節課中 我們將對這兩種方法進行介紹 。
為了介紹人工資料合成的概念 讓我們還是用之前用過的 照片OCR流水線中 的字母識別問題, 我們輸入一個影象資料 然後想識別出是什麼字母 。
如果你想要獲得 更多的訓練樣本 ,其中一種方法是你可以 採集同一個字元的不同種字型 ,
然後將這些字元 加上不同的隨機背景。 比如你可以取這個字母C, 然後把它貼上到一個隨機背景前面
因此通過使用合成的資料 ,你實際上已經獲得了 無限的訓練樣本, 這就是人工資料合成 。
idea2: take an existing example and and introducing distortions通過引入扭曲合成數據
注意:網格線覆蓋影象只是為了說明的目的。
如果您面臨機器學習問題,通常值得做兩件事情:
其中一個就是頭腦清楚,通過學習曲線,可以得到更多的資料。
其次,假設情況如此,請問:要獲得十倍的創造資料將需要多少時間,但有時候,您可能會感到驚訝,原因可能是幾天,幾周甚至幾天 ,這可以是一個很好的方式來給你的學習演算法在效能上有巨大的提升。
1-4 分析
Ceiling Analysis:What Part of the Pipeline to Work on Next 上限分析-接下來工作重心應放在pipeline哪個部分。
上限分析的想法:通過經歷這樣的分析,你試圖找出什麼是上升的潛力,改善這些元件的每一個,或者如果這些元件中的一個變得絕對完美,那麼你可能獲得多少對該系統的效能提出了一個上限。
首先寫出總的專案精度為72%;然後手工把某一個模組設定為“全對”,看模型提升了多少,提升的多說明這個工作有用;提升的少,說明在這裡做工作沒什麼太大意義。
另外一個例子:Another more complex ceiling analysis example人臉識別。
看每一個小塊的提升對總的精度提升的大小。