潘梓陽 葉寧
關(guān)鍵詞:Unet神經(jīng)網(wǎng)絡(luò);車牌提??;損失函數(shù);神經(jīng)網(wǎng)絡(luò)深度
0 引言
車牌智能識別在停車場管理、刑事偵破、交通安全智能化、智慧城市建設(shè)等方面都有著長足意義。如果能夠開發(fā)出一套有效的車牌識別算法,不僅可以減少大量人力物力,而且可以結(jié)合嵌入式技術(shù),與傳統(tǒng)監(jiān)控攝像系統(tǒng)結(jié)合,將監(jiān)視到的車牌數(shù)據(jù)實時上傳服務(wù)器云端,獲得更加具有時效性的車輛時空信息。
目前采用的車牌內(nèi)容識別方法主要有模板匹配與CNN網(wǎng)絡(luò)算法等,但無論采用何種算法,都必須先提取出圖像中車牌區(qū)域才能獲得較好的效果。因此,如果要實現(xiàn)車牌內(nèi)容的智能識別,必須先找到一種可靠的車牌區(qū)域提取方法。為了解決這一問題,本文采用改進后的Unet網(wǎng)絡(luò)進行圖片的語義分割。從損失函數(shù)和神經(jīng)網(wǎng)絡(luò)深度兩方面對普通Unet神經(jīng)網(wǎng)絡(luò)進行改進,采用Photoshop軟件手動標注800張含有車牌的圖像作為數(shù)據(jù)集,對改進后的Unet網(wǎng)絡(luò)進行訓練,最終識別準確率達到94%以上,loss函數(shù)下降至2左右,訓練效果良好。
1 研究現(xiàn)狀
雷德超等人[1]采用的車牌區(qū)域提取方法主要是輪廓檢測法,該方法的依據(jù)是我國車牌為矩形并具有統(tǒng)一的長寬比例。這種方法較為成熟,但具有很大的局限性:很多時候車牌圖像的拍攝角度不甚理想,導致圖中車牌的輪廓并非矩形,這說明此方法泛化性不佳;并且此算法需要采用圖像灰度、腐蝕、膨脹等操作,對照片的亮度、清晰度等條件具有苛刻要求。
除了以上說明的邊緣檢測方法,目前已有的車牌分割方法還包括明月星等人[2]提出的聚類方法,王明吉[3]等人采用的YOLO算法等,但這些已有算法都存在一定問題:聚類方法仍是一種傳統(tǒng)算法,其泛化性和穩(wěn)定性不高;YOLO算法雖然是一種神經(jīng)網(wǎng)絡(luò)算法,但是需要大量數(shù)據(jù)集進行訓練才能得到較好的效果。
為了開發(fā)出具有良好泛化性、穩(wěn)定性的車牌分割系統(tǒng),不妨從人工智能領(lǐng)域?qū)ふ宜悸?。語義分割(Se?mantic Segmentation)是圖像處理和機器視覺一個重要分支。語義分割就是按照“語義”給圖像上目標類別中的每一點打一個標簽,使得不同種類的東西在圖像上被區(qū)分開來,這為解決車牌位置提取問題提供了新思路。
文獻[7]和闞希[4]等人在開發(fā)移動端車牌系統(tǒng)的過程中采用了普通Unet神經(jīng)網(wǎng)絡(luò)來分割車牌區(qū)域,但原文中并未給出Unet網(wǎng)絡(luò)訓練的詳細參數(shù)(如損失函數(shù)變化)等情況。為了驗證本文提出改進方法的有效性,在下文會首先給出普通Unet神經(jīng)網(wǎng)絡(luò)在自制數(shù)據(jù)集上的訓練詳細情況,再進行改進后神經(jīng)網(wǎng)絡(luò)的訓練,以便進行對比驗證改進方法的有效性。
2 算法介紹
Unet 算法是一種語義分割算法,由Ronneberger 發(fā)表于2015年,是比較先進熱門的人工智能算法之一。Unet神經(jīng)網(wǎng)絡(luò)屬于是全卷積神經(jīng)網(wǎng)絡(luò)(FCN) 的一種變體,最早應(yīng)用于各種醫(yī)學圖像的處理之中。
圖1是Unet神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖,圖中的橫向短箭頭(除最右上角的外)表示3×3卷積,以實現(xiàn)特征提??;橫向長箭頭表示skip-connection,實現(xiàn)特征融合;向下箭頭表示池化操作,用于降低維度;向上箭頭表示上采樣,用于維度恢復;最右上角的橫向箭頭表示1×1卷積,即輸出結(jié)果。
本文對此神經(jīng)網(wǎng)絡(luò)進行兩方面改進:1) 針對原有網(wǎng)絡(luò)層數(shù)較淺的問題,加深神經(jīng)網(wǎng)絡(luò)層數(shù),以便在訓練中提取更深層次的特征;2) 采用Huber loss代替均方誤差(MSE) 作為損失函數(shù)指導網(wǎng)絡(luò)訓練,以避免模型在使用均方誤差作為損失函數(shù)時為降低損失函數(shù)強行使用奇異點進行擬合。
3 算法適應(yīng)性
Unet神經(jīng)網(wǎng)絡(luò)最初用于醫(yī)學圖像的處理中,如張雷等人[5]將其運用在視網(wǎng)膜血管的分割問題中。由于醫(yī)學圖像語義簡單且結(jié)構(gòu)穩(wěn)定,因此高級語義信息和低級特征都顯得很重要,使得Unet特征融合結(jié)構(gòu)起到了很大作用;同時,由于醫(yī)學圖像較少,采用大規(guī)模架構(gòu)會導致參數(shù)過多,很容易在訓練集不夠的情況下產(chǎn)生過擬合現(xiàn)象,因此Unet神經(jīng)網(wǎng)絡(luò)采取了小型架構(gòu),縮小200% 后神經(jīng)網(wǎng)絡(luò)參數(shù)量僅在7M 左右,小巧輕便。
時至今日,Unet神經(jīng)網(wǎng)絡(luò)作為一種在圖像語義分割中有重要地位的算法,應(yīng)用范圍早已不限于醫(yī)學圖像,周思雨等人[6]將其應(yīng)用于冶金相關(guān)研究中。而車牌作為一種語義簡單、結(jié)構(gòu)穩(wěn)定的圖像,也非常適合采用Unet神經(jīng)網(wǎng)絡(luò)進行處理;由于車牌的特殊性,很難找到大量的車牌圖像用于模型訓練,Unet結(jié)構(gòu)即使在訓練集數(shù)量較少時也能有著不錯的性能,這為人工搜集數(shù)據(jù)、標注訓練集提供了可行性。
4 對Unet 神經(jīng)網(wǎng)絡(luò)的改進
從Unet神經(jīng)網(wǎng)絡(luò)的特殊結(jié)構(gòu)可以發(fā)現(xiàn),適當加深神經(jīng)網(wǎng)絡(luò)層數(shù)可以有效提升網(wǎng)絡(luò)效果,這是由于神經(jīng)網(wǎng)絡(luò)層數(shù)越多越能更有效地提取更大量的細節(jié)信息進行學習。但是,原有的Unet網(wǎng)絡(luò)層數(shù)較少,針對自制的、相對數(shù)據(jù)量較小的訓練集,需要較長時間才能得到理想的學習效果。為了解決這一問題,筆者在原有神經(jīng)網(wǎng)絡(luò)上加深一層,多進行一次池化四次卷積,并對應(yīng)增加一次上采樣,以增加神經(jīng)網(wǎng)絡(luò)對細節(jié)信息的學習情況。
普通Unet神經(jīng)網(wǎng)絡(luò)采用均方誤差(MSE) 作為損失函數(shù)指導神經(jīng)網(wǎng)絡(luò)訓練。這種損失函數(shù)存在一個問題,即為了滿足損失函數(shù)下降的條件,可能對偏離正常樣本的特異點做出比較大的反應(yīng)。在本次訓練中,筆者只有自制的800張圖片數(shù)據(jù)集,樣本存在較大隨機性,若采用均方誤差作為損失函數(shù)訓練,很可能出現(xiàn)過擬合現(xiàn)象,不利于模型的泛化運用。而平均絕對誤差(MAE) 可以克服均方誤差(MSE) 的缺點,但是由于此函數(shù)的特殊性質(zhì),導致在誤差大和誤差小時保持同等速度下降,訓練速度很慢,無法滿足數(shù)據(jù)集時常更新的商業(yè)需求,并且此函數(shù)在某些位置甚至不可導,無法指導模型訓練。
本文采用的損失函數(shù)是Huber loss函數(shù),這種損失函數(shù)集合了MSE和MAE兩種函數(shù)的優(yōu)勢,原理是:首先設(shè)置一個超參數(shù)δ,若實際值和預測值之差的絕對值在δ以內(nèi),則采用MSE作為損失函數(shù);若絕對值大于δ,則采用類MAE函數(shù)作為損失函數(shù)。這樣既能滿足損失函數(shù)快速下降的要求,又能防止特異點對訓練產(chǎn)生干擾;曾有研究證明,當超參數(shù)δ=1.35時,有效性可以達到95%,效果好于另外兩種損失函數(shù)。
5 準備訓練數(shù)據(jù)集
進行神經(jīng)網(wǎng)絡(luò)的訓練,需要先制作訓練數(shù)據(jù)集,由于車牌數(shù)據(jù)的特殊性,很難直接找到開源的訓練數(shù)據(jù)集。但得益于Unet神經(jīng)網(wǎng)絡(luò)即使在訓練集較少的情況下也能有比較好的訓練效果的特點,可以采用手動方法自行標注數(shù)據(jù)集。
筆者搜集到了800張車牌圖片,為了提升神經(jīng)網(wǎng)絡(luò)的訓練效率,將這些車牌圖片統(tǒng)一為512×512的正方形圖片;采用Photoshop軟件對其進行手動標注,標注方法如下:將圖像中車牌區(qū)域設(shè)置為RGB色號為(255,255,255) 的純白色,將圖像中其他區(qū)域設(shè)置為RGB色號為(0,0,0) 的純黑色即可,標注效果如下。
6 訓練過程
本項目代碼全部采用Python 編寫,采用Tensor?Flow框架,使用GPU進行模型訓練,使用Pycharm開發(fā)工具,開發(fā)環(huán)境為:Windows 10操作系統(tǒng),內(nèi)存為16GB,采用Intel(R) Core(TM) i7-10870H CPU @2.20GHz 2.21 GHz處理器,顯卡為英偉達3060。
BATCH_SIZE 即一次訓練所抓取的數(shù)據(jù)樣本數(shù)量,合理設(shè)置BATCH_SIZE可以使得系統(tǒng)GPU滿載運行,提升訓練效率,并且可以使得梯度下降方向更為準確;如果BATCH_SIZE設(shè)置過小,訓練很容易出現(xiàn)過擬合現(xiàn)象,而如果設(shè)置過大,可能會出現(xiàn)由于內(nèi)存限制導致訓練失敗的情況;本次訓練BATCH_SIZE設(shè)置為5,考慮到商業(yè)應(yīng)用中數(shù)據(jù)集需要經(jīng)常更新的情況,訓練輪數(shù)不宜設(shè)置過大,本文設(shè)置為40輪。
為了驗證改進方法的有效性,本文采用傳統(tǒng)Unet 網(wǎng)絡(luò)和改進后Unet 網(wǎng)絡(luò)分別在自制數(shù)據(jù)集上進行訓練。
圖4~圖5兩張圖橫軸均為訓練輪數(shù),可以看到,隨著訓練的進行,損失函數(shù)值不斷減少,而訓練準確率不斷增加。loss函數(shù)是神經(jīng)網(wǎng)絡(luò)中常用的函數(shù),表示“損失函數(shù)”?!皳p失”就是所有樣本“誤差”的總和,通常會在根據(jù)某個樣本的誤差調(diào)整網(wǎng)絡(luò)權(quán)重后,計算整體樣本的損失函數(shù)值,來判定網(wǎng)絡(luò)是否已經(jīng)訓練到了可接受的狀態(tài)。損失函數(shù)的作用,就是計算神經(jīng)網(wǎng)絡(luò)每次迭代的前向計算結(jié)果與真實值的差距,從而指導下一步的訓練向正確的方向進行。因此loss的值越小代表神經(jīng)網(wǎng)絡(luò)的泛化能力越強,越能夠適應(yīng)多種情況下的分割任務(wù)。
相比于loss函數(shù),accuracy函數(shù)比較好理解,表示通過Unet神經(jīng)網(wǎng)絡(luò)自主標注出的二值化圖像與手動標注的二值化圖像相對比,吻合程度的量化值,就是訓練的準確率。為了證明本文所做改進的有效性,將改進前和改進后網(wǎng)絡(luò)的訓練準確率于同一張圖顯示,方便對比。
從圖6中可以明顯看出,在整個訓練過程中改進后模型的準確率均優(yōu)于改進前的模型。改進后的模型在第四輪訓練后開始穩(wěn)定上升,并且于第20輪左右基本穩(wěn)定,40輪訓練過后模型準確率可達94%,效果良好。而改進前的模型整個訓練過程并不穩(wěn)定,甚至出現(xiàn)了準確率上升后迅速下降的情況,體現(xiàn)了MSE函數(shù)作為損失函數(shù)時,模型可能由于特異點的存在產(chǎn)生過擬合現(xiàn)象;模型直到第20輪訓練才開始出現(xiàn)準確率穩(wěn)定上升的情況,此時改進后的模型準確率已經(jīng)趨于穩(wěn)定。綜上所述,改進后模型的準確程度優(yōu)于未改進的傳統(tǒng)Unet模型,結(jié)合損失函數(shù)來說,改進后模型損失函數(shù)于第10輪后便沒有非常大幅度的變化,可以推測改進后模型在較少輪數(shù)的訓練中即能獲得穩(wěn)定且準確的預測性能,符合商業(yè)應(yīng)用上數(shù)據(jù)集訓練的需求。
7 預測效果
筆者采用綠色邊框來標出車牌區(qū)域,效果如圖6。
可以看出,系統(tǒng)基本準確標注出了車牌所在的區(qū)域。接下來,筆者嘗試角度不理想狀態(tài)下的情況。
由圖7可以看出,在角度不理想情況下,系統(tǒng)仍舊可以準確標記出車牌位置,說明系統(tǒng)具有一定泛化性。
由圖8可以看出,本系統(tǒng)對圖像中有多張車牌的情況依舊能做出正確的標記,貼近實際情境中的需求。
8 預測結(jié)果分析
通過多次測試,本系統(tǒng)訓練后能夠較為準確地標記出圖像中的車牌位置,對角度不理想或拍攝光照條件不理想狀態(tài)下的圖片依舊具有有效性,同時,對多個車牌同時出現(xiàn)的情況也具有較好的效果。但是,由于本系統(tǒng)訓練采用的數(shù)據(jù)集絕大多數(shù)車牌都是藍牌,因此對其他顏色的拍照則不具備標注能力,后續(xù)工作中預計采用更多樣化顏色的車牌數(shù)據(jù)集對系統(tǒng)進行訓練,應(yīng)該能夠解決這一問題。
9 結(jié)論
本文對Unet神經(jīng)網(wǎng)絡(luò)從損失函數(shù)和網(wǎng)絡(luò)深度兩方面進行改進,采用改進后Unet神經(jīng)網(wǎng)絡(luò)作為核心算法,采用自制的800張圖片數(shù)據(jù)集作為訓練集為模型進行訓練,訓練輪數(shù)為40輪,識別準確率約為94%,滿足商業(yè)數(shù)據(jù)庫更新需求,優(yōu)于傳統(tǒng)Unet神經(jīng)網(wǎng)絡(luò);訓練后的系統(tǒng)對不同角度、不同拍攝條件下的圖片均有較好的標注能力,具有一定泛化性,且對計算機硬件需求不高,運行速度快,體量較?。s7M),可以應(yīng)用于嵌入式系統(tǒng)、云端系統(tǒng)之中。