黃 靜,謝 宣
(浙江理工大學(xué) 信息學(xué)院,浙江 杭州 310018)
監(jiān)理是裝飾裝修工程的一大重點(diǎn),從工程施工到交付,監(jiān)理工作具有十分重要的地位。目前,裝飾裝修監(jiān)理工作主要依靠具有多年工作經(jīng)驗(yàn)的員工,不僅增加了企業(yè)成本,還可能產(chǎn)生誤檢。近年來,計(jì)算機(jī)視覺技術(shù)發(fā)展迅速,已被應(yīng)用到自動駕駛、行人檢測、機(jī)器人、文本驗(yàn)證等領(lǐng)域中[1-6]。本文利用目標(biāo)檢測技術(shù)識別監(jiān)理工作中的目標(biāo),為后續(xù)從圖片中獲取更深層次的驗(yàn)收信息及解決人工監(jiān)理問題提供了參考。
目標(biāo)檢測算法主要分為兩類:一類是以區(qū)域卷積神經(jīng)網(wǎng)絡(luò)(Region-Convolutional Neural Network,R-CNN)算法系列為代表的基于區(qū)域建議的目標(biāo)檢測與識別算法;另一類是基于回歸的檢測算法,以單點(diǎn)多盒檢測器(Single Shot MultiBox Detector,SSD) 、YOLO(You Only Look Once ,YOLO) 為代表。前者具有較高的預(yù)測準(zhǔn)確率,后者則在算法速度上占優(yōu)。
為了兼顧時(shí)效性與準(zhǔn)確性的要求,本文采用的基礎(chǔ)算法為SSD。SSD算法已為目標(biāo)檢測開發(fā)人員廣泛使用,效果良好[7-8]。但是SSD仍存在兩個(gè)問題:(1)不同層的特征圖獨(dú)立作為分類網(wǎng)絡(luò)的輸入時(shí),容易出現(xiàn)同一物體被大小不同的框同時(shí)檢測出來的情況;(2)該方法對小目標(biāo)檢測效果較差。
針對這些問題,研究人員開發(fā)了一系列基于SSD的改進(jìn)算法。文獻(xiàn)[9]引入全局上下文模塊,提高了特征提取能力。文獻(xiàn)[10~11]采用K-means聚類對模型默認(rèn)框的數(shù)量、高寬比進(jìn)行優(yōu)化,使模型更加具有針對性。文獻(xiàn)[12]在每層預(yù)測前加入殘差模塊,使特征包含更多的語義信息。文獻(xiàn)[13]引入空間以及通道注意力機(jī)制,增大特征提取的感受野。文獻(xiàn)[14~15]使用輕量級網(wǎng)絡(luò)MobileNet替代SSD特征提取網(wǎng)絡(luò),增加了網(wǎng)絡(luò)深度,降低了模型大小,一定程度上可以改善小目標(biāo)檢測問題。文獻(xiàn)[16]使用轉(zhuǎn)置卷積操作構(gòu)建循環(huán)特征聚合模型,提高了檢測精度。文獻(xiàn)[17]通過在非極大抑制中嵌入特征向量的方式,二次篩選默認(rèn)框,改善了重疊目標(biāo)漏檢的問題。雖然目前已有基于SSD的改進(jìn)算法,但小目標(biāo)檢測效果仍然欠佳。
本文對SSD算法應(yīng)用于裝飾裝修工程監(jiān)理工作進(jìn)行研究,并針對算法的不足進(jìn)行了改進(jìn),主要改進(jìn)包括:(1)更改基礎(chǔ)特征提取網(wǎng)絡(luò)為DPN(Dual Path Networks);(2)采用加權(quán)特征金字塔,融合不同層的語義信息;(3)采用深度可分離卷積減小模型。
SSD算法于2016年被首次提出。其作為one-stage(直接回歸物體的類別概率和位置坐標(biāo)值)算法,與two-stage(先由算法生成一系列作為樣本的候選框,再通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行樣本分類)相比具有更快的檢測速度,這也增加了其在工業(yè)領(lǐng)域的應(yīng)用可行性。
SSD結(jié)合YOLO中的回歸思想和Faster R-CNN中的錨(Anchor)機(jī)制,為每個(gè)特征圖的單元設(shè)置一系列先驗(yàn)框[18]。與Faster R-CNN錨機(jī)制不同,SSD的錨分布在多個(gè)尺度的特征圖上,這使得SSD可以用多尺度各個(gè)位置的區(qū)域特征進(jìn)行回歸,既保持了YOLO速度快的特性,也保證了一定的準(zhǔn)確性。先驗(yàn)框的設(shè)置包括尺度和長寬比兩個(gè)方面,尺度遵循著線性變化的原則,隨著特征圖大小的降低而增加,計(jì)算式如下
(1)
式中,m指特征圖個(gè)數(shù);sk表示先驗(yàn)框大小相對于原圖的比例,k∈[1,m]。
SSD算法以VGG16(Visual Geometry Group 16)網(wǎng)絡(luò)為基礎(chǔ)提取特征。與YOLO不同,SSD通過去掉VGG16的全連接層,直接采用卷積對不同的特征圖進(jìn)行檢測。這種方法與全連接等價(jià),但可以使模型的輸入更靈活,便于接受任意分辨率的圖像。額外添加的卷積層大小逐層遞減,可在多尺度下對不同大小的目標(biāo)進(jìn)行預(yù)測,提高小目標(biāo)的檢測效果。算法的損失函數(shù)包含兩部分,由位置Lloc和類別Lconf損失組成,損失函數(shù)相關(guān)計(jì)算式如下
(2)
(3)
(4)
(5)
式中,式(2)為總損失函數(shù);N是先驗(yàn)框的正樣本數(shù)量;c為類別置信度;l為先驗(yàn)框所對應(yīng)的位置預(yù)測值;g是真實(shí)目標(biāo)(Ground Truth)的位置參數(shù);xijp∈{0,1}表示第i個(gè)先驗(yàn)框與第j個(gè)類別為p的Ground Truth是否匹配;式(5)表示第i個(gè)搜索框?qū)?yīng)類別p的預(yù)測概率。SSD算法的分類任務(wù)使用Softmax多類別損失函數(shù),位置回歸任務(wù)采用SmoothL1損失函數(shù)預(yù)測錨點(diǎn)與實(shí)際目標(biāo)的相對位移。
圖1 SSD300網(wǎng)絡(luò)結(jié)構(gòu)Figure 1. The network structure of SSD300
本文采用的基礎(chǔ)特征提取網(wǎng)絡(luò)為DPN。DPN被認(rèn)為是殘差網(wǎng)絡(luò)(Resnet)與密集網(wǎng)絡(luò)(Densenet)的結(jié)合。研究發(fā)現(xiàn),隨著深度的增加,網(wǎng)絡(luò)性能會更好,深層卷積提取到的特征圖的表達(dá)能力也更強(qiáng),可學(xué)習(xí)到圖像深層次的語義信息。但網(wǎng)絡(luò)并不是越深越好,深層網(wǎng)絡(luò)會帶來梯度爆炸和梯度消失的問題。為了解決這種因?yàn)樯疃仍黾佣鴮?dǎo)致性能下降的問題,文獻(xiàn)[19]提出新的網(wǎng)絡(luò)結(jié)構(gòu)Resnet。Resnet網(wǎng)絡(luò)的跳躍鏈接實(shí)現(xiàn)了特征的復(fù)用,增加了網(wǎng)絡(luò)深度。Densenet[20]的思路與Resnet基本一致,它的特點(diǎn)是將前面所有層與后面層進(jìn)行密集連接,通過通道上的連接實(shí)現(xiàn)特征復(fù)用。圖2和圖3為殘差網(wǎng)絡(luò)與密集網(wǎng)絡(luò)結(jié)構(gòu)圖,Resnet進(jìn)行特征圖的相加(Add),而Densenet做了異通道特征圖的連接(Concate)。這兩種方式各有優(yōu)點(diǎn),前者凸顯了特征的復(fù)用,后者則能夠探索出新的特征。DPN吸收了Resnet與Densenet的優(yōu)點(diǎn),如圖4所示的雙路徑將兩種網(wǎng)絡(luò)的理念結(jié)合到了一起。文獻(xiàn)[21]通過實(shí)驗(yàn)證明,與Resnet和Densenet相比,DPN網(wǎng)絡(luò)性能更優(yōu)異。
圖2 Resnet block結(jié)構(gòu)Figure 2. The structure of Resnet block
圖3 Densenet block結(jié)構(gòu)Figure 3. The structure of Densenet block
本文針對SSD512進(jìn)行整合,將尺度8×8之前的每組卷積、池化替換為一個(gè)DPN網(wǎng)絡(luò)塊。如圖4所示,DPN塊的子塊為1×1、3×3(或5×5)、1×1這3個(gè)卷積層(構(gòu)成深度可分離卷積單元),每個(gè)DPN塊由數(shù)量不一的子塊構(gòu)成。子塊的輸入為雙路徑輸出的連接,經(jīng)第二個(gè)1×1卷積分割后,按不同的方式合并到殘差和密集連接路徑中。每個(gè)DPN首個(gè)子塊中非1×1卷積步長為2,用于降采樣。
計(jì)算機(jī)視覺的基本挑戰(zhàn)之一是多尺度識別。目前,特征金字塔(Feature Pyramid Network,F(xiàn)PN) 已經(jīng)成為不同尺度目標(biāo)檢測系統(tǒng)的基本構(gòu)件之一。
SSD各層用于預(yù)測的特征圖相互獨(dú)立,勢必會忽視部分信息。淺層特征圖含有較多的位置信息,而高層特征圖則具有較多的語義信息。將淺層與高層特征進(jìn)行融合,可提升網(wǎng)絡(luò)的預(yù)測效果。
通常對FPN進(jìn)行融合時(shí),不同層的權(quán)重相同,但是尺度不同對輸出特征的貢獻(xiàn)也不一樣。故本文在此基礎(chǔ)上,對特征圖進(jìn)行加權(quán)融合。
本文選取與原算法相同尺度的特征圖進(jìn)行預(yù)測。各層特征圖通過上下采樣縮放,調(diào)整為同一尺度,對縮放后的特征圖進(jìn)行1×1卷積統(tǒng)一通道數(shù)后,賦權(quán)相加,該權(quán)值可以進(jìn)行學(xué)習(xí)。特征融合模塊結(jié)構(gòu)如圖5所示,輸出計(jì)算式為
(6)
式中,I為輸入的特征圖;ε為常量,需避免分母為0。
圖4 DPN block結(jié)構(gòu)Figure 4. The structure of DPN block
初始化權(quán)值后,通過ReLU函數(shù)保證權(quán)值大于0。為了減小計(jì)算量,本文設(shè)置同層的權(quán)值相同,并未按通道細(xì)分。
圖5 改進(jìn)的SSD網(wǎng)絡(luò)結(jié)構(gòu)Figure 5. The structure of improved SSD
通過上述改進(jìn),模型的深度較原SSD有所增加。新模型參數(shù)量很大,但在實(shí)際應(yīng)用中主要通過移動設(shè)備進(jìn)行采集和檢測。大模型會使得FPS較低,影響視頻的推理。為了提高推理速度,降低模型參數(shù)量,本文引入了深度可分離卷積。深度可分離卷積可分為兩步,即深度卷積和逐點(diǎn)卷積。逐點(diǎn)卷積即1×1卷積,可改變輸出的通道數(shù);深度卷積則對每個(gè)通道分別進(jìn)行卷積。若輸入特征為DF×DF×M,輸出特征為DF×DF×N,卷積核尺寸為DK×DK×M,則標(biāo)準(zhǔn)卷積參數(shù)量為
Wnor=DF×DF×(DK×DK×M)×N
(7)
深度卷積的參數(shù)量(深度卷積與逐點(diǎn)卷積參數(shù)量之和)為
Wdept=
DF×DF×((DK×DK×1×M)+(1×1×M×N))
(8)
兩種方式參數(shù)量之比
(9)
由上式可以看出,深度可分離卷積有效降低了參數(shù)量。
本文將DPN網(wǎng)絡(luò)塊以及特征融合過程中的普通卷積調(diào)整為深度卷積。由于深度卷積不改變通道數(shù),無法增加特征信息的獲取量,因此在深度卷積前,通過1×1卷積擴(kuò)大通道數(shù)。
表1是本文所采用的改進(jìn)SSD網(wǎng)絡(luò)層參數(shù),其中Sub_block_num表示每個(gè)DPN子塊的數(shù)量。Dept_Block為深度可分離卷積,深度卷積前的通道擴(kuò)大倍數(shù)為4。卷積后添加批標(biāo)準(zhǔn)化(Batch Normalization,BN)層以及激活函數(shù)。
表1 改進(jìn)的SSD模型參數(shù)
實(shí)驗(yàn)的運(yùn)行環(huán)境和工具版本信息如表2所示。訓(xùn)練時(shí),采用Adam優(yōu)化器,初始學(xué)習(xí)率為0.001。當(dāng)驗(yàn)證集損失值連續(xù)5個(gè)訓(xùn)練時(shí)代(Epoch)不下降時(shí),降低10倍學(xué)習(xí)率;連續(xù)11個(gè)Epoch不下降則提前終止訓(xùn)練。訓(xùn)練分為兩步,首先凍結(jié)基礎(chǔ)特征提取網(wǎng)絡(luò),批輸入batch_size為32;觸發(fā)提前終止操作后解凍,重新開始第二步訓(xùn)練,batch_size為8。
表2 實(shí)驗(yàn)環(huán)境
本文以衛(wèi)生間作為實(shí)驗(yàn)場景,通過手機(jī)拍攝及網(wǎng)絡(luò)爬蟲共得5 000張圖片,從中篩選了706張圖片作為實(shí)驗(yàn)數(shù)據(jù)。數(shù)據(jù)集中用于推理的類別有8種,包括馬桶(Closestool)、立柱盆(Wash)、蓮蓬頭(Sprinkler)、浴霸(Light)、熱水器(Calorifier)、地漏(Drain)、窗戶(Window)、鏡子(Mirror)。利用LabelImg工具,將原圖片制作成pascalvoc格式數(shù)據(jù)集。原數(shù)據(jù)按8∶1∶1拆分為訓(xùn)練集、驗(yàn)證集和測試集。訓(xùn)練之前,采用圖像增強(qiáng)技術(shù),例如隨機(jī)裁剪、旋轉(zhuǎn)、顏色扭曲等,來擴(kuò)充數(shù)據(jù)集。
實(shí)驗(yàn)的評價(jià)指標(biāo)用平均精確率(mean Average Precision,mAP)來衡量。mAP的計(jì)算式如下
(10)
式中,AP(q)表示召回率q下的平均準(zhǔn)確率;Q為目標(biāo)種類。
圖6展示了3種算法在在數(shù)據(jù)集上的表現(xiàn),包含了各類別的AP以及平均精確率mAP。圖6(a)~圖6(c)分別為經(jīng)典SSD算法、YOLOv3算法和改進(jìn)后的SSD算法的檢測結(jié)果。
圖6 性能對比(a)經(jīng)典SSD算法檢測結(jié)果 (b)YOLOv3算法檢測結(jié)果 (c)改進(jìn)后的SSD算法檢測結(jié)果Figure 6. Performance comparison(a)Detection result of classic SSD algorithm (b)Detection result of YOLOv3 algorithm (c)Detection result of improved SSD algorithm
從圖6可以看出,相較于原始算法,改進(jìn)后算法的mAP提高了3.47%。此外,改進(jìn)后算法對于小目標(biāo)蓮蓬頭、地漏的檢測AP有較大幅度的提升,分別為5%和15%。與YOLOv3相比,本文算法僅在對窗戶和蓮蓬頭檢測所獲得的AP稍顯不足,但整體上看,改進(jìn)的SSD檢測效果仍優(yōu)于YOLOv3,其mAP有1.49%的提升。
關(guān)于AP較低的蓮蓬頭和地漏,算法改進(jìn)前后的檢測詳情如表3所示。由表3可知兩類別的召回率(Recall)均較低,這是由于數(shù)據(jù)集的不平衡造成。與其他類別相比,數(shù)據(jù)集包含的蓮蓬頭和地漏的樣本信息較少,提取的特征信息相對不足,但從F1(Recall和Precision的調(diào)和平均數(shù))可知,改進(jìn)后的算法性能比較優(yōu)異,召回率和準(zhǔn)確率均有提升。
表3 檢測詳情
圖7展示了3種算法的實(shí)物檢測效果,圖7(a1)~(a4)為采用經(jīng)典SSD算法獲得的結(jié)果。圖7 (b1)~(b4)為采用YOLOv3算法的結(jié)果。圖7 (c1)~(c4)為采用改進(jìn)后SSD算法獲得的結(jié)果。從圖中可以看出,圖7(a1)和圖7(a3)存在誤檢,而圖7(a2)~(a4)有漏檢,圖7(a4)有重復(fù)標(biāo)定的問題。YOLOv3算法雖然沒有重復(fù)標(biāo)定以及誤檢,但存在漏檢。而采用本文算法則可以有效地改善上述問題,改進(jìn)后的算法在查全率和查準(zhǔn)率上均有所提升。
(a1) (a2) (a3) (a4)
本文研究了目標(biāo)檢測技術(shù)在監(jiān)理上的應(yīng)用。針對SSD算法的不足進(jìn)行了改進(jìn),通過更換基礎(chǔ)特征提取網(wǎng)絡(luò)、加權(quán)FPN以及采用深度可分離卷積,有效提升了算法的檢測效果。新模型的mAP達(dá)93.04%,提升了3.47%,對小目標(biāo)檢測的提升效果更為明顯。若數(shù)據(jù)集制作更加合理,則 mAP還有提升的空間。
對于智能化監(jiān)理,目標(biāo)檢測只是第一步,后續(xù)的目標(biāo)分割以及提取施工參數(shù)進(jìn)行判別仍有較多的問題亟需解決。計(jì)算機(jī)視覺技術(shù)的發(fā)展也為機(jī)器驗(yàn)收取代人工驗(yàn)收提供了可能。