趙逸如,劉正熙,熊運余,嚴廣宇
(四川大學計算機學院,成都610065)
隨著經濟和城鎮化建設的快速發展,我國各城市的道路和車輛總量不斷增長,車輛違規停放行為也日益增加,對城市道路監控圖像或者視頻中車輛違規檢測已成為城市管理中的一項重要的任務。雖然高清監控攝像頭已經在絕大多數路口部署,但每日產生的視頻量也越來越龐大,通過人工進行視頻實時監控或離線處理既費時又費力,而且容易延誤和遺漏,所以急需尋找一種高效的方法輔助人工進行監控處理。
傳統的車輛檢測方法使用滑動窗口策略,通過HOG[1]、SIFT[2]等方法對目標特征進行提取,并將提取到的特征送入SVM、AdaBoost 等分類器進行分類識別[3]。這些特征本質上是一種手工設計的特征,針對不同的識別問題,提取到的特征好壞對系統性能有著直接的影響。由于監控視頻的分辨率、攝像角度和方向都有著很大的差異,再加上不同時刻光線亮度的差異、大風帶來的攝像頭抖動等因素,使得監控視頻中的圖像質量受到影響;同時車輛的種類繁多,人工提供的特征無法滿足車輛種類特征的需求,這對車輛檢測帶來了極大的困難,因此傳統的車輛檢測方法效果表現不佳。
近些年來,深度學習發展迅速,基于卷積神經網絡的模型層出不窮。與傳統方法相比,基于深度學習的目標檢測算法以及語義分割算法提取特征能力強、準確率高,已經被應用到人臉識別、自動駕駛、醫療影像等各種領域。
車輛違停是個非常普遍的問題,其中人行道違規停車占了車輛違停事件的絕大多數。人行道違規停車會破壞市容、影響行人出行、堵塞交通甚至覆蓋盲道,導致盲人無法通行,如圖1 所示。而對于復雜的道路情況進行分析,從而找到車輛違停事件是一項十分有挑戰性的工作。本文將車輛違停問題簡化為人行道違規停車問題,對人行道違規停車進行報警,作為一種高效的方法輔助監控處理人員的工作。

