童慧琳,李 琦
(內(nèi)蒙古科技大學信息工程學院,內(nèi)蒙古 包頭 014010)
在大規(guī)?;鲋?,要實現(xiàn)對牛個體自動化、信息化的日常精細化管理,實現(xiàn)對每頭牛的健康狀況追蹤及奶源和肉制品追溯,須對牛的身份進行識別[1-4]。本文采用PP-OCR 框架對牛耳標進行識別,從而確定牛只身份。由于牛耳標區(qū)域在牛頭部圖像中占比較小,且多有耳標采用人為手寫的方式,存在書寫不規(guī)范等問題,對牛耳標區(qū)域的文本定位和識別造成了一定困難[5-7]。
光學字符識別OCR 的概念于1929 年被首次提出,但由于當時軟硬件技術(shù)的限制,這項技術(shù)并沒有被實現(xiàn)。隨著計算機設(shè)備的出現(xiàn)與應(yīng)用,OCR 技術(shù)才得以實現(xiàn)。OCR 領(lǐng)域分為文本檢測和文本識別兩個主要研究方向。近年隨著深度學習技術(shù)的出現(xiàn),OCR技術(shù)在實踐中取得了越來越多的成果。其中,PP-OCR是一套較為成熟的中英文OCR 方案,其重點在于解決不同語言的OCR 問題,PP-OCR 包含了很多的文本檢測算法和文本識別算法,具體包括:不同的backbone網(wǎng)絡(luò),自定義的預(yù)測頭網(wǎng)絡(luò),各種常見超參的選擇,模型輕量化等。這些策略使得整體模型變得更加輕量高效,同時還提升了上線部署的效率。PP-OCR 主要由三個流程組成,分別是DB 文本檢測、檢測框校正、CRNN 文本識別。其中,綠色框中表示的是一些常用的輕量化方案,這使得PP-OCR 最終的模型大小可以達到MB 級別。在本文中,將采用PP-OCR 的整體技術(shù)流程來完成基于牛耳標的個體身份識別。
如圖1所示,文本檢測器包括兩部分:一個骨干網(wǎng)絡(luò)和一個檢測頭網(wǎng)絡(luò)。其中,骨干網(wǎng)絡(luò)的大小決定了文本檢測器的的網(wǎng)絡(luò)模型大小,考慮到模型輕量化和模型精度之間的兼容,PP-OCR 采用MobileNetV3 作為文本檢測器的骨干網(wǎng)絡(luò)。另外,PaddleClas還提供了多達24種的圖像分類網(wǎng)絡(luò)結(jié)構(gòu),其中包含了如ResNet、SEResNeXt、Res2Net vd、DenseNet、EfficientNet、Xception、HRNet 等預(yù)訓練模型以及訓練配置方案。類似于FPN 的網(wǎng)絡(luò)結(jié)構(gòu),檢測頭網(wǎng)絡(luò)采用1×1 卷積,將不同分辨率上的特征圖的通道數(shù)變?yōu)橄嗤臄?shù)量,獲得在各個圖像感受野下的多尺度的特征圖,再將各個感受野下的特征圖進行加權(quán)合并,從而獲得一個融合的特征圖。
圖1 牛耳標文本檢測器網(wǎng)絡(luò)結(jié)構(gòu)
由于文本方向檢測器的訓練比較容易,因此PPOCR 使用MobileNetV3 作為文本方向分類器的骨干網(wǎng)絡(luò)。在大部分文本識別算法中,歸一化圖像的高和寬一般設(shè)置為32 和100,因為文本方向檢測器的骨干網(wǎng)絡(luò)非常輕量,所以,適當?shù)靥岣咻斎雸D像的分辨率,并不會引起計算時間的顯著增長,而且,隨著輸入圖像的分辨率的提高,文本方向檢測器的精度也會相應(yīng)地得到提升。
文本識別器使用了CRNN(Convolutional Recurrent Neural Network),如圖2 所示它是一種比較常用的文本識別網(wǎng)絡(luò),能夠識別較長的文本序列,主要包括卷積層、循環(huán)層和轉(zhuǎn)錄層。實際上,轉(zhuǎn)錄層相當于模型的損失函數(shù),而卷積層與循環(huán)層可以看作由CNN 和RNN組成的網(wǎng)絡(luò)。
圖2 文本識別器網(wǎng)絡(luò)結(jié)構(gòu)
在CRNN 模型中,卷據(jù)層是通過多組卷積、池化層和批量歸一化層來構(gòu)建的。與其他CNN模型類似,該方法將圖像轉(zhuǎn)換成含有圖像深度特征的特征圖,然后將特征圖輸入到后面的循環(huán)層。首先將輸入圖像以計算出的比例進行縮放,以確保圖像輸入一致。由于卷積神經(jīng)網(wǎng)絡(luò)包含了卷積層和最大池化層,因此網(wǎng)絡(luò)對于輸入圖像具有平移不變性的特征。卷積神經(jīng)網(wǎng)絡(luò)中的感受野的定義是,經(jīng)過卷積層輸出的特征圖的各個像素對應(yīng)著輸入圖像多少個像素,它和特征圖上的像素自左向右,自上而下是的各個像素是一一對應(yīng)的。盡管卷積神經(jīng)網(wǎng)絡(luò)因其具有的優(yōu)點而被廣泛應(yīng)用到了視計算機領(lǐng)域中,但因為它經(jīng)常需要將輸入圖像縮放成相同的大小,所以對于一些尺寸變化較大的數(shù)據(jù),例如文本信息,就不能發(fā)揮出很好的作用。為了更好的對時序信息進行處理,在卷積層之后加入了一個通過RNN 組成的循環(huán)層。在PP-OCR 中,卷積層使用MobileNetV3作為網(wǎng)絡(luò)backbone。
選擇循環(huán)層的主要原因有三個。①卷積神經(jīng)網(wǎng)絡(luò)對于數(shù)據(jù)的上下文信息提取能力較差,而循環(huán)神經(jīng)網(wǎng)絡(luò)正好可以彌補這一不足;②在反向傳播時,循環(huán)層得出的關(guān)于誤差的梯度可以反饋到卷積層,所以循環(huán)層和卷積層的網(wǎng)絡(luò)參數(shù)能夠一起調(diào)整;③最關(guān)鍵的是,循環(huán)神經(jīng)網(wǎng)絡(luò)能夠處理不同長度的數(shù)據(jù),卷積神經(jīng)網(wǎng)絡(luò)則無法處理這種數(shù)據(jù)。普通的循環(huán)神經(jīng)網(wǎng)絡(luò)存在著相同的缺點,即如果輸入數(shù)據(jù)的序列過長,在反向傳播的時候就會出現(xiàn)梯度消失的問題,這很容易使得循環(huán)神經(jīng)網(wǎng)絡(luò)所能學習的上下文信息的長度有限,并且訓練也更加困難。因此,使用長短時記憶網(wǎng)絡(luò)LSTM 來取代一般的循環(huán)神經(jīng)網(wǎng)絡(luò),利用門機制將長期和短期的記憶融合到一起,從而解決普通循環(huán)神經(jīng)網(wǎng)絡(luò)的問題。
在一個序列中,由于某個變量不僅與之前的信息相關(guān),還與其之后的信息相關(guān),因此,采用雙向的LSTM 可以更好地發(fā)揮上下文信息的作用。此外,經(jīng)過實驗驗證,通過增加雙向LSTM 的層數(shù),可以有效地提高識別的精度。我們采用了兩層的雙向LSTM,在實際應(yīng)用過程中,我們可以根據(jù)實際情況來做相應(yīng)的調(diào)整。利用卷積層得到的特征序列經(jīng)過循環(huán)層兩個雙向LSTM 的處理后,可以對圖像中的文本信息做出更精準的識別。由于卷積層的輸出特征的維度與LSTM 的輸入特征的維度不同,為了實現(xiàn)維度的變換,還需構(gòu)建一個線性層,將其作為卷積層到循環(huán)層的過渡,從而滿足循環(huán)層的輸入需求。
轉(zhuǎn)錄層的作用是將由循環(huán)神經(jīng)網(wǎng)絡(luò)預(yù)測的序列轉(zhuǎn)換成標記序列,從而得到最后的識別結(jié)果。該層的原理是在標記序列中的各個分量中,選擇概率最大的索引,作為識別結(jié)果,并將其組成為最后的識別序列。本文引入CTC 算法中定義的條件概率應(yīng)用于序列的轉(zhuǎn)換問題中。
牛耳標數(shù)據(jù)集利用三千萬像素照相機,對在養(yǎng)殖狀態(tài)下的個體牛進行拍攝從而獲得牛耳標圖像,構(gòu)建了一個牛耳標圖像數(shù)據(jù)集,如圖3 所示。本數(shù)據(jù)集來自內(nèi)蒙古錫林郭勒盟蘇尼特左旗的一個牧區(qū),共包含133頭受試牛,每頭牛的牛照片為5-100張圖像。圖像中的耳標截面傾斜角度應(yīng)控制在-45 度到45 度之間,剔除角度過大的圖像,避免因角度過大造成字符畸變而影響識別結(jié)果;同時一頭牛的耳標圖片不適宜挑選太多張,因為耳標的字典較少,如果相同受試牛的照片挑選過多,會造成數(shù)據(jù)集的數(shù)據(jù)泛化性過低。經(jīng)過篩檢后,耳標圖像總計3457張圖像。將牛耳標數(shù)據(jù)集命名為eartagDATA。
圖3 牛耳標數(shù)據(jù)集eartagDATA
本文將采集篩檢后的3457 張牛耳標數(shù)據(jù)集eartagDATA 使用PPOCRLabel 標注工具對其進行標注。PPOCRLabel是一款功能強大的半自動化OCR標注工具,它支持中英文與數(shù)字識別,以及法文、德文、韓文、日文多種語言的檢測。PPOCRLabel 默認使用PaddleOCR 中的輕量化PPOCR 模型,同時也支持用戶使用自定義模型。針對標注過程中的誤識別、漏檢測等問題,PPOCRLabel提供自動標注、手動標注、重新識別、手動更改識別內(nèi)容、批處理、撤銷等功能PPOCRLabel能夠?qū)С鲋苯佑糜赑POCR檢測和識別模型訓練的數(shù)據(jù)格式,主要包括Label.txt,fileState.txt,Cache.cach,rec_gt.txt,crop_img 識別數(shù)據(jù)等。其中,Label.txt 是檢測標簽,行數(shù)據(jù)包含圖片對應(yīng)的路徑、檢測到的多個文本框坐標及其對應(yīng)的文字或數(shù)字;fileState.txt是圖片狀態(tài)的標記文件,保存當前文件夾下已經(jīng)被用戶手動確認過的圖片名稱;Cache.cach是緩存文件,保存模型自動識別的結(jié)果;crop_img是按照檢測框切割后的圖像;rec_gt.txt是識別標簽。
由于牛耳標照片的拍攝距離不同,所以耳標圖像的分辨率也不同,會對耳標識別的準確率造成影響。使用三次雙線性插值將耳標圖像的分辨率進行統(tǒng)一。經(jīng)過三次雙線性插值耳標圖像分辨率統(tǒng)一后,分辨率大小均為1024*1024dpi,如圖4所示。
圖4 牛耳標圖像統(tǒng)一分辨率結(jié)果示意圖
在數(shù)學中,雙線性插值是對兩個變量的插值函數(shù)進行線性插值擴展。首先,在x方向做線性插值,可得到式⑴和式⑵:
接下來在y方向上進行線性插值,得到式⑶:
結(jié)果f(x,y)如式⑷:
接下來對統(tǒng)一分辨率后的牛耳標圖像進行腐蝕膨脹處理,腐蝕類似“領(lǐng)域被蠶食”,是將圖像中高亮區(qū)域或白色部分進行縮減細化。而膨脹類似于“領(lǐng)域擴張”,將圖像的高亮區(qū)域或白色部分進行擴張,運行結(jié)果圖比原圖像高亮區(qū)域更大。腐蝕和膨脹都是對圖像的高亮區(qū)域或白色部分而言。
腐蝕是X 用S 腐蝕的結(jié)果是所有使S 平移x 后仍在X 中的x 的集合。換句話說,用S 來腐蝕X 得到的集合是S 完全包括在X 中時S 的原點位置的集合,其公式表達如下:
而膨脹可以看做是腐蝕的對偶運算,其定義是:把結(jié)構(gòu)元素B 平移a 后得到Ba,若Ba 擊中X,我們記下這個a 點。所有滿足上述條件的a 點組成的集合稱做X被B膨脹的結(jié)果。其公式表示如下:
耳標圖像經(jīng)過腐蝕和膨脹處理后能夠有效消除噪聲、分割出獨立的圖像元素和尋找到圖像中的明顯的極大值區(qū)域或者極小值區(qū)域。
對圖像先腐蝕、后膨脹,叫開運算,用式⑺表示。其作用是:分離物體,消除小區(qū)域。
圖5是經(jīng)過圖像腐蝕膨脹處理的部分實現(xiàn)源碼和處理后的圖像示意圖。我們可以明顯看出經(jīng)腐蝕膨脹后的耳標更加清晰,下文的實驗分析中會通過具體的實驗數(shù)據(jù)來驗證。
圖5 牛耳標圖像腐蝕膨脹處理示意圖
牛耳標文本檢測實驗利用MobileNetV3 作為骨干網(wǎng)絡(luò),網(wǎng)絡(luò)的輸入是牛耳標圖像,輸出是牛耳標文本檢測結(jié)果,具體的實驗參數(shù)如表1所示。
表1 牛耳標文本檢測參數(shù)設(shè)置
牛耳標文本識別實驗利用CRNN 作為骨干網(wǎng)絡(luò),網(wǎng)絡(luò)的輸入是牛耳標文本圖像,輸出是牛耳標文本識別結(jié)果,具體的實驗參數(shù)如表2所示。
表2 牛耳標文本識別參數(shù)設(shè)置
本實驗運行在ubuntu16.04 系統(tǒng)上,使用的編程語言是Python,深度學習的環(huán)境使用PaddlePaddle,CUDA版本為9.0。訓練程序時使用的顯卡為NVIDIA GTX2080Ti×2,顯存為32G,測試程序時在保證CPU和內(nèi)存基本為空的情況下測試(為了準確測試時間)。
本文的牛耳標文本檢測采用DB 算法,通過掃描輸入的耳標圖像,設(shè)置閾值來判斷每一個像素是否屬于文字區(qū)域,進而完成文本定位。圖6 展示了牛耳標圖像文本檢測的效果。綠框部分表示DB 算法檢測出的文本,并把文本從耳標圖像中分割出來,形成右邊對應(yīng)的文本行圖片。算法對像素的掃描順序為從左至右,從上至下。
圖6 牛耳標文本檢測結(jié)果
檢測框校正是對文本檢測后分割出的文本行部分進行角度校正的操作。在現(xiàn)實場景下,有較大可能性會出現(xiàn)文字顛倒的情況,使用檢測框校正可以有效地提高文本識別的準確率。檢測框校正采用一個方向分類器將文本行部分進行0 和180 度的角度分類,其中,180度的文字行圖片會被旋轉(zhuǎn)操作實現(xiàn)轉(zhuǎn)正。
輸入牛耳標圖像,在經(jīng)過檢測網(wǎng)絡(luò)后,將其輸入到識別網(wǎng)絡(luò),可以得到牛耳標識別結(jié)果,從圖7 可以看到,在識別結(jié)果中,標出了牛耳標數(shù)字的具體坐標以及每個坐標的ID 識別結(jié)果、識別置信度和識別所用時間。
圖7 牛耳標識別結(jié)果
分別對原始牛耳標圖像和腐蝕膨脹后的耳標圖像進行耳標識別測試,測試結(jié)果如表3。
表3 牛耳標圖像文本識別結(jié)果
本文介紹了使用牛耳標進行牛個體識別的整體思路,文本檢測器、文本方向檢測器和文本識別器的網(wǎng)絡(luò)結(jié)構(gòu)。接下來介紹了對牛耳標圖像預(yù)處理及其原理,使用腐蝕膨脹處理提高圖像的可識別性。在針對耳標場景設(shè)置好實驗的超參數(shù)后對耳標原圖像和腐蝕膨脹后的圖像分別進行了測試,最后展示了測試結(jié)果,證明了本課題使用的預(yù)處理方法可以提高牛耳標圖像的識別準確率。