周翔宇,高仲合
曲阜師范大學 軟件學院,山東 曲阜273100
隨著近幾年深度學習技術的發展,神經網絡應用到光學字符識別(OCR)[1]中的場景日益增多。文本區域定位是OCR 中至關重要的一步,利用目標檢測[2-3]算法能夠在一定程度上有效且快速地定位到文本區域。
在過去的幾年,隨著深度學習[4-6]技術的發展,已經提出了一些可以用于自然場景文本定位的目標檢測技術。Ren、Girshick 等[7-9]提出的Faster R-CNN 將特征提取、proposal 提取、Bounding Box Regression、Clas‐sification 整合到一個網絡中,目標檢測速度有了很大的提升。Redmon等[10]提出的YOLO檢測算法,是繼RCNN、fast-RCNN 和faster-RCNN 之后,針對目標檢測速度問題提出的另外一種框架,擁有非常快的檢測速度,截至目前是主要的檢測框架之一。Liu 等[11]在ECCV 2016上提出了SSD目標檢測算法,該算法從YOLO中繼承了將detection 轉化為regression 的思路。研究表明,利用YOLO、SSD、Faster-RCNN 等目標檢測算法能夠在一定程度上有效且快速地定位到文本區域,但仍存在定位精度差,文本區域貼合不緊密等問題。此類算法只能檢測出水平或傾斜角度很小的文本行,對于傾斜的文本行定位效果較差。在實際的應用場景中,由于拍攝條件的復雜性,拍攝圖片質量容易受到拍攝角度的影響,文本區域往往并非是水平分布,而是具有多角度[12-15]的,因此使用基礎的目標檢測算法不能適用于實際的業務場景。
本文基于YOLO 目標檢測算法進行改進,提出了一種能夠根據文本傾斜角度來進行定位檢測YOLO_BOX算法。該算法通過定義多個尺度的小型文本框對文本行進行覆蓋,然后通過聚類算法實現文本行的區域連通并使用非極大值抑制算法過濾掉多余的文本框,將連通得到的文本區域再通過計算不同傾斜角度的灰度值方差來進行小范圍的傾斜角度修正,從而最終實現對傾斜的文本行進行有效檢測的目的。實驗結果表明,在自然場景文本定位中,相比于YOLO、SSD、Faster-RCNN 等目標檢測算法,YOLO_BOX 算法具有更好的準確率與召回率。
YOLO 目標檢測模型用于文本區域檢測只能夠實現水平方向的文本區域檢測,這取決于YOLO的預測項為中心點的坐標和目標的高度、寬度信息。這樣的網絡輸出會導致按照預測結果對圖像進行目標標注的結果為水平的矩形框,定位效果對于普通的目標檢測尚可接受,但不適用于傾斜的文本框,比如近鄰的多行文本通過水平的矩形框來表示,會造成不同文本行的定位結果與其他行的結果存在區域重疊。針對YOLO 算法存在的不能有效定位傾斜文本的問題,提出了一種解決傾斜角度的文本識別方法,能夠實現對多角度傾斜的文本進行貼合度更好的文本區域目標定位。
算法通過兩個步驟進行實現對傾斜文本的定位。一是修改YOLO算法的預測輸出,通過預定義多個尺度的小型窗口,預測輸出窗口的坐標及尺寸,使用多個預測的窗口輸出對文本區域進行覆蓋;二是定義一個小范圍的角度區間,通過遍歷在此區間內覆蓋出的文本行旋轉何種角度能更好地貼合文本框,從而實現在小范圍內對傾斜文本行的定位效果進行更高精度的矯正。傾斜文本定位處理流程如圖1所示。

圖1 傾斜文本定位處理流程
YOLO(You Only Look Once)是一種基于深度學習的目標檢測算法,目前已經發展到YOLOv3[16-17],YO‐LOv3是目前為止性能最好的YOLO 系列的目標檢測模型。YOLO 的思想是直接對輸入圖像中的目標位置和目標類別進行回歸預測,這使得YOLO具有更快的檢測速度。在YOLOv3中,通過使用層數更多的卷積神經網絡Darknet-53 來獲得擬合度更好的分類效果,Darknet-53 中的卷積層主要包括兩種尺寸的卷積核,分別為1×1和3×3,利用不同的卷積核提取圖像特征,引入了殘差單元[18-19]用于解決深層網絡訓練時的訓練退化問題,并分別在每個卷積層后接一個歸一化層和LeakyRelu 層,與YOLO v2[20]使用的darknet-19 網絡相比較,在精度和速度方面有了提升,與ResNet-101[21]、ResNet-152[22]的速度更快,所以可以在保證精度的情況下,顯著提升檢測速度。其網絡結構如圖2所示。

