李世偉
(上海建橋學院 上海市 201306)
YOLOv5 目標檢測算法是將物體的定位和分類在一起完成,在一個輸出層回歸bounding box 的位置和所屬類別,在場景復雜的地方,誤檢會相對較多,而LPRNet[1]由輕量級的卷積神經網絡組成,它采用端到端[2]的方法來進行訓練,并且創建嵌入式部署的解決方案,以此來提高車牌識別的準確率和運算效率。
在車輛目標檢測與車牌識別過程中,通過使用構成YOLOv5 模型的骨干網絡CSPDarknet5 與LPRNet 的Backbone 來提取車輛圖片信息的特征。然后,利用這些特征對LPRNET 和YOLOv5 的Neck 與Head 部分進行訓練,最后,利用訓練好的模型對車輛與車牌進行目標檢測。圖1顯示了使用YOLOv5 模型進行車輛目標檢測與LPRNET 模型進行車牌識別的框架。一般來說,該方法分為模型訓練過程和模型推理兩部分。在訓練過程中,利用標注好的數據進行提取特征,支持目標檢測與車牌識別任務的訓練。在識別過程中,將車輛圖片信息輸入給訓練好的混合模型進行識別。

圖1:Yolov5 模型車輛目標檢測與LPRNET 模型車牌識別框架
2.1.1 輸入端
YOLOv5 模型的輸入端采用了和YOLOv4[3]模型一樣的數據增強的方式,即Mosaic 數據增強,利用隨機縮放、隨機裁剪、隨機排布的方式進行拼接,對于小目標的檢測效果具有明顯提升。YOLOv5 算法針對不同的數據集,都會有初始設定長寬的錨框。在網絡訓練中,網絡在初始錨框的基礎上輸出預測框,進而和真實框Ground Truth 進行比對,計算兩者差距,再反向更新,迭代網絡參數。在常用的目標檢測算法中,不同的圖片長寬都不相同,因此常用的方式是將原始圖片統一縮放到一個標準尺寸,再送入檢測網絡中。比如YOLO 算法中常用416×416,608×608 等尺寸。
YOLOv5 代碼中對此進行了改進,也是YOLOv5 推理速度能夠很快的一個不錯的技巧。在實際的應用場景中,很多圖片的長寬比不同,所以通過縮放填充后,兩端的黑邊大小不一致,并且填充的比較多,則會導致信息冗余,影響模型推理速度,只要在原圖像自適應地添加最少黑邊,在推理時,計算量減少,目標檢測速度就能得到提升。
2.1.2 骨干網絡
該層的Focus 結構,從高分辨率圖像中,周期性的抽出像素點重構到低分辨率圖像中,即將圖像相鄰的四個位置進行堆疊,聚焦wh(width&&height)維度信息到C(channel)通道空間,提高每個點感受野,并減少原始信息的丟失,該模塊的設計主要是減少計算量加快速度。YOLOv5 默認3×640×640 的輸入,先復制四份,然后通過切片操作將這個四個圖片切成了四個3×320×320 的切片,接下來使用concat從深度上連接這四個切片,輸出為12×320×320,之后再通過卷積核數為64 的卷積層,生成64×320×320 的輸出,最后經過batch_borm 處理和Leaky_ReLU 激活處理將結果輸入到下一個卷積層。
該層的BottleneckCSP 模塊主要包括Bottleneck 和CSP兩部分,YOLOv5 模型中的的Cross Stage Partial(CSP)結構,其初衷是減少計算量并且增強梯度的表現。主要思想是:在輸入Dense_block 之前,將輸入分為兩個部分,其中一部分通過block 進行計算,另一部分直接通過一個shortcut 進行concatenate。模型采用CSP 結構的有加強卷積神經網絡的學習能力,減少計算算力與內存消耗的優點,現在的網絡大多計算算力成本昂貴,不利于深度學習的工業落地。
該層的SPP 模塊(空間金字塔池化模塊),其作用就是將不同的特征圖轉化為固定的特征圖,通過分別采用5/9/13的最大池化,再進行concat 融合,提高感受野。SPP 的輸入是512×20×20,經過1x1 的卷積層后輸出256×20×20,然后經過并列的三個MaxPool 進行下采樣,將結果與其初始特征相加,輸出1024×20×20,最后用512 的卷積核將其恢復到512×20×20。
2.1.3 Neck 層
YOLOv5 的Neck 層采用PAN+FPN 的結構,PANET 基于Mask R-CNN 和FPN 框架,加強了信息傳播,具有準確保留空間信息的能力,可以對像素進行適當的定位以形成掩模。
2.1.4 輸出層
YOLOv5 中采用其中的GIoU_Loss 做Bounding box 的損失函數。GIoU 的全稱為通用交并比,對于任意的兩個A、B 框,首先找到一個能夠包住它們的最小方框C。然后計算C (A ∪ B) 的面積與C 的面積的比值,再用A、B 的IoU 值減去這個比值得到GIoU,所以GIoU_loss=1-GIoU。注:C (A ∪ B) 的面積為C 的面積減去A∪B 的面積。GIoU 損失函數計算如下:
LGIOU=1-IOU(A,B)+|C-A ∪ B|/|C|
2.1.5 訓練
本設計目標檢測模型是基于Windows10 操作系統,python3.7,torch1.20,cuda11 以及torchvision0.40 的環境進行訓練。本論文目標檢測部分使用VOC 格式數據集進行訓練。訓練前將標簽文件放在VOCdevkit 文件夾下的VOC2007 文件夾下的Annotation 中,訓練前將圖片文件放在VOCdevkit 文件夾下的VOC2007 文件夾下的JPEGImages中。
在配置參數上,可通過pytorch 提供的API 進行訓練參數修改,方便修改訓練模型的超參數與文件配置。對于模型存放路徑,可通過init_logger 函數,進行對模型的進行實時保存到目標文件夾,同時生成日志文件,可觀測模型訓練時的epoch、loss、accuracy 等模型訓練指標。在環境配置好與數據集準備存放好后的情況下,最后直接運行python train.py 就可直接訓練。
2.2.1 輸入端
LPRNet 在輸入端采用STN(Spatial Transformer Network)網絡對輸入圖像進行處理,STN 處理是可選的過程,STN的出現使我們完成如何變換圖像來獲得優秀的車牌識別輸入圖像。我們選擇LocNet 網絡結構用于產出最佳的轉換參數來實現。如表1 所示。