圖1 人行道車輛違停
由于人行道上不允許停放機動車,故本文的目標是檢測出所有人行道上停放的機動車輛并進行違停報警。本文使用兩個子網絡來實現車輛違停的檢測,一個是YOLOv3[4],用于檢測監控視頻和圖片中出現的車輛;另一個是DeepLabv3+[5],用于分割出道路區域,結合目標檢測結果,綜合判定車輛是否停在了人行道上。本文最后提出了兩種人行道停車檢測方法,使得網絡能夠自動檢測出停留在人行道上機動車輛并且向事件處理人員報警,平均準確率達到87.5%。
在目標檢測方面,基于深度學習的目標檢測方法根據其檢測思路不同可分成兩類:基于區域推薦的Two Stage 目標檢測算法和基于回歸的One Stage 目標檢測算法。基于區域推薦的目標檢測算法有R-CNN[6]、Fast R-CNN[7]、Faster R-CNN[8]、Mask R-CNN[9]等,它們首先使用區域推薦產生候選目標,隨后使用卷積神經網絡處理候選框,但是其速度不能滿足實時性的要求。另一種是One Stage 的目標檢測算法,將檢測問題視為回歸問題處理,YOLOv3 就是一種很經典的One Stage 目標檢測算法,其檢測速度很快,可以達到實時檢測的要求。因此,考慮到車輛實時檢測的需求,本文使用YOLOv3 目標檢測算法來檢測圖片中出現的車輛。實驗證明YOLOv3 在檢測本文所使用數據集中的車輛時無論是速度還是準確率都要優于以ResNet-101為主干網絡的Faster R-CNN。
當檢測出車輛目標之后,還需要對判斷車輛的位置以及是否違規停車。本文使用基于深度學習的語義分割算法來劃分城市道路區域,判斷車輛是否違規停車。語義分割是一種比目標檢測更深層次的計算機視覺任務,是計算機視覺技術中關于圖像理解的重要一環。目標在于標記圖片中每一個像素,并將每一個像素與其表示的類別對應起來。傳統的圖像分割方法包括區域生長法、分水嶺法、Graph cut 等一系列算法,分割結果并沒有語義標注。隨著卷積神經網絡的發展和全卷積網絡(Fully Convolutional Networks)[10]的出現,語義分割取得了前所未有的進步,準確率得到了大幅度提高。本文使用DeepLab 算法最新版本DeepLabv3+來進行語義分割的訓練。
本文采用YOLOv3 目標檢測算法進行車輛檢測,同時使用DeepLabv3+對城市道路圖片進行語義分割,提取高級語義信息。將檢測與分割相結合,加入混合高斯背景建模,最終提出了離線檢測和實時檢測這兩種解決城市管理任務中車輛違停問題的方法。
目標檢測算法經過這些年的發展已經進入了一個相對成熟的階段,YOLOv3 則是One-Stage 有框檢測的相對成熟的網絡。YOLO 將目標檢測問題轉化成回歸問題。YOLOv3 使用比ResNet-152 綜合性能更好的DarkNet-53 作為主干網絡。DarkNet-53 比ResNet-101準確率要高并且快了1.5 倍。DarkNet-53 與ResNet-152準確率表現相當,但是前者快了2 倍。YOLOv3 借鑒了特征金字塔網絡(Feature Pyramid Networks)[11]中上采樣和融合的思想在多個尺度的特征圖上做檢測,為了使網絡同時獲得語義信息和細節信息,算法在三種尺度上預測目標,在每個尺度上通過K-means 聚類算法來確定三個候選框,共9 個候選框。
YOLOv3 直接在輸入圖像的多個位置預測目標的類別和位置,對于給定的輸入圖像CNN 網絡將輸入圖像劃分成N×N 個單元網格,每個網格只負責檢測中心落在該網格中的目標。網絡為每個候選框預測四個回歸坐標tx,ty,tw,th。(cx, cy)為負責預測目標的單元格相對于圖像的左上角偏移,并且候選框的寬度和高度為pw和ph,預測框實際坐標為:

其中(bx,by)為預測框的中心坐標,bw、bh為預測框的寬度和高度,其中σ 是Sigmoid 函數。YOLOv3 在三種尺度上預測,每個網格會預測每個尺度的3 個邊界框以及每個邊界框的置信度和4 個邊界框偏移。同時該網格還要預測區域內包含的C 個類別的概率,一步實現了所有區域內含有目標類別概率、邊界框、置信度的預測。同時YOLOv3 不使用Softmax 來分類,而是使用獨立的邏輯分類器,在訓練過程中,使用二元交叉熵損失來進行訓練。YOLOv3 有很高的檢測速度,在416×416 的輸入圖像上,YOLOv3 的速度可以達到22ms。
在汽車違停事件檢測中,已用目標檢測檢測出了所有的車輛,但并不是所有的車輛都是違規停車,在本文中只有停在人行道上的車輛才算是違規停車。隨后需要獲取車輛所停放區域,來判斷是否為車輛違停事件。本文使用另一個語義分割子網絡負責劃分城市道路區域,將城市道路劃分為三類:馬路、人行道和汽車。
語義分割是計算機視覺的基本任務之一,目標是給每個像素分配語義標簽。近年來,以全卷積網絡為基礎的深度卷積神經網絡在語義分割任務中取得了顯著的進步。對于本文的語義分割任務,本文使用了DeepLab 算法的最新版本DeepLabv3+。DeepLabv3+是由DeepLabv3 發展而來,使用了以Xception[12]結構為模型主干網絡,并探討了深度可分離卷積在ASPP(Atrous Spatial Pyramid Pooling)[13]和編碼器-解碼器模塊上的應用,最終得到了更快更強大的語義分割網絡。
在語義分割的任務中,編碼器模塊逐漸壓縮特征圖,獲取高級語義信息;解碼器模塊逐漸恢復空間信息。DeepLabv3+使用DeepLabv3 作為編碼器模塊,同時加入一個簡單并且有效的解碼器模塊來獲得更精確的分割。網絡使用空洞卷積來提取特征,同時使用了Xception 并對其進行了改進。Xception 使用深度可分離卷積,將標準卷積分解為深度卷積和逐點卷積(即1×1 卷積),可以大幅度降低網絡的參數量和計算量。DeepLabv3+使用了更深的Xception 結構,使用深度可分離卷積替換所有的最大池化操作,來對任意分辨率的圖片提取特征圖。同時在3×3 深度卷積層后增加BN 層和ReLU 層。圖,劃分出城市道路中人行道和馬路區域。對每一個類別為目標類別檢測框,為了突出其位置信息,首先截取其下半部分,如圖3,再將其與分割圖相比較,計算出檢測框下半部分分別與人行道的重合面積Asidewalk和與馬路的重合面積Aroad,按照以下公式計算重合比例。若P>1,判定為人行道停車。