圖2 Darknet-53網絡結構
YOLO 算法通過錨點窗口預測出待檢測目標的邊界框。對于文本區域檢測的應用場景,YOLO 算法會讀入歸一化后的圖像,然后將該圖像進行網格劃分,若待檢測文字區域的中心位于某個劃分好的網格內,則對應的網格用于識別該目標。由于文本區域檢測的只有文本一種類型,因此YOLO 預測待檢測目標邊框的輸出項只需要包括( x,y ,w,h )四項,其中( x,y )用來表示預測文本框的中心點在圖像中的坐標,w 和h 分別表示預測文本框的寬和高。對預測出的文本區域邊框利用非極大值抑制算法進行過濾,輸出最終的預測文本區域結果。
針對YOLO 算法對于傾斜文本定位效果不佳,提出一種基于YOLO 方法的YOLO_BOX 定位模型。該模型分為三個步驟:首先采用分治法的思想,將YOLO 不容易定位到的傾斜文本框進行拆分,通過使用預定義多個尺度的小型box 對文本區域進行覆蓋,即box 預測。然后對多個小型box 進行K-means[23-24]聚類操作,對K-means聚類結果進行最小外接矩形的繪制,利用NMS方法去除掉多余的預測文本目標邊框并進行角度矯正,即box 聚類。最后,利用Angle Correct算法對上一步中聚類后的文本進行小范圍傾斜角度矯正,得到最終文本區域的定位位置。
2.2.1 box預測
YOLO_BOX 定位模型使用分治的思想將傾斜文本框分割成多個不同尺度的box,首先通過OpenCV 讀入圖片,然后設置不同尺寸的box進行訓練。
輸入S×S的文本圖像后,不同于YOLO 算法的是,YOLO_BOX 算法為了適應不同角度的文本行,規定每個網格負責預測n個寬度極小,高度不同的小型box,包括( x,y ,w,h )和confidence以及類別t,從而使預測box 覆蓋整個多角度文本區域。設置預測的n個box的寬度固定為8,高度為分別設置為11、18、31、59、124、351、509、605、800 的9 種不同高度,分別分配到改進的多尺度網絡結構中,以檢測出文本高度不一致的各個文本行,因此可以覆蓋多種高度的文本行。

輸出本文框使用一個長度為5 的元組( x,y ,w,h,c)進行表示。其中( x,y )表示小型box 的中心點坐標,h 表示輸出窗口的高度,其取值為預定義的不同高度box 中的某一項,w 表示box 的寬度,本身設置為8 像素,c表示置信度,obj表示輸出box所屬類型,計算公式如下所示:由于本文提出的算法是用來進行文本區域定位,所以t 的取值為text或者none。即當有文本在box中時,該box 的置信度c 為這個預測的box 和實際的文本區域面積的IOU值。YOLO_BOX使用向量v=( vx, vy,vh,vw,vobj)來表示真實的窗口位置,使用向量來表示訓練過程中的預測窗口位置,相應地,窗口預測模型的損失函數如下:

其中:

smooth 函數為平滑處理函數,作用為將損失函數轉化為凸函數,用來在訓練過程中使用梯度下降求得最優解。
訓練后得到的窗口預測結果,顯示為寬度固定高度不同的多個小型窗口,如圖3所示。
2.2.2 box聚類

圖3 box預測
為了實現將分散分布的小型box 連通成整塊的文本行,YOLO_BOX 定位模型對預測的box 進行聚類。YOLO_BOX 算法改變了YOLO 算法中僅是將預測的bounding box 直接聚類的方法,而是將預測box 聚類之后求得聚類區域的最小外接矩形。YOLO_BOX 定位模型中的box 聚類可以解決傳統區域連通方法中難以設定固定的閾值進行像素擴展、對傾斜文本區域定位不適用等問題,能更加靈活地適用于不同像素尺寸的文本行。
YOLO_BOX 定位模型使用K-means 算法進行聚類,使用非極大值抑制算法(NMS)對聚類后的結果進行后處理。K-means 是一個基于距離進行聚類的算法,即聚類的目標之間的距離越小則認為其相似度越高。box預測輸出的本文框的表示方式為( )x,y,w,obj。卷積神經網絡具有平移不變性的性質,box 的位置被網格固定,因此只需要計算出box的寬和高。標簽文件中的w、h計算出的box 的寬度和高度都是相對于整張圖片的比例,而YOLO 通過box 直接預測文本邊界框的坐標時,坐標是相對于柵格邊長的比例(0 到1 之間),因此要將box 的寬和高轉換為相對于柵格邊長的比例,轉換公式如下:

其中,wd、hd分別表示預定義box 的寬和高,wi、hi分別表示輸入圖像的寬和高,dsr 表示網絡的下采樣率。Kmeans 直接使用歐氏距離測度會受到不同尺寸文本框的影響,因此使用自定義的距離計算公式:

聚類的目標是同一簇中的距離越小越好,而IOU值越高越好,因此使用1-IOU 能夠保證距離越小,對應的IOU值越大。IOU指面積交疊率,其計算公式如下:

其中,分子表示實際目標與預測目標交集的面積,分母表示實際目標與預測目標并集的面積,比值即為IOU值。
對于同一行的文本,通常文本行的高度也是相似的,不存在預測出覆蓋同一行的文本窗口高度值具有大幅度差異,因此可以近似地認為判定為同屬于同一行文本的小型窗口尺度相似。然后指定聚類的簇的個數,即K 值,本文指定K=4,經多次實驗測定,在ICDAR2015數據集上使用該值能在模型復雜程度和模型召回率之間取得良好的權衡。
最后在聚類后通過調用OpenCV 中的非極大值抑制算法,對聚類結果進行過濾。文本使用非極大值抑制算法(NMS)對YOLO_BOX 模型聚類后的結果進行后處理,用于過濾掉多余的文本框預測輸出。
在使用YOLO_BOX 進行文本區域定位后,預測輸出的每個文本框會得到相應的置信度得分。非極大值抑制算法能夠在有效去除冗余的文本框。計算步驟如下:
(1)將YOLO_BOX 的預測文本框按照置信度降序排序,選取置信度最高的文本框作為NMS 當前抑制的文本框。
(2)計算當前文本框與其他候選文本框之間的IOU 值。
(3)對計算出的IOU 值與設定的閾值進行比較,若設定的IOU 值大于設定的閾值a則刪除該文本框,反之則保留該文本框。
(4)對按照置信度排序的文本框依次進行步驟(2)、步驟(3)。
(5)算法結束后取置信度高于閾值b的文本框作為最終的輸出,最終的定位結果如圖4所示。
2.2.3 Angle Correct算法

圖4 NMS輸出結果
針對上一步的過濾后的定位結果仍可能存在標注文本框與實際文本區域貼合仍不夠緊密的問題,增加了對聚類后的文本框進行最優角度矯正的步驟,提出了Angle Correct 算法。即對上一步中聚類后的文本進行小范圍傾斜角度矯正算法,用來進一步提升傾斜文本框的定位精度。
Angle Correct 算法首先將過濾后的文本框使用OpenCV 進行灰度化處理,然后計算出該文本框內所有像素點灰度值的均值和方差。如果文本框的標注角度與實際文本的傾斜角度一致,則計算得出的均值方差取得最小值,由此設計角度矯正算法如下:
算法1 小范圍傾斜角度矯正算法
輸入:文本框定位結果textImg,矯正范圍angle
輸出:文字傾斜估計角度textAngle
1.textImg=cvtColor(textImg,COLOR_RGB2GRAY)#灰度化
2.angles=range(-angle,angle)#生成指定范圍角度數組
3.estimates=[]#定義空列表,用于存儲(均值方差,角度)的數據
4.for angle in angles:#遍歷不同角度
5.roest=textImg.rotate(angle)#將圖片旋轉固定角度6.v=np.mean(roest,axis=1)#計算灰度值均值
7.v=np.var(v)#計算方差
8.estimates.append((v,angle))#將計算結果追加到列表中
9.textAngle=min(estimates)#從列表中取出方差最小對應的角度
得到textAngle即為需要調整的角度取值。
Angle Correct算法時間復雜度分析:設定需要矯正的角度區間為[ -n,n],由于步驟1~9 中只有一個for 循環,所以算法需要的計算次數為2n+1,因此Angle Cor‐rect算法的時間復雜度為O(n)。
Angle Correct 算法圖示如圖5 所示,矯正后的文本框如圖6所示。

圖5 Angle Correct算法圖示