表1: LOCNET 結構
2.2.2 骨干網絡
LPRNet 采用輕量級的CNN[4]骨干網絡,LPRNet 骨干網絡輸入原生RGB 圖像,使用CNN 來提取圖像特征。骨干子網絡的輸出可認為是一個代表對應字符概率的序列,它的長度與輸入圖像的寬度相關。主干結構如表2 所示。

表2:主干結構
2.2.3 訓練
本設計車牌識別模型是基于Windows10 操作系統,python3.7,torch1.20,cuda11 以及torchvision0.40 的環境進行訓練。可通過pytorch 提供的API 進行訓練參數修改,方便修改訓練模型的超參數與文件配置。可通過pytorch 提供的API 進行訓練參數修改,方便修改訓練模型的超參數與文件配置。如圖2 所示。

圖2:配置參數
在環境配置好與數據集準備存放好后的情況下,最后直接運行python train_LPRNet.py
就可直接訓練。
2.2.4 實驗結果
本LPRNet 網絡設計在CCPD[5]中文車牌數據集進行實驗,車牌通過YOLOv5 車牌檢測方法獲得,數據集按照9:1的比例分為測試集和訓練集,本文使用開源出來的模型權重進行實現識別車牌的下游任務。LPRNet 在不同設備上的表現如表3 所示,可以看出LPRNet 可以用于需要實時處理的任務。

表3:性能分析
本設計的目標檢測數據集使用VOC2007 標注好的數據集,總數為9963 張圖片,其中包括訓練數據集5011 張和測試數據集4952 張。
車牌檢測與識別數據集來源于標注好的CCPD 數據集,CCPD 數據集一共包含超多25 萬張圖片,每種圖片大小720x1160x3,選取部分CCPD 數據集作為本設計中的車牌檢測與識別的數據集,總共包含9 項,占比如圖3 所示。

圖3:車牌檢測與識別數據集占比
每項占比的意義如表4 所示。

表4:CCPD 數據集占比及其意義
本設計在識別精確度、模型推理速度與可視化呈現結果上都取得了良好的效果。現有的車輛與車牌檢測和車牌識別方法大多集中在車輛的顏色、大小和形狀上,受天氣和光照,相機拍攝等因素的影響很大。通過對YOLOv5Net 與LPRNet 提取的特征進行了分析,利用與視覺任務強相關的測試樣本集對目標檢測模型與車牌識別模型進行測試。實驗結果表明[6],當測試樣本場景與視覺任務相關度越高,得到的目標檢測模型與車牌識別模型的效果越好,能夠為交通車輛識別與管理等作業提供可靠、高效的車輛信息。
該設計在實際應用中,還存在著一些不足,如在模型推理的速度上還需要精進,為了模型的實際部署應用還需要模型蒸餾方便部署在各種硬件設備。