圖2 語義分割結構圖
同時,DeepLabv3+提出了一種簡單并且有效的解碼器模塊。在原先的DeepLabv3 中,預測的特征圖直接用雙線性插值方法上采樣16 倍到原始尺寸,這樣的簡易的解碼器模塊不能成功地恢復分割細節。Deep-Labv3+將編碼器模塊的輸出先經過1×1 卷積,減少輸出的通道數,隨后用雙線性插值上采樣四倍,與相應的具有相同分辨率的低層次特征相結合。最后用3×3 卷積細化特征,用雙線性插值上采樣四倍得到最后的預測結果。這樣最終結果的分辨率就與原圖相同。DeepLab v3+的結構如圖2 所示。
基于目標檢測和語義分割,本文提出了一種人行道停車檢測方法。將同一張圖送入目標檢測和語義分割兩個子網絡,目標檢測網絡輸出一張檢測圖,包含了圖片中的所有車輛;語義分割網絡輸出一張語義分割

圖3 檢測框判定區域
人行道停車離線檢測的網絡結構圖如圖4 所示。DeepLabv3+語義分割網絡不能達到實時檢測,因此本文將在下文討論如何進行實時的人行道違規停車檢測。

圖4 人行道停車離線檢測網絡結構圖
筆者發現,對于同一個固定的攝像頭,語義分割之后的圖片都非常相似。因此只需要對每個攝像頭所提取的道路背景進行一次語義分割,語義分割圖可提供給后續的所有檢測使用。同時,監控視頻中的現實場景往往是錯綜復雜、變化無常的,對監控場景進行背景建模是目標檢測、分割、跟蹤、分類和行為理解等后續處理的基礎。本文首先使用混合高斯背景模型對一段視頻提取干凈的道路背景,再對背景圖進行語義分割,更有利于定位車輛的位置信息。
混合高斯背景模型可以克服圖像抖動、噪聲干擾、光線變化、運動目標移動等問題,從視頻流中提取出干凈的背景。混合高斯背景建模是基于像素樣本統計信息的背景表示方法,利用像素在較長時間內大量樣本值的概率密度等統計信息表示背景,然后使用統計差分進行目標像素判斷,可以對復雜動態背景進行建模。
本文對一段兩分鐘左右的視頻進行混合高斯背景模型訓練,提取出了相對干凈的背景圖,再分別對視頻截圖和背景圖做語義分割。如圖5,上圖為視頻某一幀截圖以及其語義分割圖,下圖為混合高斯背景模型提取的背景與其語義分割圖,其過濾了所有運動中的車輛,生成的圖片更適合做語義分割。在用卷積神經網絡對圖片進行語義分割之前先用混合高斯背景建模對圖片預處理,能達到更好的分割效果。

