訂閱
糾錯
加入自媒體

基于EAST和Tesseract的文本檢測

目錄

導言

現(xiàn)實世界問題

說明

問題陳述

業(yè)務目標和約束條件

可用于文本檢測和識別的數(shù)據(jù)集

數(shù)據(jù)集概述和說明

探索性數(shù)據(jù)分析(EDA)

深度學習時代之前的文本檢測方法

EAST(高效精確的場景文本檢測器)

示范實現(xiàn)

模型分析與模型量化

部署

今后的工作

1.介紹

在這個數(shù)字化時代,從不同來源提取文本信息的需求在很大程度上增加了。

幸運的是,計算機視覺的最新進展減輕了文本檢測和其他文檔分析和理解的負擔。

在計算機視覺中,將圖像或掃描文檔中的文本轉(zhuǎn)換為機器可讀格式的方法稱為光學字符識別(OCR),該格式可在以后編輯、搜索并用于進一步處理。

光學字符識別的應用

A.信息檢索和自動數(shù)據(jù)輸入-OCR對于許多公司和機構(gòu)起著非常重要的作用,這些公司和機構(gòu)有成千上萬的文檔需要處理、分析和轉(zhuǎn)換,以執(zhí)行日常操作。

例如,在賬戶詳細信息等銀行信息中,可以使用OCR輕松提取支票金額。同樣,在機場,在檢查護照的同時也可以使用OCR提取信息。其他示例包括使用OCR從收據(jù)、發(fā)票、表單、報表、合同等中檢索信息。

B車牌識別-OCR還可用于識別車輛牌照,然后可用于車輛跟蹤、收費等。

C自動駕駛汽車-OCR也可用于建立自動駕駛汽車的模型。它可以幫助識別交通標志。否則,自動駕駛汽車將對道路上的行人和其他車輛構(gòu)成風險。

在本文中,我們將討論并實現(xiàn)用于OCR的深度學習算法。

數(shù)字化:將文本、圖片或聲音轉(zhuǎn)換成計算機可以處理的數(shù)字形式

2.現(xiàn)實世界問題2.1說明

我們現(xiàn)在已經(jīng)熟悉了文本檢測和識別的各種應用。本文將討論從自然場景圖像中檢測和識別文本。

因此,在我們的例子中,我們使用的是任何自然圖像或場景(不特別是文檔、許可證或車輛編號),對于給定的圖像/場景,我們希望通過邊界框定位圖像中的字符/單詞/句子。然后,我們要識別任何語言的本地化文本?傮w工作流程圖如下所示:

上面使用的圖像用于顯示整個任務。但對于本案例研究,我們將使用隨機自然場景作為輸入圖像。

2.2問題陳述

對于給定的自然場景/圖像,目標是通過繪制邊界框來檢測文本區(qū)域,然后必須識別檢測到的文本。

2.3業(yè)務目標和約束條件。

自然場景圖像中的文本可以使用不同的語言、顏色、字體、大小、方向和形狀。我們必須在自然場景圖像中處理這些文本,這些圖像具有更高的多樣性和可變性。

自然場景的背景可能帶有圖案或形狀與任何文本極其相似的對象,這會在檢測文本時產(chǎn)生問題。

圖像中斷(低質(zhì)量/分辨率/多方向)

實時檢測、識別和翻譯圖像中的文本需要低延遲。

3.可用于文本檢測和識別的數(shù)據(jù)集

有許多公開的數(shù)據(jù)集可用于此任務,下面列出了不同的數(shù)據(jù)集,包括發(fā)布年份、圖像編號、文本方向、語言和重要功能。

由于非結(jié)構(gòu)化文本、不同方向等原因,所有數(shù)據(jù)集可能無法很好地適用于所有深度學習模型。

對于這項任務,我選擇ICDAR 2015數(shù)據(jù),因為它很容易獲得足夠數(shù)量的圖像,用于非商業(yè)用途,這些圖片中的文本是英文的,因為我是一名初學者,我想重點了解解決這項任務的算法的工作原理。

此外,該數(shù)據(jù)集中的圖像很小,具有多方向性和模糊性,因此我可以對檢測部分進行更多的實驗。

3.1數(shù)據(jù)集概述和說明

數(shù)據(jù)源-下載:https://rrc.cvc.uab.es/?ch=4&com=downloads

ICDAR-2015由國際會議文件分析與識別提供

