OCR如何讀取皺巴巴的文件?深度學習在文檔圖像形變矯正的應用詳解

1、背景

隨着集團業務的高速發展以及集團對用戶羣體信用要求的提升,證件審覈成爲業務中必不可少的一個環節。譬如:支付寶須要對用戶的身份證信息進行審覈,1688須要對賣家的營業執照進行審覈。此外,還有一些業務涉及的是須要專業人士纔有足夠能力進行審覈的信用證和保單。算法

clipboard.png

近年來,人工智能在愈來愈多的任務中的表現已經超過了人類。若是能將AI引入審覈場景,實現智能審覈,將大大提升審覈的效率。智能審覈相比人工審覈具備如下優點:安全

clipboard.png

而要作到高水平的智能審覈,難度頗大,須要作好如下幾點:網絡

clipboard.png

要讓機器代替人去作證件審覈乃至於文本審覈,首先須要讓機器看到人所能看到的(OCR:將文本圖像轉化成文本),然後纔是理解人所能看到的(NLP:如糾錯分詞/文本分類等)。做爲後面一切算法的源頭,OCR算法在智能審覈中起着相當重要的角色。除卻算法自己,圖像質量乃是影響OCR識別準確率的最大因素。通常從三個方面來衡量圖像的質量:傾斜、清晰度、扭曲。而本文的目的則在於如何經過算法使得扭曲的文檔圖像變得平整,從而改善扭曲文檔圖像的OCR識別準確率,爲智能審覈保駕護航。架構

2、相關工做

2.1 傳統方法less

當前針對扭曲文檔圖像的矯正算法主要有如下三類:機器學習

● 基於硬件的扭曲文檔矯正ide

該類方法一般使用特製的硬件設備掃描紙張的三維形狀信息。好比採用結構光源來對文檔進行掃描從而獲取文檔的三維信息即深度信息,而後根據深度信息對文檔圖像進行矯正。函數

● 基於3D模型重建的文檔矯正算法性能

該類方法主要從形成文檔扭曲的因素出發,包括文檔及其擺放角度、光源方向、圖像獲取設備特徵等因素。經過對文檔進行3D建模,並利用已有的數學知識對扭曲進行矯正。學習

● 基於內容切分的文檔矯正算法

該類算法擯棄對扭曲的幾何模擬與3D建模,直接對文檔圖像進行分析,包括傾斜角、文本行、字符或詞組特徵等,而後設計出一種不受文檔圖像之外因素影響的扭曲矯正算法。此類算法的優勢在於不須要清楚地知道扭曲形成的緣由。

三類算法各有優勢,但也都有各自的侷限性,可總結爲:

clipboard.png

能夠看出,傳統方法可能是針對特定場景進行建模,而一旦跳出當前場景,模型就沒法起做用。隨着深度學習的興起,有學者提出用深度學習相關算法對扭曲文檔圖像進行矯正。

2.2 深度學習方法

隨着深度學習近幾年的興起,有學者提出用語義分割相關的模型對扭曲文檔圖像進行建模,將像素級的分類問題轉化爲像素級的迴歸問題,實現扭曲文檔圖像的矯正,模型具備必定的泛化能力,可針對複雜場景下的扭曲或摺疊圖像進行矯正。

clipboard.png

在剛剛結束不久的CVPR 2018中,Ke ma等人提出一種基於語義分割中U-net模型[1],利用圖形學方法生成逼近真實場景的扭曲文檔圖像,經過這些樣本集訓練出可實現端到端矯正的Stacked U-net網絡。

深度學習的優點在於如如有足夠豐富和質量高的訓練樣本集,其深層網絡結構令其具備必定的泛化能力,可針對多種扭曲實現矯正,跳出傳統方法的場景限制。

考慮到實際業務的複雜性,傳統方法沒法勝任,所以本文結合深度學習語義分割領域的相關知識,針對現有方法的不足提出優化方案,實現扭曲文檔的矯正。

3、數據集生成

對機器學習或深度學習有必定了解的人都知道,不少時候,數據決定着你的模型能作到什麼程度。而關於扭曲文檔復原,一方面當前的開源數據集較少;另外一方面,咱們的目標是要創建可以實現像素級別迴歸任務的神經網絡結構,這下子,開源且標註好的數據集幾乎就是沒有。所以,咱們參考文獻[1]中的方法,自行生成數據集。

3.1 扭曲文檔圖像生成

扭曲又分爲摺疊和捲曲,利用圖形學相關知識,咱們經過如下步驟實現了文檔的摺疊和捲曲:

clipboard.png

其中,捲曲和摺疊的區別是的計算公式的差別:

● 摺疊:

clipboard.png

● 捲曲:

clipboard.png

