論文閱讀:Reading Text in the Wild with Convolutional Neural Networks

本文轉載自:

http://blog.csdn.net/u010167269/article/details/52337213


Preface

這篇 Paper: Reading Text in the Wild with Convolutional Neural Networks 產自大名鼎鼎的 VGG 實驗室,發表在 IJCV 上。

實驗步驟分爲兩部分,基於 region proposal mechanism 的檢測文字部分,以及基於 CNN 的文字識別部分。

在第一部分的 region proposal 部分,首先保證較高的 recall,儘量把所有可能的文字區域先檢測出來;然後經過一個 filtering 階段,保證文字檢測的精度。 
在第二部分的 word recognition 部分,不同於傳統的一個字母,一個字母的識別文字,再組合成單詞;本文采用 CNN 去一次性的識別出單詞。 
訓練單詞識別 CNN 網絡時,所用的數據是人工生成的,並不需要人工去從自然場景的數據去標註,所以有大量的標註數據用於訓練。

同時,我這篇文章重在這篇文章的理解,下一篇博文我會詳細的記錄、分析我對這篇文章的代碼實現。並且目前,我個人只對思路實現到 Bounding Box Regression 部分。Word Recognition 部分,我還未實現。 

Introduction

傳統的文檔識別 OCR 技術對於自然場景圖像,並不管用。由於自然場景文字的外形、排列布局都十分多變;更甚的,自然場景文字的光照條件的差異、遮擋、文字排列方向的多樣性、一些噪聲,這些都會對文字檢測識別造成巨大的干擾。所以傳統的文檔識別 OCR 技術對於自然場景圖像中的文字識別毫無作用。

一般的對於自然場景下的文字識別過程,分爲兩部分:文字區域的檢測(detection)+文字區域的識別(recognition)。

這篇文章對於文字識別有較大的突破與貢獻之一,即將整張圖像讀進 CNN 網絡,直接一次性的完成文字識別過程,而不像原先的分割成單個的字母識別,再組合成單詞。

因爲這篇文章創新性的將文字的 recognition ,轉變成爲 classification 問題。只不過分類的類別數非常非常多,是一個個的單詞,總共有 90K 個單詞。 
要完成這麼多類別的分類所需要的樣本數量是非常巨大的,所以文本採用的是人工生成訓練數據。即將單詞 粘貼到場景圖片上。

文本的另一點創新點在於:

  • 進行文字區域的 proposal 檢測時,所採用的方法是結合了 region proposal 以及 sliding window detector 。所以再第一步的 region proposal 的 recall 很高,在 ICDAR2003、Street View Text 數據集上均達到了 98% 的 recall;

  • 之後再採用 random forest 分類器去過濾掉非文字的 proposal;

  • 再經過一個創新性的 bounding box regression 過程,對剛剛過濾剩下的 proposal 進行 adjust調整檢測的窗口,使之儘可能的將文字區域框住。因爲文字區域如果不是完整,殘缺的,對於 recognition 過程將會極爲的不利。想象一下一個只有半部分的文字區域的 proposal,送進 recognition 的 CNN 網絡,基本很難識別(classification)正確。

文章在這部分還說,本文的另一個貢獻在於,本文提出的方法可以在大規模的視頻中進行文字的檢索。不過這部分並不是本文的核心,先按下不討論。 

Overview of the Approach

這部分介紹了本文提出的方法的流程:

  • word bounding box proposal generation
  • proposal filtering and adjustments
  • text recognition

具體的看方法的流程圖: 

這裏寫圖片描述

word bounding box proposal generation

更具體一點,在第一部分,先結合文獻 Edge boxes: Locating object proposals from edges 提出的 Edge Box Proposal 的方法,以及文獻 Fast Feature Pyramids for Object Detection 提出的 Aggregate channel features detector,先檢測出大量的文字區域的 candidate word bounding boxes;

下一步,由於上一步產生的 candidate word bounding boxes 有許多的錯檢測。因此,本文訓練一個 random forest classifier 去過濾掉錯檢測的 proposals;同時,這樣做也可以控制 bounding boxes 的數量。 

proposal filtering and adjustments

再下一步,受到 DPM(Felzenszwalb et al. 2010)R-CNN (Felzenszwalb et al. 2010) 中的 bounding box regression 的啓發,文本通過 bounding box regression 來進一步的提高 region proposals 與 ground truth 之間的 overlap。這樣在下一階段的 word recognition 部分會提高準確率。 

text recognition

再下一步,即 word recognition 部分。即從上一階段的 detection 產生的 proposals,去 recognition 出文字。

在 recognition 時,採用的是直接將整個 region of the word 輸入進 CNN 中,以分類的方式進行 recognition。

分類的類別超乎想象,90K 個單詞的分類。這麼多的類別,所需要的訓練樣本也是相當相當的多的;因此,本文采用的是 synthetic data,純自動生成的數據,這樣也解決了數據的 label 問題。

這一部分的最後,作者還提到,本文的 detection 與 recognition 部分並不是割裂開來的:在 word recognition 之後,還會根據 recognition 的信息,通過多輪的 non-maximal suppression 以及 bounding box regression update detection 部分。 

Proposal Generation

在檢測出的 bounding boxes 中,如果這個 bounding box 與 ground truth 之間的 overlap 面積大於設定的閾值 threshold,則定義其爲 true-positive detection

bounding box b1 與 bounding box b2 的 overlap 定義爲 交除並(intersection over union, IoU): 

IoU=|b1b2||b1b2|