說明:

該數(shù)據(jù)集在訓練和測試集中可用,每一組都有真實標簽。它總共包含1500張圖像,其中1000張用于訓練,500張用于測試。它還包含2077個裁剪文本實例,包括200多個不規(guī)則文本示例。

這些圖像是從可穿戴相機上獲得的。

4.探索性數(shù)據(jù)分析(EDA)

下載數(shù)據(jù)后,所有文件的結(jié)構(gòu)如下-

圖片標題

使用以下代碼,觀察到圖像尺寸、通道數(shù)等其他信息

訓練圖像

圖片標題

圖片標題

測試圖像

圖片標題

我們還可以從條形圖得出結(jié)論,所有圖像的高度和寬度都相同,即720和1280。

訓練圖像

測試圖像

利用真實標簽繪制原始圖像和邊界框圖像

訓練圖像

測試圖像

從EDA得出的結(jié)論

在ICDAR-15數(shù)據(jù)集中,所有圖像具有相似的大。720x1280)和擴展(.jpg)。

訓練組有1000個圖像,而測試組有500個圖像。

所有圖像的高度和寬度都是相同的,所以我們不需要取平均高度和平均寬度。

在大多數(shù)圖像中,所有文本都位于小區(qū)域,圖像模糊。

所有文本均為英語語言,少數(shù)文本也不可用,并且*替換為“##!薄

大多數(shù)文本都是單個單詞,而不是文字和句子,而且單詞也有多種意思的。我們必須建立這樣一個模型來預測這些模糊的文本。

5.深度學習時代之前的文本檢測方法

正如問題陳述中提到的,我們必須首先定位圖像中的文本,即首先檢測文本,然后識別檢測到的文本。

現(xiàn)在,對于檢測,我們將嘗試一些在深度學習時代之前用于檢測文本的方法。

a.MSER

圖片標題

圖片標題

b. SWT(筆劃寬度變換)

圖片標題

圖片標題

圖片標題

這兩種方法的所有輸出都不是很清楚,在第一種方法中,我們可以觀察到圖像中有一些區(qū)域沒有文本,但仍然用方框標記。同樣在第二種方法中,文本沒有被正確檢測。

還有許多其他用于文本檢測和識別的深度學習算法。在本文中,我們將討論EAST檢測器,并將借助一篇關(guān)于EAST算法的研究論文嘗試實現(xiàn)它。

https://arxiv.org/pdf/1704.03155.pdf

為了識別,我們將嘗試預訓練的模型Tesseract。

6.EAST(高效精確的場景文本檢測器)

它是一種快速準確的場景文本檢測方法,包括兩個階段:

1.它使用完全卷積網(wǎng)絡(FCN)模型直接生成基于像素的單詞或文本行預測

2.生成文本預測(旋轉(zhuǎn)矩形或四邊形)后,輸出將發(fā)送到非極大值抑制以生成最終結(jié)果。

管道如下圖所示:

網(wǎng)絡體系結(jié)構(gòu)-(帶PVANet)

PVANet-它是一種用于目標檢測的輕量級特征提取網(wǎng)絡體系結(jié)構(gòu),可在不損失準確性的情況下實現(xiàn)實時目標檢測性能。

該模型可分為三個部分:主干特征提取、特征合并分支和輸出層。

i.特征提取程序(PVANet)

這部分可以是任何卷積神經(jīng)網(wǎng)絡,例如PVANet、VGG16和RESNET50。從該網(wǎng)絡可以獲得四個級別的特征圖f1、f2、f3和f4。因為我們正在提取特征,所以它被稱為特征提取器。

ii.特征合并分支

在這一部分中,從特征提取器獲得的特征映射首先被饋送到上池化層,使其大小加倍,然后連接所有特征。接下來,使用1X1卷積,減少了計算,然后使用3X3卷積來融合信息,以產(chǎn)生每個合并階段的最終輸出,如圖所示。

g和h的計算過程如下圖所示

其中

gi是一種中間狀態(tài),是合并的基礎(chǔ)

hi是合并的特征圖

iii、輸出層

合并狀態(tài)的最終輸出通過1X1 Conv層和1個通道,該通道給出范圍為[0–1]的分數(shù)映射。最終輸出還通過RBOX或四邊形幾何體(有關(guān)這些的說明如下圖所示),該幾何體給出了多通道幾何體映射。