而經過調整超參數的大小,可實現不一樣程度的扭曲變換,以下圖所示:

clipboard.png

3.2數據集生成過程的問題解決

固然,在進行數據集生成的時候,也是遇到了不少的問題,好比:

● 樣本集的標籤如何生成?

● 生成圖片時遇到空點如何處理?

首先,是樣本的標籤問題,咱們要實現像素集的迴歸,則每一個像素都必須有一個標籤,而如何設計標籤才能讓網絡結構更好的完成該任務呢?

咱們是這麼設計的:

clipboard.png

首先對比扭曲變換後的圖像和原圖像,獲得摺疊變換後的圖像上的每一個像素點所應該移動的位移大小和方向,而後構造一個3維的矩陣,一維用於存扭曲變換後的圖像灰度值信息,另外兩維用於存在x軸和y軸方向所應該移動的位移大小和方向,這樣就實現了樣本和標籤的構造。

此外,在變換過程當中,咱們還發現生成的圖像有一些會帶有黑點或黑線,以下圖所示:

clipboard.png

上圖中三幅小圖分別表明變換事後的圖像以及每一個像素點的標籤圖像。咱們經過分析發現,其之因此會存在黑點,是由於這個座標下的像素是空的,而像素是空的緣由是由於咱們在進行變換的過程當中,其實有一個取整操做,而這樣的取整操做可能讓本來相鄰的兩列像素點中間空出一列,以下示意圖所示:

clipboard.png

後來,咱們經過最近鄰插值解決了這個問題,上述存在黑點的圖通過插值後獲得以下變換圖像:

clipboard.png

固然,也可經過其餘插值或修復方法修復這樣的空白點。

解決了數據集問題,至關於解決了模型的食糧問題。那咱們的模型具體長什麼樣呢?莫慌,下面咱們將爲你細細道來。

4、模型構建與優化

4.1基於U-net的扭曲文檔矯正復原

咱們一開始選用的是在語義分割中最爲經常使用的U-net模型,其網絡架構以下圖所示[2]:

clipboard.png

其網絡架構形如字母「U」,所以被稱爲U-net,能夠將此類神經網絡理解爲一個Encoder-Decoder結構,其中Encoder是收縮路徑,主要是由卷積層和池化層組成,主要目的在於實現特徵的提取或者說捕捉語義,而Decoder是擴展路徑,主要經過轉置卷積和跳躍鏈接實現,其主要目的是爲了實現上採樣,因爲Pooling操做進行了下采樣致使圖像維度減少,而轉置卷積可讓feature map的維度變大,從而恢復到原圖的大小,從而實現像素級迴歸。可是這樣獲得的結果是很粗糙的,因此通常還經過跳躍鏈接將淺層的特徵concat到upsampling以後的feature map中以實現精準定位。

可是,基於U-net模型的效果並不如咱們預料的那般好:

clipboard.png

主要是會出現諸如文字扭曲變形和行間扭曲錯位這樣的現象,嚴重的時候甚至可能出現圖片撕裂現象:

clipboard.png

爲了對模型進行優化,咱們須要定位問題出在哪裏,所以,咱們對模型的預測結果進行可視化,獲得以下圖:

clipboard.png

能夠發現,預測出來的標籤和真實的標籤雖然大致的趨勢是差很少的,但都是以團狀形式出現,沒法像真實標籤那樣精確,即:分辨率不夠或者說定位精度不夠。所以,咱們從三個角度進行模型的優化:

● 改變模型的結構:從U-net變成Stacked U-net,以提升分辨率

● 修改損失函數:使得模型在優化過程當中讓本來相鄰的像素點之間的距離與預測結果差異不要太大,以改善文字扭曲變形的現象

● 對預測結果進行後處理,以改善噪點現象

下面,將詳細介紹每一個優化步驟。

4.2基於StackedU-net的扭曲文檔矯正復原

(1)修改網絡結構:U-net —> Stacked U-net

clipboard.png

stacked u-net網絡結構如上所示,咱們參考了論文中的Stacked結構,考慮到分辨率的問題並對其進行了改進,其堆疊了兩個u-net,目的先利用第一個U-net獲得一個粗粒度的預測結果,並可將其視爲一種先驗,然後再將預測結果和原始扭曲圖concat後,再放入第二個U-net中進行實現,目的在於結合深層抽象低分辨率的特徵和淺層原始高分辨率的特徵,以實現細粒度的預測。

(2)改進損失函數:添加尺度不變損失

在U-net中,咱們用的是以下的均方根偏差函數:

clipboard.png

其中,y表明的是一個二維向量。但這樣的損失函數容易致使字符之間出現扭曲現象,所以,咱們經過添加尺度不變損失,對當前結果進行改進,但願映射以後的相對位移和它們對應的 ground truth 相對位移之間的相對偏差儘量小:

clipboard.png

此外,咱們還發現,當用以下L1 loss形式的時候會比L2 Loss獲得更好的效果:

clipboard.png

其中,乃是控制均方偏差和尺度不變偏差比重的超參數。

展現一下L2 Loss和L1 Loss下的效果對比:

clipboard.png

能夠看到,L1 Loss能夠在細節處作到更好的效果,究其緣由,能夠理解爲:

L2 Loss因爲其函數中的平方操做更容易受到大偏差值的影響,而忽略小偏差值,好比在像素點A的mae偏差爲2,而在像素點B的偏差mae爲0.02,此時他們相差100倍,而在進行平方操做,像素點A偏差值變爲4,像素點B的偏差變爲0.0004,相差了10000倍,故L1 Loss能夠在細節處作的更好。

(3)平滑後處理

咱們發現,U-net預測出來的圖像時常存在一些噪點甚至於斷層、撕裂現象,爲何會產生這樣的現象,究其深層的緣由是因爲相鄰或相近的像素點理應也有相近的預測值,但若是相鄰的像素點的預測值相差極大,則容易出現噪點甚至於圖像斷層、撕裂現象。所以,咱們經過對預測出來的標籤進行平滑處理,雖然簡單粗暴,但也改善了這一現象:

clipboard.png

那究竟是哪一個地方咱們沒有作好致使這樣的現象呢?咱們從不一樣角度對U-net的定位精度、文字扭曲、行間錯位、噪點現象進行改進,但StackedU-net這種網絡結構雖然能在訓練集上取得很好的效果,但在驗證集上的效果仍是不如咱們的預期。也就是說Stacked U-net這種網絡結構在訓練集上產生了過擬合現象。那如今咱們遇到了很矛盾的兩個點:

● 網絡過淺致使感覺野太小,沒法獲得足夠的周邊像素信息,從而沒法得出精確的結果。

● 網絡過深,雖然增大感覺野,但因爲網絡參數過多,一方面訓練時間較久,另外一方面容易致使模型過擬合。

這時候,咱們就在思考,可否找到一種輕型的網絡結構,既能保證感覺野足夠大,又能減輕過擬合現象?

因而,咱們發現了空洞卷積(Dilated Convolution)這樣的卷積方式。

4.3基於DilatedU-net的扭曲文檔矯正復原

空洞卷積(dilated convolution)是指在卷積核之間注入空洞,相比於標準的卷積多了一個稱爲dilation rate的超參數,當dilationrate = 1時,其爲標準的卷積操做;當dilation rate = 2時,則表示在卷積核的每一個元素之間注入一個空洞。其示意圖以下所示:

clipboard.png

圖a對應 3x3 的 1-dilated conv,和普通的卷積操做同樣。

圖b對應 3x3 的 2-dilated conv,實際的卷積kernel size仍是3x3,空洞爲1,能夠看到雖然kernel size只有3x3,可是這個卷積的感覺野已經增大到 7x7。

● 解釋下感覺野爲何爲 7x7,若 2-dilated conv的前一層是一個1-dilated conv的話,那麼每一個紅點就是1-dilated的卷積輸出,因此感覺野爲3x3,故緊接其後的2-dilated conv層的感覺野能夠達到7x7。

● 也能夠理解爲kernel的size爲7x7,可是隻有圖中的9個點的權重不爲0,其他都爲0。

圖c是4-dilated conv操做,同理跟在兩個1-dialted conv和2-dialted conv的後面,能達到 15x15 的感覺野。

對比傳統的conv操做,3層 3x3 的卷積加起來,stride爲1的話,只能達到(kernel - 1) * layer + 1 = 7的感覺野,也就是感覺野和層數layer成線性關係,而dilated conv的感覺野也是呈指數級的增加,以下圖,表明分別堆疊6層普通卷積和空洞卷積時的感覺野對比狀況:

clipboard.png

dilated conv的好處能夠總結爲:

● 在不作pooling損失信息的狀況下,加大了感覺野。

● 感覺野和卷積核的大小之間是指數關係。

● 空洞卷積並不增長參數量,不易過擬合且加快訓練速度。

● 空洞卷積先後並不改變圖像的維度大小。

基於Dilated Convolution和U-net的網絡架構,咱們設計了以下結構的Dilated U-net:

clipboard.png

其中,咱們基於空洞卷積分別設計了並行多尺度空洞卷積U-net結構和串行多尺度空洞卷積U-net結構,其中串行的結構表現更佳,緣由是由於其串行疊加後,就相似於串級放大器般增大感覺野,讓每一個像素點能夠看到周邊更多像素點的信息,從而獲得更爲精確的結果。

