天天看點

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

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

具體的看方法的流程圖:

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

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=|b1∩b2||b1∪b2|

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

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

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

  • 文獻 Edge boxes: Locating object proposals from edges 提出的 Edge Box region proposal 的方法;
  • 文獻 Fast Feature Pyramids for Object Detection 提出的 Aggregate channel features detector 方法

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 Detection、Fast 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={Be∪Bd} ),使得最後的 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。

流程圖如下:

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

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

Bounding Box Regression

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

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

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

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

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

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

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

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

其 groundtruth 檔案内容為:

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

這裡的 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 這部分吧。

繼續閱讀