有關(guān)score map和geo map的詳細信息將在實現(xiàn)時討論。

7.實現(xiàn)

對于實現(xiàn),我們將遵循上面顯示的管道-

步驟1-數(shù)據(jù)準備和數(shù)據(jù)生成(數(shù)據(jù)管道)

在這一步中,我們必須進行數(shù)據(jù)準備,還必須構(gòu)建一個生成器函數(shù),該函數(shù)將提供一個圖像陣列(模型的輸入),其中包含score map(輸出)和geo map(輸出),如上圖所示,你可以觀察到多通道FCN的輸出以及訓練掩碼。

得分圖:

它表示該位置預測幾何地圖的置信度分數(shù)/級別。它位于[0,1]范圍內(nèi)。讓我們通過一個示例來理解它:

假設(shè)0.80是一個像素的分數(shù),這意味著對于這個像素,我們有80%的信心預測對應的幾何貼圖,或者我們可以說,像素有80%的幾率是預測文本區(qū)域的一部分。

geo map:

正如我們所知,隨著score map,我們還獲得了一個多通道幾何信息地圖作為輸出。幾何輸出可以是RBOX或QUAD。下表顯示了AABB、RBOX和QUAD的通道數(shù)量以及描述。

RBOX:

從上圖中,我們可以觀察到,對于RBOX,幾何體使用四通道軸對齊邊界框(AABB)R和通道旋轉(zhuǎn)角度θ。R的公式為G。四個通道代表4個距離,即從像素位置到矩形邊界的距離和通道的旋轉(zhuǎn)角度,如下所示。

QUAD:

對于四邊形,我們使用8個數(shù)字表示從四個頂點到每個像素位置的坐標位移。每個偏移距離包含Δxi | Δyi兩個數(shù),幾何輸出包含8個通道。下面是一個例子

在這個實現(xiàn)中,我們將只使用RBOX。

對于生成器功能,我們必須遵循幾個步驟

這里有所有的代碼

https://jovian.a(chǎn)i/paritosh/data-preparation-and-model-implt

此處顯示了從生成器函數(shù)輸出的原始圖像,包括分數(shù)貼圖、幾何貼圖和訓練掩碼-

步驟2:模型建立和損失函數(shù)

在這一步中,我們將嘗試在Imagenet數(shù)據(jù)上使用預先訓練過的VGG16模型和ResNet50模型作為特征提取器來構(gòu)建檢測器體系結(jié)構(gòu)。

模型1(VGG16作為特征提取器)

源代碼-

圖片標題

圖片標題

圖片標題

模型架構(gòu)-

tf.keras.utils.plot_model(model_vgg,show_shapes=True)

模型2(作為特征提取器的ResNet50)

圖片標題

圖片標題

圖片標題

模型架構(gòu)-

tf.keras.utils.plot_model(model,show_shapes=True)

損失函數(shù)

當我們處理圖像數(shù)據(jù)時,IOU分數(shù)是常用的損失之一。但是這里我們主要有兩個輸出,score map和geo map,所以我們必須計算兩者的損失。

總損失表示為:

Ls和Lg表示得分圖和幾何形狀,λg表示兩個權(quán)重的重要性。在我們的實驗中,我們設(shè)定λg為1。

score map損失

在本文中,用于score map的損失是二元交叉熵損失,其權(quán)重為正類和負類,如圖所示。

geo map損失

對于RBOX,損失定義為

第一個損失是盒子損失,對于這個IOU損失,它是針對不同比例的對象使用的不變量。

對于旋轉(zhuǎn)角度,損失由下式給出-

實現(xiàn)代碼如下所示:

圖片標題

圖片標題

圖片標題

第三步模型訓練

使用Adam優(yōu)化器對這兩個模型進行30個epoch的訓練,其他參數(shù)如下所示-

模型-1

model_vgg.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,amsgrad=True),loss= total_Loss())

epoch與損失圖:

模型2

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001,amsgrad=True),loss=total_Loss())

epoch與損失圖:

Step-4 推理管道

首先訓練后,幾何體貼圖將轉(zhuǎn)換回邊界框。然后根據(jù)score map進行閾值分割,去除一些低置信度盒。使用非最大抑制合并其余框。

非最大抑制(NMS)是許多計算機視覺算法中使用的一種技術(shù)。這是一類從多個重疊實體中選擇一個實體(例如邊界框)的算法

