劉羅成,劉正熙,熊運余
(四川大學(xué)計算機學(xué)院,成都610065)
隨著國內(nèi)現(xiàn)代化、城市化的進程加快,城市中的店鋪等商業(yè)活動越來越多,使得城市中的廣告牌數(shù)量與日俱增,隨之而來的是違規(guī)擺放廣告牌的現(xiàn)象也越來越嚴重。為了清理這些違規(guī)廣告牌,目前的主要方法是大量雇傭城管來監(jiān)視和管理,當然視頻監(jiān)控也是管理違規(guī)廣告牌的有效手段之一,但是不免需要人工不斷監(jiān)視視頻和處理相關(guān)問題,這些方法都存在費時費力的缺點。為了更好地節(jié)省管理違規(guī)廣告牌的人力成本,亟需一種高效輔助人工進行監(jiān)控管理的方法。
對于廣告牌的檢測,一般可以使用傳統(tǒng)的機器學(xué)習(xí)目標檢測算法或者是基于深度學(xué)習(xí)的目標檢測算法。傳統(tǒng)的機器學(xué)習(xí)目標檢測算法基于特征提取,一般流程如下:在待檢測圖片上通過采用滑動窗口的方法設(shè)定大小不同的候選框,利用HAAR[1]、HOG[2]、DPM[3]等特征提取方法對每個窗口中的局部信息進行特征提取,在特征提取后,對候選區(qū)域提取出的特征送入SVM[4]等的分類器中進行分類判定。在分類判定過程中,如果單類別檢測只需要區(qū)分當前的候選框中包含的對象是背景還是目標,而對于多分類不免會產(chǎn)生重疊的候選框,這時需要通過NMS 來對候選框進行合并抑制,去掉多余的候選框,計算出各個類別的候選框,最終完成目標檢測。
從傳統(tǒng)目標檢測算法流程可以看到一些缺點:首先手工設(shè)計特征,這些特征一般獲取的是低層次和中層次的特征,表達能力較差,對于多樣性的變化沒有很好的魯棒性,而且基于滑動窗口的區(qū)域選擇策略沒有針對性,檢測結(jié)果也不盡人意。
隨著近年來的深度學(xué)習(xí)的迅速發(fā)展,基于卷積神經(jīng)網(wǎng)絡(luò)的目標檢測算法也得到很大的突破,與傳統(tǒng)機器學(xué)習(xí)目標檢測算法相比,最主要的是在檢測精度上得到很大的提升,這得益于其強大的深層次的特征提取能力??紤]到基于卷積神經(jīng)網(wǎng)絡(luò)的目標檢測算法的優(yōu)點,本文也選用了這類目標檢測算法。
基于深度學(xué)習(xí)的目標檢測算法大體可分為One Stage 和Two Stage 兩種類別。其中One Stage 的目標檢測速度較快,但精度比Two Stage 較低,如YOLOv3[5]等;而Two Stage 的目標檢測精度較高,但檢測速度較慢,如Faster R-CNN[6]等。在選用何種基于深度學(xué)習(xí)的目標檢測算法,本文主要從速度方面考慮,因為繼本文的下一步研究是想達到實時性,所以本文最終選擇YO?LOv3 作為目標檢測部分的算法。
如今,無論在哪個城市中,廣告牌好像是必不可缺少的一部分,但是在人行道中間和車行道上擺放的廣告牌嚴重阻礙了交通環(huán)境而且抹黑了市容,如圖1 所示。如果在特定區(qū)域,例如某條街道上,使用固定攝像頭拍到的廣告牌都是違規(guī)擺放,這種情況下只需使用目標檢測算法就可以檢測到違規(guī)擺放的廣告牌,但是現(xiàn)實中,監(jiān)控的攝像頭都是轉(zhuǎn)動的,拍到的區(qū)域都不是特定的,所以拍到的廣告牌有些不是違規(guī)擺放的,這種情況下,需要判定檢測到的廣告牌是否處于阻礙交通的位置是一項具有挑戰(zhàn)性的任務(wù)。
為了劃分城市道路區(qū)域,本文使用語義分割算法。語義分割是在像素級別上的分類,屬于同一類的像素都要被歸為一類,因此語義分割是從像素級別來理解圖像的。在深度學(xué)習(xí)應(yīng)用到計算機視覺領(lǐng)域之前,研究人員一般使用紋理基元森林(Texton Forest)或是隨機森林(Random Forest)方法來構(gòu)建用于語義分割的分類器。2014 年,Long 等人提出的FCN(Fully Con?volutional Networks)[7]是首次將CNN 網(wǎng)絡(luò)用于語義分割,這種網(wǎng)絡(luò)將目標識別的AlexNet[8]網(wǎng)絡(luò)的最后的全連接層改為卷積層,使用反卷積層進行上采樣并且提出了跳躍連接來改善上采樣,在性能上,比傳統(tǒng)采用區(qū)域特征提取的圖像分割方法有顯著提升。隨后幾年,一系列優(yōu)秀的語義分割模型層出不窮,如SegNet[9]、PSPNet[10]、DeepLabv3+[11]等。本文使用的語義分割模型是精度比較高的DeepLabv3+。
本文將違規(guī)擺放廣告牌簡化成圖1 所示的兩種情況,為了能夠準確檢測到這兩類違規(guī)廣告牌,本文使用兩個子網(wǎng)絡(luò),一個是YOLOv3,用于檢測出圖片中的廣告牌;另一個DeepLabv3+,用于分割城市道路區(qū)域,最后結(jié)合這兩個算法的結(jié)果判斷出廣告牌是否處于人行道中間或者車行道,進而來判斷是否屬于違規(guī)擺放。在進一步提高檢測速度的嘗試中,筆者比較了兩種Backbone 的YOLOv3,發(fā)現(xiàn)更加簡單的MobileNetv1[12]與默認使用DarkNet53 相比,模型更輕量,檢測速度更快,檢測精度相差無幾,所以最后選用MobileNetv1 作為YOLOv3 的Backbone。兩個網(wǎng)絡(luò)的最終測試結(jié)果中,YOLOv3 的mAP 為70.27%,DeepLabv3+的mIOU為0.7854,能達到高效輔助工作人員的目的。
圖1
在目標檢測網(wǎng)絡(luò)快速發(fā)展的歷史上,YOLO 系列的目標檢測網(wǎng)絡(luò)無疑是具有代表性一類的網(wǎng)絡(luò),跟SSD[13]等One Stag 網(wǎng)絡(luò)的主要思路一樣,摒棄了Two Stage 中的region proposal 階段,將待檢測的圖片分割成N×N 個格子,然后每個格子負責(zé)檢測物體類別,輸出固定數(shù)目的Bounding Box 信息和屬于各種類別的概率信息,并且利用CNN 提取特征后直接進行分類和回歸,整個過程只需要一步。YOLOv3 的算法是在YOLOv1 和YOLOv2 的基礎(chǔ)上形成,相比較前兩者的研究,YOLOv3 更注重多標簽的分類和提高對小目標檢測精度。
為了將分類任務(wù)由單標簽分類改進到多標簽分類,YOLOv3 將分類器由Softmax 改為Logistic。Soft?max 分類器假定各種類之間是互斥關(guān)系,如果一個對象屬于一個類,那么它一定不屬于另一個類,這在有些數(shù)據(jù)集中表現(xiàn)正常,包括本文的個人數(shù)據(jù)集,但是在有些數(shù)據(jù)集中,如果一個對象同時屬于幾個類別,Softmax分類器似乎違背了它的假設(shè)。Logistic 分類器是使用閾值來預(yù)測對象的多個類別標簽,如果該對象在某個類別標簽的分數(shù)高于設(shè)定的閾值時,就將此類標簽分配給該對象。比較兩種分類器的不同的分類原理,YOLOv3 最終選擇Logistic 分類器。
為了對小目標的檢測結(jié)果更準確,YOLOv2 和YO?LOv3 都做了一些操作,YOLOv2 中使用Passthrough Layer 和Bounding Box Prior 來加強對小目標檢測的精確度;YOLOv3 中除了YOLOv2 中使用的方法外(其中Passthrough Layer 和YOLOv3 使用的殘差網(wǎng)絡(luò)結(jié)構(gòu)原理相似,故如此說),最重要的是將YOLOv2 的網(wǎng)絡(luò)主干DarkNet19 換成DarkNet53,在DarkNet53 網(wǎng)絡(luò)主干上,YOLOv3 采用多制度融合和全卷積的方式來進行預(yù)測,這些設(shè)計讓YOLOv3 的檢測精度相較YOLOv2 而言更高,速度也沒有降低。
YOLOv3 默認使用的網(wǎng)絡(luò)主干DarkNet53 性能固然優(yōu)秀,但是在本文中,針對只處理廣告牌這一種類別問題,是否可以換用更簡單的網(wǎng)絡(luò)主干使得檢測速度更快,精度損失不大來更好地符合現(xiàn)實中追求實時性的要求,于是選用MobileNetv1 作為YOLOv3 網(wǎng)絡(luò)主干是一個不錯的嘗試。
DarkNet53 的網(wǎng)絡(luò)設(shè)計具有層次深的特點。Dark?Net53 中的53 這個數(shù)字是表示此網(wǎng)絡(luò)主干中的卷積層個數(shù),此網(wǎng)絡(luò)由52 個卷積層+1 個全連接層構(gòu)成,其中最后的全連接層是通過1×1 的卷積實現(xiàn)的,也算一層卷積層,所以共有53 個卷積層。從輸入開始,先經(jīng)過兩層卷積層,然后由5 組重復(fù)的殘差單元Residual 構(gòu)成,殘差單元基本構(gòu)件如圖2 所示。每組殘差單元有兩個卷積層和一個快捷鏈路構(gòu)成,這5 組殘差單元分別重復(fù)1 次、2 次、8 次、4 次。由于每個殘差單元的第一個卷積層是做步長為2,大小為1×1 的卷積操作,所以整個殘差網(wǎng)絡(luò)一共降維5 次,共降維25=32 倍。每個殘差單元會有三次多尺度融合操作,一系列的組合,使得DarkNet53 相比之前的One Stage 目標檢測網(wǎng)絡(luò)具有更高的精度。
圖2 DarkNet53殘差單元基本構(gòu)件
MobileNetv1 原本就是為了加快網(wǎng)絡(luò)運算速度而設(shè)計的一種輕量化網(wǎng)絡(luò)模型。與DarkNet53 的多層卷積層不同,MobileNetv1 總共只有28 層卷積層,第一層是標準卷積層,后面緊接著13 個深度可分離卷積層,再后面是由1×1 卷積得到的全連接層,其中一個深度可分離卷積層包含一個3×3 的Depthwise Conv,一個1×1 的Conv,它們中間會加入BN 和ReLU 激活函數(shù),如圖3 所示。
圖3 深度可分離卷積基本構(gòu)件
比較上述兩個網(wǎng)絡(luò)主干,MobileNetv1 相對有更淺層的網(wǎng)絡(luò)結(jié)構(gòu),深度卷積的參數(shù)數(shù)量只有普通卷積的1/M,其中M 表示通道數(shù),綜合以上兩點,采用Mobile?Netv1 相比DarkNet53 在理論上是可以有更快的推理和計算速度。
語義分割是計算機視覺的一項基本任務(wù),相比目標檢測,語義分割是一項更精細的工作,是像素級的分類。DeepLab 系列網(wǎng)絡(luò)是語義分割網(wǎng)絡(luò)中的佼佼者,DeepLabv3+是在DeepLabv3 的基礎(chǔ)上發(fā)展改進而來。
在DeepLabv3 中,DCNN 通過多次下采樣,獲得低維度的、高級語義信息的特征圖,但是特征圖過小會丟失邊界信息,導(dǎo)致預(yù)測精度降低。為了改進DeepLabv3這一缺點,DeepLabv3+加入解碼器來逐層恢復(fù)圖像的空間信息,如圖4 所示,輸入圖片通過DCNN,經(jīng)過4倍下采樣,得到低層次的特征,這低層次特征在編碼器部分經(jīng)過ASPP 模塊,最終下采樣16 倍,獲得高層次的特征;在解碼器部分,低層次的特征經(jīng)過1×1 卷積調(diào)整維度,在編碼器中獲得的高層次特征經(jīng)過雙線性插值,獲得4 倍上采樣,然后將這兩個相同層次相同維度的特征Concat,再采用3×3 卷積進一步融合特征,最后經(jīng)過雙線性插值4 倍上采樣后得到與輸入的原始圖片相同大小的分割預(yù)測圖。由于解碼器部分融合了低層次和高層次的特征,所以DeepLabv3+獲得更豐富的語義信息和更高的精確度。
同時,DeepLabv3+為了減少計算量,采用改進的Xception[14]網(wǎng)絡(luò)作為網(wǎng)絡(luò)骨干,在圖4 的DCNN 中將原Xception 網(wǎng)絡(luò)中的最大池化層使用stride=2 的深度可分離卷積替換,同時增加了更多的層。DeepLabv3+最后還嘗試在ASPP 中也加入深度可分離卷積,發(fā)現(xiàn)在幾乎不損失預(yù)測精度的前提下,進一步減少計算量。
圖4 DeepLabv3+網(wǎng)絡(luò)結(jié)構(gòu)
正如前文所述,本文提出的違規(guī)廣告牌簡化成兩種情況,一種是處在人行道中間,另一種在車行道上。如圖5 所示,先使用語義分割算法分割出人行道區(qū)域,同時使用目標檢測算法得到廣告牌的位置,也就是在圖片上標出檢測框,獲得圖片中檢測框的坐標,在分割圖中的相同位置,統(tǒng)計人行道的像素是否是除廣告牌以外的像素點的1.5 倍以上,如果是,則為人行道上的違規(guī)廣告牌;但由于要保證車行道上的安全,所以只要在分割圖上檢測出車行道的像素點,就直接判定為車行道上的違規(guī)廣告牌。
圖5 道路違規(guī)廣告牌網(wǎng)絡(luò)結(jié)構(gòu)圖
如圖6 所示,左上是原輸入圖片,右上是目標檢測算法得到的檢測圖,左下是經(jīng)過語義分割算法得到的分割圖,右下圖片是經(jīng)過兩個網(wǎng)絡(luò)判定所得出的屬于人行道違規(guī)廣告牌。整體判定流程如圖7 所示。
圖6 人行道違規(guī)廣告牌
圖7 違規(guī)廣告牌判定流程
本文目標檢測部分所選用數(shù)據(jù)集中的圖片全部來自國內(nèi)城市中監(jiān)控攝像頭采集的照片,共4928 張,通過人工標簽,其中標定的廣告牌(ad)類別數(shù)量有7799個,語義分割部分所選用的圖片是從這4928 張圖片中隨機選取500 張進行標定,標定的類別有三類:廣告牌(ad)、車行道(road)、人行道(sidewalk)。
本文的實驗環(huán)境配置如下:GPU 為NVIDIA GTX1080Ti、CPU 為Intel Core i7 8700k,操作系統(tǒng)為Ubuntu 16.04.6。YOLOv3 算法所選用的語言是tesor?flow-gpu+keras、DeepLabV3+算法所選用的語言是tes?orflow-gpu。
訓(xùn)練時將數(shù)據(jù)集分為兩部分:訓(xùn)練集(train)和驗證集(val),其中訓(xùn)練集占85%,驗證集占15%。為了訓(xùn)練的公平性,默認的DarkNet53 骨干網(wǎng)絡(luò)和換用的MobilNetv1 骨干網(wǎng)絡(luò)都不使用預(yù)訓(xùn)練模型,從頭開始訓(xùn)練。
網(wǎng)絡(luò)訓(xùn)練參數(shù)方面,考慮顯存大小,使用Dark?Net53 時將batch_size 設(shè)為8,不使用遷移學(xué)習(xí)訓(xùn)練,共訓(xùn)練500 個epoch,使用Adam 優(yōu)化器,初始學(xué)習(xí)率設(shè)為10-4;使用MoblileNetV1 時將batch_size 設(shè)為16,其余和DarkNet53 相同。網(wǎng)絡(luò)測試參數(shù)方面,設(shè)置score為0.3,IOU 為0.5。
兩個不同的骨干網(wǎng)絡(luò)訓(xùn)練時間和測試的結(jié)果如表1 所示。
表1 DarkNet53 和MobileNetv1 實驗結(jié)果對比
從表1 可以看到,訓(xùn)練同樣數(shù)量的數(shù)據(jù)集,Dark?Net53 所需時間是MobileNetv1 的2 倍多,測試的結(jié)果,mAP 兩者并沒有相差多少,但是測試的FPS,雖然兩者都達不到官方論文中給出的那么高的數(shù)值,但是在本文實驗環(huán)境下中,MobileNetv1 差不多達到DarkNet53的兩倍。綜合以上結(jié)果,本文最終選了速度更快,精度不損失多少的MobileNetv1 做目標檢測的骨干網(wǎng)絡(luò)。
語義分割訓(xùn)練時將500 張數(shù)據(jù)集也分為兩部分:訓(xùn)練集和驗證集,其中訓(xùn)練集占80%,驗證集占20%。訓(xùn)練參數(shù)配置為:訓(xùn)練迭代30000 次,裁剪尺寸train_crop_size 設(shè)置為513×513,初始學(xué)習(xí)率設(shè)置為10-4,batch_size 設(shè)置為4,由于本文所選用數(shù)據(jù)集中的類別之間空間大小極不平衡,因此將三類loss 權(quán)重設(shè)置為ad:road:sidewalk=15:1:1。在驗證集上測試所達到的平均交并比(mIOU)為78.54%。
結(jié)合目標檢測和語義分割網(wǎng)絡(luò)的結(jié)果,最終的效果如圖8 所示,左上圖共有三個廣告牌,在右上圖全部被檢測到,左下圖的語義分割邊界比較明顯,右下圖的最終結(jié)果檢測到兩個違規(guī)的廣告牌,還有一個廣告牌因為靠近圖中的店面,并不妨礙交通,所以判定不是違規(guī)廣告牌。
圖8 實驗最終結(jié)果展示
本文提出了一種結(jié)合目標檢測和語義分割算法來檢測城市中的違規(guī)廣告牌,在目標檢測中,通過比較兩種不同的網(wǎng)絡(luò)骨干,最終在不損失很大精度的前提下,選用模型簡單,計算速度更快的MobileNetv1 作為目標檢測算法的骨干網(wǎng)絡(luò);在語義分割中,使用DeepLabv3+劃分城市道路區(qū)域。實驗結(jié)果表明本文提出的算法能在轉(zhuǎn)動攝像頭下拍攝的圖片中,檢測出違規(guī)廣告牌。
本文旨在檢測的性能具有實時性,但所選用的語義分割模型并不具備很快的檢測速度,針對這點,在之后的研究中,將選用實時性的語義分割網(wǎng)絡(luò)模型和調(diào)整訓(xùn)練的數(shù)據(jù)集,在不損失精度的前提下,使檢測效果具有更快的速度。