圖6 矯正后的文本框
針對YOLO 算法直接應用在自然場景下的文本檢測中僅能使用水平文本框進行位置描述,在傾斜文本檢測中精度不理想這一問題,提出了一種基于YOLO方法的YOLO_BOX 定位模型,利用分治思想將原算法中水平矩形預測框難以覆蓋的傾斜文本行進行小尺度的細分使其覆蓋整個文本,并將原算法中采用的水平預測框直接聚類優化為求各小尺度預測框的最小外接舉行來聚類連通,提出Angle Correct 算法,增加了對聚類后的文本框進行最優角度矯正的步驟,最終得到一個與傾斜文本貼合緊密的文本框。
YOLO_BOX模型的目標識別流程如圖7所示。
本次實驗訓練模型采用的數據集為ICDAR2015 自然場景文字數據集,針對文本區域定位模型訓練進行圖像扭曲、加噪等操作進行樣本擴展,為了驗證本文提出的YOLO_BOX 模型的定位效果,也在ICDAR2013數據集上進行了結果測試,并與相關算法進行了性能對比。
本文實驗硬件方面使用NVIDIA GeForce GTX 1080ti用于計算加速,軟件方面使用Keras 進行改進后的YOLO_BOX文本區域定位模型訓練。
3.1.1 格式轉換
I CDAR2015 數據集的格式為(x1,y1,x2,y2,x3,y3,x4,y4)...,而表示預測輸出的小型窗口需要格式的是(x,y,...,w,h)因此需要對數據集進行格式調整,其轉換規則如下

圖7 YOLO_BOX模型的目標識別流程圖

ICDAR2015 數據集使用的是COCO 數據格式,通過上述公式變換可得到VOC 格式數據,并通過預設定的窗口尺度進行圖像分割,更加便于訓練出小型窗口定位模型。本文實驗中設定最小分割寬度為8,高度設定為多個尺度,分別為(8,9),(8,18),(8,31),(8,59),(8,124),(8,351),(8,509),(8,605),(8,800)。
3.1.2 數據擴展
為避免訓練過程中出現過擬合的問題,本次實驗擴充樣本使用對圖像加噪、調整圖像的亮度及對比度的方式來進行數據擴充,由于加噪,調整圖像亮度及對比度的圖像處理操作并沒有改變圖像本身的結構,因此在訓練文本定位步驟用到的樣本中和圖像對應的標簽文件可以直接復用。原圖像示例與擴充后的圖像如圖8所示。

圖8 原圖像示例與擴充的圖像樣本示例
對比圖8(a)和圖8(b),可知經過擴充后的圖像樣本中,文本區域的坐標位置并沒有發生變化,只需要在調整圖像寫入新的文件時使標簽文件能夠和圖片文件的文件名一一對應即可,如圖9所示。

圖9 圖像標注樣本示例
為了適應不同像素尺寸的文本,設置寬度為8,高度為11、18、31、59、124、351、509、605、800 多種不同高度的box,用于檢測出文本高度不一致的各個文本行。多種尺度的box 幾乎可以覆蓋所有情況下的文本行。設置多種尺度的box 的檢測結果示意圖如圖10 所示。通過設置寬度固定且較小,高度不同的box,可以對同一張圖片中不同高度的傾斜文本區域使用高度相近的box進行覆蓋,如果設置單一高度的box 或box 的高度類型較少,則會存在無法檢測到超出box 高度的文本區域的問題,實驗最終結果無法有效檢測到數據集中的所有文本區域,如圖10(a)所示。通過設置與數據集中字符高度相近的不同大小的多種不同高度的box,對于字體較大的文本區域,使用高度設定較大的box 進行覆蓋,對于字體較小的文本區域,則使用高度設定較小的box 進行覆蓋,因此可以覆蓋數據集中所有的文本區域,實驗最終結果可以更加準確地檢測到數據集中的文本,如圖10(b)所示。

圖10 檢測結果示意圖
本文涉及到的類型包括Text 和None,其實是表示只有Text 一類,增加None 是因為單一類別訓練沒有意義,如果只訓練一個分類,yolov3無法收斂。
訓練設置迭代次數為150,批次大小為32,學習率為0.001。在訓練過程中打印輸出loss 函數的值,并通過loss 函數來判斷模型是否收斂。當train_loss和val_loss的值都在不斷的下降則表明模型正在學習,損失函數的值下降到一定程度則會到達瓶頸,此時保存訓練的模型并終止訓練。YOLO_BOX 模型的loss 訓練曲線對比如圖11所示。由曲線橫軸可以看出,YOLO_BOX模型在訓練80輪左右收斂,由曲線縱軸可以看出,YOLO_BOX模型在訓練過程中的損失整體較低,因此,YOLO_BOX模型具有較好的泛化性能。