這里我們將使用本地感知的NMS。它將加權(quán)合并添加到標準NMS中。所謂加權(quán)合并是根據(jù)分數(shù)在輸出框中合并高于某個閾值的2個IOU。下面討論實施過程中遵循的步驟-

首先,對geo map形進行排序,并從最上面開始。

2.在這一行的下一個方框中找到帶有上一個方框的iou

3.如果IOU>threshold,則通過按分數(shù)取加權(quán)平均值來合并兩個框,否則保持原樣。

4.重復步驟2至3,直到迭代所有框。

5.最后在剩余的框上應用標準NMS。

實現(xiàn)代碼-

非最大抑制

圖片標題

圖片標題

圖片標題

檢測模型的干擾管道

圖片標題

圖片標題

圖片標題

圖片標題

圖片標題

每個模型的輸出:模型-1

模型2

如果我們比較兩個模型的損失,那么我們可以得出結(jié)論,模型2(resnet_east)表現(xiàn)良好。讓我們對模型2的性能進行分析。8.模型分析與模型量化正如我們所看到的,模型2的性能優(yōu)于模型1,這里我們將對模型2的輸出進行一些分析。首先,計算訓練和測試目錄中每個圖像的損失,然后基于分布,通過查看每個訓練和測試圖像的損失,我們將選擇兩個閾值損失,最后,我們將數(shù)據(jù)分為三類,即最佳、平均和最差。訓練和測試的密度圖-

將圖像數(shù)據(jù)分為3類(最佳、平均和最差)將數(shù)據(jù)分為3類Best = if loss < np.percentile(final_train.loss, 33)----->Threshold-1
Average = if np.percentile(final_train.loss, 33)< loss < np.percentile(final_train.loss, 75)
Worst = if loss > np.percentile(final_train.loss, 75)--Threshold-2
每個類別的圖像數(shù)量如下所示:訓練圖像:

對于測試圖像:

從第一個圖中,對于訓練數(shù)據(jù),我們可以觀察到33%的數(shù)據(jù)屬于最佳類別,42%的數(shù)據(jù)屬于平均類別,只有25%的數(shù)據(jù)屬于最差類別。從第二個圖中,對于測試數(shù)據(jù),我們可以觀察到2.6%的數(shù)據(jù)屬于最佳類別,13.2%的數(shù)據(jù)屬于平均類別,84.2%的數(shù)據(jù)屬于最差類別。從這些觀察結(jié)果中,我們還可以得出結(jié)論,我們的模型可能對測試圖像(即新圖像)表現(xiàn)不佳。模型量化深度學習的量化是通過低位寬數(shù)的神經(jīng)網(wǎng)絡近似使用浮點數(shù)的神經(jīng)網(wǎng)絡的過程。這大大降低了使用神經(jīng)網(wǎng)絡的內(nèi)存需求和計算成本。量化后,原始模型和量化模型的大小如下所示-print("Orignal model size=",(os.path.getsize('east_resnet.h5')/1e+6),"MB")
print("Dynamic Post Training Quantization model size=",os.path.getsize('dynamic_east.tflite')/1e+6,"MB")
print("Float16 Post Training Quantization model size=",os.path.getsize('east_float16.tflite')/1e+6,"MB")
Orignal model size= 105.43348 MB
Dynamic Post Training Quantization model size= 24.810672 MB
Float16 Post Training Quantization model size= 48.341456 MB

9.部署模型量化后,使用streamlit和Github選擇并部署了float16量化模型。使用Streamlight uploader函數(shù),創(chuàng)建了一個.jpg文件輸入部分,你可以在其中提供原始圖像數(shù)據(jù),模型將提供圖像上存在檢測到的文本。網(wǎng)頁鏈接-h(huán)ttps://share.streamlit.io/paritoshmahto07/scene-text-detection-and-recognition-/main/app_2.py部署視頻-h(huán)ttps://youtu.be/Pycj2fszhTk10.今后的工作在這項任務中,我們的主要目標是了解檢測模型的工作原理,并從頭開始實現(xiàn)它。為了提高模型的性能,我們可以使用大數(shù)據(jù)集來訓練我們的模型。我們還可以使用另一種識別模型來更好地識別文本。Github:https://github.com/paritoshMahto07

聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯
x
*文字標題:
*糾錯內(nèi)容:
聯(lián)系郵箱:
*驗 證 碼:

粵公網(wǎng)安備 44030502002758號