圖5 混合高斯模型背景圖及其語義分割圖
結合了混合高斯背景模型的實時檢測網絡結構圖如圖6 所示。在離線部分,對于一個固定的攝像頭,首先將一段視頻輸入到混合高斯背景模型中,提取出一張干凈的背景圖,再對背景圖送入DeepLabv3+進行語義分割,得到語義分割圖。在實時部分,YOLOv3 實時檢測監控視頻中的車輛,并與語義分割圖相比較,計算目標和區域的重合面積,最終輸出人行道停車檢測結果。
城市管理任務中的車輛違停檢測需要從城市監控攝像頭中獲取數據,目標類別包括小汽車、公交車、三輪車等。隨著自動駕駛的不斷發展,越來越多的包含城市道路的自動駕駛數據集被開源,例如Kitti[14]、Cityscapes[15]等。但是自動駕駛數據集并不適用于城管任務上。

圖6 人行道停車實時檢測網絡結構圖
首先,城管監控和自動駕駛數據集的拍攝角度不一樣。自動駕駛數據集照片為平拍角度,而國內真實道路監控視頻中車輛密集,多為俯視視角。除了傳統的車輛正面、側面及背面圖像外,部分監控圖像中還包含車頂視角,且存在大量的遮擋和截斷車輛。其次,自動駕駛數據集場景大多為歐美地區的城市道路,道路情況和國內的道路有著較大的差別。最后,自動駕駛數據集沒有三輪車類別,無法檢測到人行道上違停的三輪車。
基于以上原因,本文所使用數據集為城管車輛數據集,數據集中的圖片全部來自監控攝像頭采集的照片,共10140 張。所有圖片都有標簽,可用于目標檢測任務。數據集共有3 個類別,分別為城市道路中常見的汽車(car)、公交車(bus)和三輪車(tricycle)。每個類別及其標簽數量如表1 所示。本文檢測目標為人行道上的所有汽車和三輪車,公交車類別只是為了訓練方便,不計入統計范圍。如圖7 所示,左邊為Cityscapes[13]自動駕駛數據集,右邊為城管車輛數據集,可以明顯的看出其中的差距。

表1 城管車輛數據集

圖7 Cityscapes數據集和城管車輛數據集
為了使模型更加魯棒,可以適應不同尺寸和不同的天氣、光線情況,本文對數據集做了增強,使用將圖片水平翻轉、隨機裁剪、改變圖片的色相飽和度、使用仿射變換、加入模糊噪聲等圖片增強方式,使訓練結果更好。
訓練的主要配置如下:CPU 為Intel Core i7 8700k,內存32GB,CPU 為NVIDIA GTX1080Ti。操作系統為Ubuntu 16.06,算法使用Python 語言和PyTorch 深度學習框架實現。
模型訓練過程中將數據集隨機分成兩部分:訓練集和驗證集。其中訓練集占80%,驗證集占20%。YOLOv3 模型使用Darknet-53 網絡,訓練和微調網絡的各項參數。首先使用在ImageNet 上訓練的模型權重作為預訓練權重,在預訓練權重的基礎上,用城管車輛數據集進行遷移學習,微調網絡參數,使損失函數達到收斂。
在網絡訓練參數設置方面,由于顯存大小的限制,batch size 設為16,共訓練100 個epoch,前50 個epoch學習率為10-4,后50 個epoch 學習率為10-5。網絡使用Adam 優化器,為了防止過擬合,weight decay 設置為10-3。
本文同時訓練了使用ResNet101 作為主干網絡(backbone)的Faster R-CNN 算法作為對比,同樣將ImageNet 分類預訓練的模型用于網絡初始化,訓練時使用城管車輛數據集,通過反向傳播的方式進行微調(fine-tune)。同時修改Faster R-CNN 最后的全連接層,對應輸出的類別,對模型進行遷移學習。本文對Faster RCNN 設置初始學習率為10-3,采用Adam 優化算法,batch size 設置為4,每過10 個epoch 學習率下降為原來的0.1 倍,訓練直到損失函數達到收斂。
YOLOv3 模型在城管車輛數據集上的檢測結果如表2 所示。本文參考VOC2007 數據集的評價指標,設置IOU 閾值為0.5,檢測框與真實框的IOU 超過閾值則視作檢測成功。每一類都可以用召回率(Recall)和準確率(Precession)來繪制一條曲線,AP 就是該曲線下的面積。mAP 是多個類別AP 的平均值。FPS 為網絡在batch size 為1 的時候測試速度。檢測結果如表2所示。