圖11 loss訓練曲線
文本區域定位問題的本質是一個待檢測目標為文本信息的目標檢測的特例,因此可以通過評估目標檢測模型的評價指標召回率Recall、準確率Precision、F 值(F-measure)來評價文本區域定位的性能。指標計算方法依賴如下四個變量的定義:
TP(True Positives)為測試圖片中的文本區域被正確分類為text的個數。
TN(True Negatives)為測試圖片中的非文本區域被正確分類為none的個數。
FP(False Positives)為測試圖片中的非文本區域被錯誤分類為text的個數。
FN(False Negatives)為測試圖片中的文本區域被錯誤分類為none的個數。
由上述四個變量可分別計算出準確率Precision、召回率Recall和F 值(F-measure)三個性能評估指標,計算公式如下:

文本區域定位的問題可以看作是一個二分類問題,即文本框屬于文本區域或者是背景區域。使用準確率和召回率評估識別結果能有效體現出文本區域定位是否正確定位,而F 值的計算方式能有效權衡準確率和召回率,這三個指標是目標檢測算法中常用的評估方式。
經實驗驗證,對比文獻[17]中YOLO 目標檢測算法、文獻[11]中SSD 目標檢測算法、文獻[7]中Faster-RCNN 目標檢測算法,在傾斜文本數據集上定位效果提升明顯。基于ICDAR2015數據集驗證結果如表1所示。

表1 基于ICDAR2015數據集實驗結果對比
表1 為本文提出的YOLO_BOX 算法與其他目標檢測算法在ICDAR2015 數據集上的測試性能對比。YOLO_BOX算法的準確率(Precision)為73.3%,比YOLO、SSD和Faster-RCNN分別提高了19.1%、15.8%和10.2%;召回率(Recall)為71.0%,比YOLO、SSD和Faster-RCNN分別提高了32.8%、27.4%和31.3%。主要原因是YOLO_BOX算法優化形成了更貼合多角度文本的候選框,而YOLO、SSD、Faster-RCNN 使用水平矩形框進行描述文本區域,對于多角度文本貼合度欠佳。
為驗證本文提出算法的普適性,實驗也在ICDAR2013數據集上進行了驗證對比,對比結果表2所示。

表2 基于ICDAR2013數據集實驗結果對比
表2 為本文提出的YOLO_BOX 算法與其他目標檢測算法在ICDAR2013 數據集上的測試性能對比。YOLO_BOX 算法的準確率(Precision)為86%,召回率(Recall)為77%,F值(F-measure)為81%,比YOLO、SSD和Faster-RCNN 分別提高了12%、13%和12%。主要原因是ICDAR2013 數據集水平方向的文本區域檢測難度較低,因此測試取得的成績要比ICDAR2015 數據集上更好一些。
文本定位結果表明,改進的YOLO_BOX算法可以產生于傾斜文本貼合度較好的文本框,未改進前的YOLO算法和YOLO_BOX 算法的定位效果對比如圖12 所示。未改進的YOLO 算法通過bounding box 預測會產生尺度較大的水平候選box,然后將水平候選box 進行聚類與非極大值抑制得到一個連通的水平文本框,在對圖片中的傾斜文本進行定位時,會產生文本區域重疊的情況,導致檢測效果不準確,如圖12(a)所示。改進的YO‐LO_BOX 定位模型通過box 預測步驟產生寬度相同高度不同的多種小尺度候選box,然后通過box 聚類將小尺度box 進行聚類與非極大值抑制后會得到一個連通的傾斜文本框,最后利用Angle Correct 算法進行小范圍傾斜角度矯正,得到一個與文本較為貼合的傾斜文本框,在對圖片中的傾斜文本進行定位時,可以有效避免YOLO 算法定位結果會出現的文本區域重疊的情況,提高文本檢測的準確度,如圖12(b)所示。在自然場景圖片中的文本區域很難恰巧是水平方向的,因此改進的YOLO_BOX算法具有更多的應用場景。

圖12 未改進的YOLO算法與YOLO_BOX算法定位結果比較
文本區域定位技術是應用在光學字符識別中的重要組成部分,近幾年,隨著計算機視覺領域的飛速發展,文本識別獲得了越來越多的關注與研究。本文將改進的YOLO算法應用到文本區域定位中,提出一種YOLO_BOX 定位模型,將文本劃分成小型box 并聚類連通,然后通過提出的Angle Correct 算法進行小范圍傾斜角度調整,并最終形成一個與目標文本貼合準確的文本框。通過實驗表明,基于YOLO 方法的YOLO_BOX 定位模型在準確率(Precision)上比YOLO、SSD和Faster-RCNN分別提高了19.1%、15.8%和10.2%,更適用于自然場景中的多角度文本定位。YOLO_BOX 定位模型在一些較為模糊且非常小的文本定位時還需要進一步優化,這也是本文下一步的研究方向。