翟婭婭, 朱磊, 張博
(西安工程大學電子信息學院, 西安 710048)
近年來,隨著水表計量技術、計算機視覺技術的發(fā)展,遠程抄表系統(tǒng)逐漸代替人工抄表,減輕人力勞動的同時避免了假抄及誤抄的問題。水表讀數(shù)準確識別是遠程自動抄表系統(tǒng)的核心,其與所處的環(huán)境密切相關,環(huán)境不同,識別方法也不盡相同[1]。傳統(tǒng)水表讀數(shù)識別方法先通過圖像預處理檢測字符的目標區(qū)域,接著對字符進行分割,并采用某種字符識別方法對每個字符逐一進行識別,該類方法適用于場景較為單一且水表圖片清晰的情況,對于復雜場景下拍攝的水表讀數(shù)難以進行準確的識別。因此,研究能夠?qū)Σ煌h(huán)境下拍攝的水表讀數(shù)均能精確識別具有重要的現(xiàn)實意義和理論價值。
當前水表讀數(shù)自動識別的主流方法,大致可分為傳統(tǒng)方法和深度學習方法兩大類。徐平等[2]利用改進的Hausdorff距離模板匹配方法進行水表讀數(shù)識別;高菊等[3]根據(jù)水表字符特征,提出了一種有效的水表數(shù)字二次識別算法;陳英等[4]將預處理后的水表字符分割成單個字符,采用粗網(wǎng)格和穿越次數(shù)作為特征,通過特征向量的歐氏距離進行水表字符識別。上述方法對普通場景水表圖像的字符識別精度較高,但對于受霧化、抖動、污漬等干擾的復雜場景水表圖像字符識別精度欠佳,同時對兩個連續(xù)數(shù)字各占一部分的“半字”識別能力弱。
近年來,深度學習方法被用于水表讀數(shù)識別應用中。 Yang等[5]提出用全卷積序列識別網(wǎng)絡模型進行水表讀數(shù)識別,并提出一種增強損失函數(shù)來解決水表圖像“半字”的識別問題??钓蔚萚6]提出先使用旋轉(zhuǎn)區(qū)域卷積神經(jīng)檢測水表框,然后對水表框采用基于注意力機制的文本識別算法預測水表字符。車牌識別與水表讀數(shù)識別是比較接近的應用,二者在技術上有不少可以相互借鑒之處。孫陽等[7]在分割出來的單個字符中引入卷積神經(jīng)網(wǎng)絡來改善低清晰度下的車牌識別。李祥鵬等[8]提出用快速區(qū)域卷積神經(jīng)網(wǎng)絡(faster region convolutional neural networks,F(xiàn)aster R-CNN)算法進行車牌定位,用K-means++算法選擇最佳車牌區(qū)域尺寸,用增強的AlexNet網(wǎng)絡模型識別車牌讀數(shù)。深度學習方法有效提高字符識別準確率,上述先分割字符再單個字符識別的方法,識別過程相對煩瑣;而采用端到端的網(wǎng)絡模型方法,雖解決了識別過程煩瑣的問題,但存在參數(shù)量大、難以部署于低算力嵌入式設備的問題。
為解決現(xiàn)有水表讀數(shù)識別方法存在識別率低及模型參數(shù)量大等問題,現(xiàn)提出一種參數(shù)量較小、檢測精度較高的改進YOLOv4網(wǎng)絡,用于實現(xiàn)水表字符的檢測;根據(jù)網(wǎng)絡模型輸出的邊框信息,利用字符邊框定位的水表讀數(shù)提取方法,來實現(xiàn)水表讀數(shù)特別是“半字”的識別問題。
YOLOv4是著名的YOLO[9-12]目標檢測網(wǎng)絡進一步優(yōu)化平衡目標檢測速度和精度的改進版本,主要由特征提取的主干網(wǎng)絡、特征融合的頸部網(wǎng)絡及進行分類回歸的預測頭三部分構成。
YOLOv4網(wǎng)絡的最前端,是對輸入數(shù)據(jù)進行馬賽克數(shù)據(jù)增強、交叉小批量標準化以及自對抗訓練的預處理結(jié)構。緊鄰預處理結(jié)構的主干網(wǎng)絡,是由YOLOv3的Darknet網(wǎng)絡與交叉階段部分連接網(wǎng)絡(cross stage partial network, CSPNet)[13]聯(lián)合構建的CSPDarknet特征提取網(wǎng)絡,由于在特征圖中融合了梯度信息,因此不僅提高了模型的學習能力,降低了計算復雜度,而且改善了網(wǎng)絡的識別效果。主干網(wǎng)絡之后的頸部網(wǎng)絡,借鑒了路徑聚合網(wǎng)絡(path aggregation network, PAN)的思想[14],在原有特征金字塔(feature pyramid networks, FPN)基礎上,引入空間金字塔池化模塊[15],通過最大池化將輸入特征圖轉(zhuǎn)變?yōu)椴煌叨鹊奶卣鲌D并將其與原特征圖進行拼接的方式,增大了主干特征的接受范圍,顯著的分離了上下文特征;另外,頸部網(wǎng)絡將自頂向下傳達強語義特征的FPN與從底向上傳達強定位特征的PAN結(jié)合,從不同的主干層對不同的檢測層進行參數(shù)聚合,有效改善了深層網(wǎng)絡丟失淺層特征信息的問題。頸部網(wǎng)絡之后的預測頭改進了YOLOv3網(wǎng)絡的損失函數(shù)和非極大值抑制(non-maximum suppression, NMS),其中,采用完全交并比損失來綜合檢測目標框重疊面積,使得預測框的回歸速度與精度均達到最優(yōu),同時NMS算法采用距離交并比損失(distance-IoU loss, DIoU-NMS)來綜合檢測重合邊界框的交并比(intersection over union, IoU)和距離信息,從而有效提升了重疊目標的檢測性能。
為了不降低水表字符檢測精度,有效降低網(wǎng)絡模型參數(shù)量,提出了一種如圖1所示的改進YOLOv4網(wǎng)絡。該網(wǎng)絡利用由深度可分離卷積(簡稱為D)、批標準化(簡稱為B)、Relu6激活函數(shù)(簡稱為R)聯(lián)合構成的DBR模塊來改良標準卷積;構建了提升主干網(wǎng)絡性能的改進逆殘差組件(improved inverse residual component, IIRC),在預測輸出頭引入了加權平均非極大值抑制模塊(weighted average-NMS, Wa-NMS),提升“半字”檢測性能。
2.1.1 YOLOv4網(wǎng)絡卷積的改進
網(wǎng)絡模型中卷積操作主要用于提取更多的圖像特征,因此參與網(wǎng)絡模型計算的參數(shù)量大多比較龐大,而水表讀數(shù)特征相對簡單,用標準卷積會使得特征存在較大冗余,導致網(wǎng)絡模型難以輕量化。為了有效減少YOLOv4主干網(wǎng)絡模型的參數(shù)量,借鑒適用于嵌入式移動設備的輕量模型Mobilenetv1[16],將標準卷積替換為深度可分離卷積,如圖2所示。
圖1 改進的YOLOv4網(wǎng)絡結(jié)構Fig.1 Improved YOLOv4 network structure
圖2 標準卷積與深度可分離卷積Fig.2 Standard convolution and depth separable convolution
圖2(a)中傳統(tǒng)標準卷積是將各通道的輸入特征圖與相應的卷積核卷積并相乘得到輸出特征。圖中Dx和Dy分別為輸入數(shù)據(jù)的長度和寬度,標準卷積操作的計算量X1為
(1)
式(1)中:M和N分別為輸入和輸出數(shù)據(jù)通道數(shù);Dk為卷積核的尺寸;Dw和Dh分別為輸出數(shù)據(jù)的長度和寬度。
圖2(b)中將標準卷積操作分為一個3×3的深度卷積(depthwise convolution, DC)和一個1×1的逐點卷積(pointwise convolution, PC)兩部分,以形成深度可分離卷積,其卷積操作計算量X2為
(2)
由式(1)和式(2)可得出標準卷積與深度可分離卷積之間的計算量比值為
(3)
由式(3)可知,使用深度可分離卷積,網(wǎng)絡模型的參數(shù)量會明顯減少。因此,如圖1所示,在改進YOLOv4網(wǎng)絡中,利用深度可分離卷積、批歸一化及Relu6激活函數(shù)共同構成DBR模塊,并用來代替卷積、批標準化及Leaky Relu函數(shù)組成的CBL模塊。
2.1.2 YOLOv4主干網(wǎng)絡的改進
為了保持網(wǎng)絡模型的檢測精度,并進一步降低模型的參數(shù)量,改進YOLOv4借鑒Sandler等[17]提出的Mobilenetv2瓶頸結(jié)構改進YOLOv4的CSPDarknet主干網(wǎng)絡。Mobilenetv2瓶頸結(jié)構中的逆殘差組件如圖3(a)所示,首先用1×1卷積提升通道數(shù),再用3×3的DC進行特征提取,最后用1×1的PC降低維度。該逆殘差組件大為降低了參數(shù)量,但提取特征過少,從而影響檢測精度。為此,通過在原來逆殘差組件3×3的DC后引入SE注意力機制模塊[18],來構建如圖3(b)所示的改進逆殘差組件IIRC。IIRC主要在原有逆殘差組件基礎上,衍生出壓縮和激發(fā)兩個步驟,壓縮步驟在特征圖上執(zhí)行全局平均池化,得到當前特征圖的全局壓縮特征量,而激發(fā)步驟則通過兩層全連接的主干結(jié)構得到特征圖中每個通道的權值,并將加權后的特征圖作為下一層網(wǎng)絡的輸入。引入SE注意力機制的IIRC,能對不同通道提取更多細節(jié)特征,降低參數(shù)量的同時保持較高檢測精度。
圖3 改進的YOLOv4主干網(wǎng)絡Fig.3 Improved YOLOv4 backbone network
2.1.3 YOLOv4預測輸出頭的改進
YOLOv4網(wǎng)絡直接用于水表讀數(shù)檢測,其DIoU-NMS會選中置信度最高的邊界框[19],因此其他邊界框在后續(xù)的比較中,會因為與置信度最大框的重疊面積過大而被刪除,從而增大了錯檢與漏檢的概率。另外,傳統(tǒng)水表時常出現(xiàn)兩個字符上下并列且各占一部分的“半字”情況,進而導致漏檢或錯檢概率進一步增大。為此,改進YOLOv4網(wǎng)絡在預測輸出頭部分引入了Wa-NMS。引入Wa-NMS后,一個目標被檢測出來的所有邊框?qū)⒈A舸笥诜菢O大值抑制閾值的預測框,對置信度最高的預測框以及交并比大于閾值的預測框進行坐標加權平均,從而獲得最終輸出的預測框。Wa-NMS的實現(xiàn)用公式描述為
(4)
Wi=CiIoU(Bi,bmax)
(5)
(6)
式中:DetectionResult為預測框;GroundTruth為人工標記框;n為預測框的數(shù)量;i為數(shù)字變量;BOX為邊界框;加權因子Wi等于第i個置信度Ci與第i個邊界框Bi的交并比和具有最大置信度邊界框IOU(Bi,bmax)的乘積。
采用Wa-NMS通過多框共同決定一框的策略,能有效降低水表讀數(shù)中“半字”檢測存在的漏檢和錯檢問題,提升水表讀數(shù)識別精度。
水表讀數(shù)識別方法利用改進YOLOv4網(wǎng)絡檢測出水表讀數(shù)字符后,將采用基于字符邊框定位的方法來提取水表讀數(shù)的具體數(shù)值。
改進YOLOv4網(wǎng)絡通過3個不同的尺度對水表字符進行預測,預測信息包括:矩形框boxes的信息[Tx,Ty,Tw,Th]、檢測框置信度score及框類別標簽ClassIDs,其中,Tx、Ty、Tw、Th分別為預測框左上角的橫坐標、縱坐標與右下角的橫坐標、縱坐標。通過設置檢測框置信度閾值為0.5和IoU=0.4能有效地檢測到每個水表讀數(shù)字符,檢測結(jié)果示意圖如圖4所示。
水表讀數(shù)的分布存在明顯的規(guī)律性,即:水表字符有5位讀數(shù),且按0~9依次變化;每個字符之間存在一定的間隙;時常出現(xiàn)兩個字符上下并列且各占一部分的“半字”情況,而兩個字符所占比例的差異決定了“半字”的實際精度。根據(jù)這些先驗信息,將水表讀數(shù)分為無“半字”與有“半字”讀數(shù)兩類,而基于字符邊框定位的方法來提取水表讀數(shù)具體數(shù)值的流程如圖5所示。
d1為上邊框的高度;d2為下邊框的高度圖4 水表檢測結(jié)果示意圖Fig.4 Schematic diagram of water meter test results
圖5 基于字符邊框定位的水表讀數(shù)提取流程圖Fig.5 Flow chart of water meter reading extraction based on character frame positioning
在改進YOLOv4網(wǎng)絡輸出預測信息后,通過每個預測框的Tx值對預測框進行由小到大的排序。對無“半字”的水表讀數(shù)識別,直接輸出排序后的ClassIDs作為水表讀數(shù)的數(shù)值。對有“半字”的水表讀數(shù),為了精準識別到小數(shù)點后一位,首先,依次對前目標框boxes[i]與后目標框boxes[i+1]的Ty值做差,對比得到Ty差值最小的boxes[i]與boxes[i+1],其中,boxes[i]為i目標框的位置信息;接著根據(jù)兩者目標框的Th值來確定哪個目標框位于水表讀數(shù)的上部,并將上部字符作為該位水表讀數(shù)的整數(shù)位;進而通過判斷boxes[i]與boxes[i+1]各自Ty與Th的差值,通過d1和d2所占的比例,得到該位水表讀數(shù)的小數(shù)位,用T表示;最后整合輸出所有的整數(shù)位與小數(shù),即可獲得包含1位小數(shù)的6位完整水表讀數(shù)數(shù)值,如圖6所示。
圖6 水表讀數(shù)識別效果圖Fig.6 Water meter reading recognition effect diagram
為了驗證所提方法性能,選用YOLOv3、YOLOv4、YOLOv4-Mobilenetv3(YOLOv4-MV3)、SSD和RetinaNet五種網(wǎng)絡模型作為對比方法。各檢測方法實驗的環(huán)境均為Ubuntu 16.04操作系統(tǒng),深度學習硬件平臺為i5-7500 CPU @3.4GHZ,顯卡型號為GTX 1080。
實驗所用水表數(shù)據(jù)集均通過30萬像素的OV7725攝像頭拍攝得到。水表數(shù)據(jù)集共5 567張,其按類別分為無“半字”905張和有“半字”2 190張,同時包含受光照不均、霧化、抖動等干擾的水表復雜場景圖像618張。
實驗中訓練模型采用PASCAL VOC的數(shù)據(jù)集格式,先用Labelimg 標注工具對每張圖片目標物體所在區(qū)域進行手工數(shù)據(jù)標注矩形框,得到真實框 ground truth用于訓練。數(shù)據(jù)集的標簽種類依據(jù)水表讀數(shù)0~9設置為10類,如讀數(shù)0設置為“0”標簽。數(shù)據(jù)集按照8∶1∶1的比例劃分為訓練數(shù)據(jù)集、驗證數(shù)據(jù)集與測試數(shù)據(jù)集。
為了確保實驗的公平性,本文方法網(wǎng)絡與其他5種網(wǎng)絡的模型訓練參數(shù)保持一致,輸入的原始水表圖片為192×256像素,通過輸入將改進的YOLOv4網(wǎng)絡中調(diào)整為416×416像素。初次訓練設置批量為8,凍結(jié)迭代次數(shù)為50,學習率為0.001;第二次訓練設置批量為8,迭代次數(shù)為100,學習率為0.000 1。
為縮短訓練時間同時提高模型的泛化能力,實驗引入遷移學習,預先將訓練了11 520張水表讀數(shù)圖片的網(wǎng)絡模型遷移到改進的YOLOv4網(wǎng)絡模型中,然后使用上述訓練參數(shù)對預訓練模型進行訓練調(diào)整。
實驗選用了Padilla等[20]提出的準確率(precision,P)、召回率(recall,R)、平均準確率(average precision,AP)、調(diào)和均值F1以及平均精度均值(mean average precision,MAP)5個指標來進行評價,評價指標的計算公式分別為
(7)
(8)
(9)
(10)
(11)
式中:TP為正確檢測到水表讀數(shù)的數(shù)量;FP為檢測的水表讀數(shù)出現(xiàn)分類錯誤的數(shù)量;FN為圖片中的目標漏檢的數(shù)量;K為標簽樣本的總數(shù)量;F1為準確率P和召回率R的調(diào)和平均值;AP為準確率與召回率所繪制的曲線面積圖;MAP為P和R所繪制曲線面積圖的均值。P值越大,說明水表讀數(shù)檢測的準確率越高;R值越大,表明水表讀數(shù)檢測中漏檢概率越低。但有時候P和R是一對矛盾值,因此采用F1來評價模型好壞,F(xiàn)1越逼近于1說明模型優(yōu)化的越好。MAP值越高,證明水表檢測模型具有更強的魯棒性和泛化能力。另外,實驗中還記錄了各網(wǎng)絡模型所占內(nèi)存的大小,用來評價其網(wǎng)絡參數(shù)量的多少。
實驗有所識別方法對普通和復雜場景圖像讀數(shù)的識別性能指標對比如表1和表2所示,識別效果對比如圖7所示。
表1 各方法對普通場景水表圖像讀數(shù)識別的指標對比Table 1 Comparison of indicators for recognition of water meter image readings in common scenes by various methods
表2 各方法對復雜場景水表圖像讀數(shù)識別的指標對比Table 2 Comparison of indicators for recognition of water meter image readings in complex scenes by various methods
圖7 各方法對多種場景水表讀數(shù)的識別效果對比圖Fig.7 Comparison chart of the recognition effect of various methods on water meter readings in various scenarios
由表1可知,在普通場景下,本文方法性能指標均優(yōu)于其他5種網(wǎng)絡模型方法,其中,準確率提升了0.04%以上,召回率提升了0.05%以上,F(xiàn)1提升了0.1%以上,MAP提升了0.03%以上,模型參數(shù)量壓縮了14.3%以上。由表2可知,在復雜場景下,本文方法的性能指標與其他5種網(wǎng)絡模型方法相比具有更大的優(yōu)勢,其中,準確率提升了0.11%以上,召回率提升了0.38%以上,F(xiàn)1提升了0.4%以上,MAP提升了0.06%以上。
圖7展示了各方法對數(shù)據(jù)集中選取的1幅普通場景水表圖片(從左到右第一張)和4幅復雜場景水表圖片(從左到右第二~第五張,依次為曝光場景、黑暗場景、圖像傳感器抖動場景、出現(xiàn)水滴或霧化污染場景)的讀數(shù)識別效果對比圖。由圖7可知,對于普通場景水表圖像,各方法均可正確檢測水表讀數(shù),但對于復雜場景水表圖像,5種對比方法均出現(xiàn)了錯檢或漏檢問題。如在曝光場景下,YOLOv4-MV3出現(xiàn)漏檢情況;在黑暗場景下,YOLOv4-MV3以及YOLOv3出現(xiàn)漏檢情況;在圖像傳感器抖動場景下,YOLOv3以及SSD出現(xiàn)漏檢情況,YOLOv4-MV3、RetinaNet以及YOLOv4出現(xiàn)將數(shù)字1錯檢成0的情況;在出現(xiàn)水滴或霧化污染場景下,YOLOv4-MV3、SSD及YOLOv3出現(xiàn)漏檢情況,YOLOv4與RetinaNet出現(xiàn)將讀數(shù)7錯檢成1的情況;而本文方法均能夠正確地檢測出水表讀數(shù),顯然,本文方法對復雜場景圖像及“半字”讀數(shù)具有更好的識別效果。
提出了一種基于改進YOLOv4的水表讀數(shù)識別方法。該方法改進YOLOv4利用深度可分離卷積代替原有的標準卷積,并在此基礎上引入SE注意力機制和MobileNetv2瓶頸結(jié)構,使得網(wǎng)絡模型的參數(shù)量和計算量降低為原來的1/6左右,同時結(jié)合加權平均非極大值方法有效改善了水表讀數(shù)字符特別是“半字”的漏檢與錯檢問題。由實驗結(jié)果可得,所提方法的準確率、召回率等性能指標均優(yōu)于對比方法。下一步工作是將其應用于低算力嵌入式設備中,為實現(xiàn)商業(yè)化提供可能。