對比其餘模型與Dilated U-net模型,咱們能夠獲得以下圖所示的結果:

clipboard.png

能夠發現,在Dilated U-net模型的矯正下,矯正後的文檔圖片基本上只有輕微的扭曲和變形。

5、模型評價

5.1 模型基本參數對比

總結各個模型,首先看下各個模型的參數和模型大小的對比:

clipboard.png

再看看各個模型在訓練集和驗證集上的loss curve:

L1 Loss

clipboard.png

L2 Loss

clipboard.png

其中,實線表明的是在訓練集上的效果,虛線表明的是在驗證集上的效果,能夠發現不管是U-net仍是StackedU-net,其在訓練集和驗證集上的loss都存在較大的差別,也就表面模型存在過擬合,而Dilated U-net過擬合的狀況就會好不少。

所以,咱們能夠發現,Dilated U-net不只參數量少,訓練速度快,並且精度更高,真是應了那句「less is more」的至理名言。

5.2 模型評價

在最後的模型評價中,咱們採用MS-SSIM指標對矯正先後的圖片類似度進行評價,MS-SSIM全稱爲Multi-ScaleStructural Similarity,顧名思義,其是多尺度下的SSIM(結構類似性)的彙總。

要計算MS-SSIM,得先計算SSIM,SSIM是一種衡量兩幅圖像類似度的指標,其計算思路是將人類主觀感知歸入考量:

● 在很是亮的區域,失真更難以察覺。(luminance, 亮度)

● 在「紋理」比較複雜的區域,失真更難以察覺。(contrast, 對比)

● 空間上相鄰的像素之間造成某種「結構」,而人眼對這種結構信息很敏感。(structure,結構)

具體而言,SSIM經過如下公式測度以上三者:

clipboard.png

SSIM考慮了亮度、對比、結構因素,然而,還有一個主觀因素沒有考慮,分辨率。顯然,在不一樣分辨率下,人眼對圖像差別的敏感程度是不同的。好比,在高分辨率的視網膜顯示器上顯而易見的失真,在低分辨率的手機上可能難以察覺。所以,後來又進一步提出了MS-SSIM指標,即多尺度(Multi-Scale)SSIM。對圖像進行降採樣處理,在多尺度上分別計算對比比較和結構比較,最後彙總多尺度上的SSIM分數,其計算過程以下示意圖所示:

clipboard.png

其計算公式爲:

clipboard.png

在訓練集和驗證集以外,隨機生成100張扭曲變換的圖片做爲測試集,從而利用MS-SSIM指標對各個模型的矯正效果進行評價,最終,各個模型的MS-SSIM得分以下:

clipboard.png

這樣看可能不是很直觀,讓咱們用柱狀圖展現一下結果:

clipboard.png

從上述圖表中,咱們能夠得出以下結論:

● Dilated U-net的效果要優於Stacked U-net和U-net。

● L1形式的損失函數要優於L2形式的損失函數。

● 平滑操做對於各個模型都能起到必定程度的優化做用。

6、後續展望

本文旨在對扭曲文檔圖像進行矯正,基於圖像語義分割領域的U-net模型,將扭曲文檔圖像矯正問題轉化爲像素級別的迴歸問題,針對模型結果中出現的文檔扭曲錯行以及預測結果分辨率不足等問題,參考前沿文獻,實現了Stacked U-net並提出了相應的優化算法模型DilatedU-net,雖然可以在簡單場景下獲得不錯的效果,但仍然存在必定的不足,具體可描述爲如下幾點:

● 數據集:爲了解決標註問題,目前的數據集是參考圖形學的相關知識自行構造而成,致使神經網絡能學到的知識有限,一旦遇到天然場景中的複雜問題,神經網絡的性能將受到限制。所以,後續研究中,一方面可增長天然場景中的數據集;另外一方面,可引入生成對抗網絡的相關知識,讓模型更具泛化能力。

● 神經網絡結構:目前的神經網絡結構Dilated U-net相對於Stacked U-net,雖然更輕型且訓練速度更快,但最終若要實現網絡模型在移動端的部署,其響應速度仍然存在優化之處。

● 此外,可嘗試DeepLab相關的網絡模型以及基於CRF的後處理方式等以提升預測精度。

關於咱們

咱們是新零售增值業務技術團隊,旨在用科技的力量,爲中小微貿企業提供在貿易和供應鏈場景下的金融,風控,信用,保險等增值服務。經過連接中小企業和金融機構,運用新技術、大數據和平臺優點,讓無數中小微企業可以從銀行獲取到只有大型企業才能獲得的服務,爲無數中小企業提供高效,安全,低成本的金融服務,讓企業的信用轉化爲財富。

本文做者:黑野

閱讀原文

本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。

相關文章
相關標籤/搜索