表2 YOLOv3 和FasterRCNN-ResNet101 對比
由表2 可以看出,本文的檢測方法速度與準確率均高于以ResNet-101 作為主干網絡的Faster R-CNN,可以滿足實時檢測任務的要求。
Cityscapes 數據集中包含了大量的城市道路圖片,每張圖片都有語義分割的標簽。對城市道路的語義分割數據集可以用Cityscapes 數據集進行訓練,用其訓練好的模型對監控攝像頭的照片來進行分割。但是Cityscapes 原本是用于車輛自動駕駛,對于城管任務而言,其數據集的類別過多,效果也無法讓人滿意。
因此本文選取533 張天網攝像頭照片并進行標注,分成訓練集和測試集,訓練集用于語義分割的訓練,測試集用于驗證語義分割的效果。對每張圖片標注三個類別,分別為人行道(sidewalk)、馬路(road)和汽車(car)。本文使用DeepLabv3+語義分割模型來進行訓練,訓練迭代30000 次,初始學習率為10-4。訓練集裁剪尺寸為513×513,batch size 設置為4。經過測試,訓練好的模型在測試集上的平均交并比(mIOU)為0.825。同時也在DeepLabv3+上訓練了Cityscapes 數據集,作為對比。
本文對比了測試圖片在城管車輛數據集下訓練的模型和Cityscapes 模型下的分割結果,如圖8 所示。左圖為真實的監控攝像頭拍攝的道路圖片,中圖為用Cityscapes 訓練好的模型對左圖語義分割的結果,右圖為用城管數據集訓練好的模型對左圖語義分割的結果。可也看出城管數據集有更好的分割效果,其對人行道的分割結果更為準確,且沒有其他類別的干擾,有利于對語義分割的結果進行進一步處理。

圖8 語義分割在Cityscapes數據集和城管車輛數據集上的結果
在本節中使用第三章提到的離線檢測的方法并驗證其有效性。本文選取83 張圖片,其中有203 輛人行道違停汽車,61 輛違停三輪車,并對其進行人行道違停車輛檢測。其中有175 輛違停汽車被檢測了出來,準確率達到86.2%,同時有55 輛違停三輪車被檢測出來,準確率達到90.2%。結果如表3 所示。

表3 車輛違停檢測準確率
為了更加直觀的感受算法結果,本文將目標檢測和語義分割的中間結果分別保存下來。如圖9,左上圖為送入網絡檢測的原圖,右上圖為目標檢測的檢測結果,可見所有車輛都被檢測出來。左下圖為語義分割網絡的分割結果。右下圖為目標檢測結合了語義分割的檢測結果,圖中只有停在了人行道上的車輛作為違停車輛被檢測出來。

圖9 車輛違停檢測結果圖
本文將深度學習的目標檢測和語義分割算法相結合,提出離線和實時的人行道違規停車檢測算法,并通過實驗證明了算法可用于解決人行道違規停車問題。同時引入了混合高斯背景模型來提高分割的準確率,并使檢測算法能達到實時效果。本文中檢測模型在各種天氣條件、道路環境和光線條件下都具有很強的魯棒性。
該算法的不足在于分割的準確率和速度還需要進一步提升。由于城市道路情況十分復雜,加上訓練集有限,導致語義分割算法面對十分復雜的道路場景時表現一般。在之后的研究中,將對現有數據集進行擴充,進行更加深入的實驗,并加快語義分割的推理速度,爭取能夠達到實時語義分割。