儘管在本文之前,region proposal 還沒有用於文字檢測,但 region proposal 方法早已在物體檢測方面大放異彩。

region proposal 方法產生較高的 recall 的結果,但同時也產生了 false-positive detections;相比於 sliding window 的方法,region proposal 方法也大大大的節省了檢測時間。因此,region proposal 方法可以看作爲一種 weak detector .

在本文的 proposal 檢測階段,本文使用了兩種檢測算法

Edge Boxes

Edge Boxes 的想法比較簡單:

The key intuition behind Edge Boxes is that since objects are generally self contained, the number of contours wholly enclosed by a bounding box is indicative of the likelihood of the box containing an object.

圖像中的物體都是 self contained,那麼一個 bounding box 中包含的這種完全自閉合的邊界的數目,代表了這個 bounding box 包含物體的可能性。

這種 idea 用來檢測文字是可行的,因爲文字區域顯然是 self contained(自閉合)

本文用了文獻 Structured Forests for Fast Edge DetectionFast Edge Detection Using Structured Forests提出的 Structured Edge detector 來檢測得到 邊緣響應圖(Edge response map);同時,檢測出來的 boxes 都帶有一個 score:sb,代表了可能性的大小。 
之後,進行了 Non-Maximal Supression(非極大值抑制) 去除交叉面積太大的 boxes:對上面的每一個 boxes 按 score 的大小排序,進行非極大值抑制。

這個結果爲一集合: candidate bounding boxes Be 。 

Aggregate Channel Feature Detector

本文同時也使用了傳統的檢測算法:Aggregate Channel Features(ACF)

算法是傳統的 sliding window 的檢測方法,檢測 ACF 特徵,同時用一個 AdaBoost 分類器。

這部分的代碼我沒有調的通,也就不再深究了。總之,這部分的目的在於將 proposal 的方法與傳統的方法相結合。求兩種檢測算法檢測出的 bounding box 的並集(B={BeBd}),使得最後的 bounding box 的 recall 儘可能的高。

本文中,這兩種方法的結合,使得最後的 recall 達到了 98% 的水平。這樣使得文字儘可能的被檢測到,而不造成漏檢。至於錯檢,在下一步的 filter stage 會被過濾掉。 

Filtering and Refinement

這部分是對上一階段的文字檢測結果的精細化處理。上一階段,得到 region proposal 的集合:candidate bounding boxes,B。這裏麪包含了許多 false-positive 的 bounding boxes,要將其過濾掉,並做 finement。

這階段的處理分爲兩部分:

  • 一是過濾掉錯檢的 bounding boxes;
  • 二是通過 bounding box regression 對過濾後剩下的 bounding boxes 進行調整,以使其儘量的更完整的包含文字區域,以便在 recognition 階段正確識別單詞。 

Word Classification

那麼怎麼樣過濾掉 false-positive 的 bounding boxes 呢?

本文是先從自然場景圖像中的文字區域(需要 fixed 到固定的大小),提取 HOG 特徵;

再用 Random Forest 訓練出一個分類器,這個分類器我是用 ICDAR2011 訓練數據提供的 ground truth 作爲正樣本,自己再採集了 300 個負樣本。

用這個分類器來過濾掉 false-positive 的 bounding boxes。

流程圖如下: 

這裏寫圖片描述

最後得到正確的文字區域的 bounding boxes,Bf。這部分的詳細 Python 實現代碼,我會在下一篇博文給出分析。 

Bounding Box Regression

在檢測到的 bounding box 中,有一些特殊情況,雖然其也滿足與正確的文字區域之間的 overlap 大於等於 0.5,但卻很難被識別出來。看下圖: 

這裏寫圖片描述

上圖中的情形下,雖然 IoU 也大於等於 0.5,但由於文字區域不完全,所以在 recognition 階段很難被正確識別出來。

這是文字不同於一般的物體檢測的地方,文字檢測出的 bounding boxes 必須完整的覆蓋住文字,都則很難被準確識別。

因此,這時候,受到 R-CNN 的 bounding box regression 的啓發。本文通過訓練一個 CNN 網絡(regression framework)來調整 bounding boxes 的邊界,使之儘可能的覆蓋住文字區域。原理圖如下: 

這裏寫圖片描述

這個 bounding box regressor 輸入的是 bounding box;同時,在 ICDAR2011 數據集中,訓練數據中每張圖像也給了每一個 groundtruth 的座標以及內容。用左上角、右下角的座標來表示:b=(x1,y1,x2,y2),如對於下面的一張訓練圖像: 

這裏寫圖片描述

其 groundtruth 文件內容爲: 
這裏寫圖片描述

這裏的 ground truth 數據 (x1,y1,x2,y2),將被作爲訓練這個 bounding box regression CNN 的 label。這個 CNN 網絡的輸入即爲前面一系列處理之後剩下來的 bounding boxes(並已經做過了 width、height 方向上的 2 倍的拉伸,以及 fixed to 100×32 的大小)。

這個 CNN 網絡的目的就是在於:通過輸入的 bounding boxes,以及其 ground truth 的 label,訓練這個網絡,使得每個 bounding box 儘可能的 拉到 ground truth 的區域上。 

Postscript

接着上面,這樣的話,每個樣本的 label 就不是一個純量,而是 (x1,y1,x2,y2),對於這樣的標籤,其數據該如何組織,如何訓練?我在下一篇博文會詳細闡述。這篇博文重點在於文章的分析與理解。

先到 word detection 這部分吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章