孫光民, 陳佳陽, 李冰, 李煜, 閆冬
(1.北京工業大學 信息學部,北京 100124;2.中國煙草總公司 北京市公司,北京 100020)
隨著我國城市化進程的加快,高層甚至超高層樓宇的數量快速增長。這些建筑的外墻通常為磚混結構,利用水泥將緊密排列的磚塊粘附于建筑表面,從而起到保溫、美觀、抗腐蝕的作用。然而經過長時間的風吹、暴曬和雨水侵蝕,磚塊很可能出現裂縫、松動、甚至脫落等現象。若脫落的磚塊從高空墜下,將會對建筑物周邊的行人和車輛等造成極大的危害。因此,對樓面風險的排查越來越受到重視。目前,主要還是采用人工的方式進行建筑外墻的缺陷檢測,例如地面巡查或通過蜘蛛人實地勘察。但是這些人工檢測方法既耗費大量的人力和物力,又不能保證在高空作業的工人的安全。故應用計算機視覺和深度學習技術完成對樓面高清圖像中微小缺陷目標的自動檢測,可以有效地節省人力、提高效率。
由于樓面缺陷檢測任務中待檢測的缺陷面積只有不到總體圖像面積的幾千分之一,故樓面缺陷檢測屬于小目標檢測,為目前計算機視覺領域的研究熱點。目前應用比較廣泛的基于深度學習的目標檢測器主要可以分為2類:第1類是兩步(two-stage)目標檢測器,如Fast R-CNN[1],Faster R-CNN[2],Mask R-CNN[3]等,這些算法特點都是將目標檢測分為2個階段:首先提取候選區域,然后再將其送入檢測網絡完成對目標的定位與識別。第2類是單步(one-stage)目標檢測算法,如單次多盒檢測器(single shot detection,SSD)[4]、你只看一次(you look only once,YOLO)[5],YOLO 9000[6],YOLO V3[7]等,此類算法不需要預先提取候選框,而是直接通過網絡中預設框來完成目標位置的回歸和類別的判斷,是一種端到端的目標檢測算法。然而在小目標檢測場景下,由于目標像素更少、可提取特征更不明顯,傳統的兩步和單步檢測器都難以取得較好的檢測效果。
目前針對小目標檢測算法的優化主要集中在模型的改進上,即在輸入圖像尺寸不變的前提上,通過改進模型結構提升檢測器的特征提取能力以及其檢測精度。目前比較有效的改進算法是特征金字塔網絡[8]。該網絡可嵌入到上述單步或2步檢測器中,其可將主體網絡生成的低層次特征圖與高層次特征圖以特定方式進行融合,完成對特征金字塔的重構。這樣操作后低層次的特征圖感受野范圍提升,其語義信息得到增強,最終使得模型對小目標檢測的精度有了很大提升。
雖然上述改進可以提升模型檢測精度,但是這些模型處理的對象仍然是低分辨率圖像。隨著攝像設備硬件性能的提升,人們可以獲得更高分辨率的圖像。而與低分辨率圖像相比,小目標在高分辨率圖像中可以用更多的像素表征,即可以被更加清晰的刻畫出來。雖然獲得了有效的數據支撐,但目前的檢測算法基本都不直接適用于分辨率高達幾千萬像素的圖像。但如果將高分辨率圖像進行下采樣以適應檢測模型,又將丟失信息,很難對小目標進行檢測[9]。目前很多針對高分辨率圖像小目標檢測問題的研究和應用大多集中在遙感圖像領域[10-11],其中比較具有代表性的是Adam Van Ette提出的基于窗口網絡衛星影像的多尺度快速檢測算法(satellite imagery multiscale rapid detection with windowed networks,SIMRDWN)[12]。該算法利用快速檢測器對通過滑窗獲取的候選區域進行檢測,可以完成對任意尺寸高分辨率圖像的快速檢測任務。但是與衛星遙感圖像不同的是,樓面圖像中缺陷樣式形態各異,難以統一描述,同時圖像中也存在大量復雜紋理區域會干擾檢測,容易引發虛警。為了提升高清圖像中目標的檢測速度和精度,本文提出了一種基于雙尺度建模的檢測框架,旨在基于少量訓練樣本完成高精度高效率的墻面缺陷自動檢測。
利用高清晰度單反相機(SONY A7R2)和長焦鏡頭(FE 100-400 mm F4.5-5.6 GM OSS)拍攝得到的墻面高清圖像的分辨率高達7952×5304像素,而待檢測的墻體缺陷如缺磚、碎磚等一般大小不超過100×100像素。同時,缺、碎磚等缺陷的形狀差異較大,難以對其進行統一的特征描述。而且缺陷的辨識特征主要在于其與周圍背景的差異,其內部的紋理特征并不明顯。此外,樓面高分辨率圖像中的缺陷只占很小面積,絕大部分區域都是正常的。原始高分辨率圖像如圖1所示,其中圖1中的左側紅框內是原始圖像的2個含有缺陷的分辨率為640×640像素的子區域。

圖1 包含缺陷的樓面高分辨率圖像Fig.1 High resolution image with defects
針對樓面圖像的上述特點,本文提出一種基于雙尺度建模的高分辨率樓面圖像缺陷檢測算法。該方法首先將缺陷檢測任務在一大一小2個尺度上進行分解,得到一個雙尺度下的任務組。在大尺度下,設置窗戶,空調、天空等非墻體分割任務,通過結合傳統圖像處理技術和實例分割模型Mask R-CNN得到非墻體分割掩模;在小尺度下,設置缺陷檢測任務,通過重疊式滑窗獲取候選區并送入SSD檢測器獲取切片缺陷檢測結果。根據非墻體與缺陷目標的包含關系,將2個尺度下的分割掩模與檢測框進行決策融合和后處理,最終完成對原始樓面高分辨率圖像中微小缺陷的檢測。本文提出的基于高分辨率樓面圖像的缺陷檢測算法的總體流程如圖2所示。
在大尺度下,對面積較大的非墻體目標進行分割。由于非墻體不包含缺陷,故可以依據其掩模有效縮減需要缺陷檢測的區域并減少誤檢的發生。根據圖像處理中的高斯金字塔理論[13],圖像在不同尺度下的表征可以通過對原始圖像重復應用高斯濾波及下采樣操作得到。首先應用高斯模糊和8倍下采樣,從原始7 952×5 304的樓面高分辨率圖像得到994×663的低分辨率大尺度圖像,并設置天空、空調、窗戶作為該尺度下的分割對象。然后對不同的非墻體目標分別應用傳統圖像處理以及深度學習2種不同的算法進行分割,得到不同非墻體目標的掩模。最終將這些掩膜組合起來,并通過上采樣得到原始尺度下的非墻體掩模。其中,應用傳統圖像處理進行天空的分割;應用實例分割模型Mask R-CNN[3]進行空調、窗戶的分割。大尺度下樓面圖像非墻體區域分割的算法流程如圖3所示。

圖2 樓面圖像缺陷檢測流程Fig.2 Pipeline of defects detection of building wall surface image

圖3 大尺度下的非墻體區域分割算法Fig.3 Non-wall region segmentation at large scale
由于天空顏色會隨著天氣、時間,拍攝像機等因素的變化而變化,故傳統顏色閾值分割方法中的閾值不易設定,算法應用的場景受限。而樓面圖像中天空具有另外2個特征:1)其總體區域較為平坦;2)樓面圖像中的天空基本處于圖像的四周。因而針對這2個特點,本文采用8鄰域區域生長算法對天空區域進行分割[14]。其中種子點選取為圖像的4個角點,生長準則為灰度差值小于設定閾值。
除此,窗戶和空調通常也會頻繁出現于樓面圖像中,它們雖不包含待測缺陷,卻很容易造成檢測器的誤檢。因此為了提升檢測的效率以及精度,本文也提前對圖像中窗戶進行篩選。由于室外拍攝環境復雜,窗內雜物太多,拍攝角度多變等諸多因素的影響,傳統圖像處理很難對目標進行的統一的特征描述,故本文采用實例分割Mask R-CNN深度模型對其進行處理。
將通過不同方式獲得的不同目標的掩模通過相與操作進行合并,最終得到非墻體的二值掩模,其中灰度值為255表示非墻體,0表示墻體。為了便于后續小尺度下的缺陷檢測,需要對該低分辨率掩模進行上采樣為原始分辨率。由于掩模生成本身并不精確,故本文選擇最鄰近插值作為掩膜上采樣的方式。
在得到非墻體掩模后,在小尺度下進行缺陷檢測。與大尺度圖片生成方式不同,本文直接采用圖像的原始尺度作為小尺度表征。由于目前的檢測器輸入皆為低分辨率圖像,故本文采用重疊式滑窗提取候選區域并送入檢測器檢測的方式完成小尺度下的缺陷檢測任務。其中圖像候選區域是否送入檢測器需要依據非墻體掩模上對應位置的窗口區域的狀態進行判斷。為了加快檢測速度,本文選擇SSD[4]模型作為缺陷檢測器,并采用Resnet50[15]作為其主干網絡,同時引入了FPN[8]網絡架構來提升其對于小目標檢測的效果[16],其輸入的圖像分辨率為640×640。小尺度下缺陷檢測的算法流程如圖4所示,SSD缺陷檢測網絡的結構如圖5所示。

圖4 小尺度下的缺陷檢測算法Fig.4 Defects detection at small scale

圖5 小尺度下的缺陷檢測器網絡架構Fig.5 The architecture of the defect detector at the small scale
1.2.1 滑窗參數選擇
為了能夠平衡檢測的精度以及效率,采用重疊式滑窗提取待檢測區域。設重疊滑動窗口寬度為W=640,與SSD模型輸入尺寸相同,滑動步長S∈[1,W]。通過分析,發現窗口的滑動步長S與目標檢測任務有如下幾點關聯:1)所有大小在(W-S)×(W-S)以下的缺陷將至少完整的出現在1個窗口內;2)所有像素在窗口中出現的平均次數為(W-S)×(W-S)次;3)當S可以整除W的時候,所有像素在窗口中出現的次數是一樣的;4)當S大于W的一半時,像素出現次數不平均。由于樣本中所有待檢測缺陷的大小基本都小于(W/2)×(W/2),故根據上述4個特點,選取滑動步長為窗長的一半,即S=W/2,如此可以保證所有大小在320×320以下的缺陷至少出現在一塊完整的切片中,且所有的像素被窗口選取的次數均為4次。
1.2.2 區域篩選算法
當滑窗在原圖上獲取子區域時,也可以同時獲取對應的掩膜子區域,并可以依據掩模子區域的狀態對原圖子區域進行篩選,決定其是否送入檢測器進行檢測。如果掩膜子區域內絕大部分都是非墻體區域,那么就不對該子區域做后續檢測,從而加快對子塊集的檢測速度。而由于非墻體掩膜并不精細,且為了進一步提升檢測的檢測效率,本文選擇定點采樣方式利用掩膜做近似篩選。該方法需要將窗口按照4×4分格,以網格線的交點作為取樣點,則一個窗口內部一共包含9個取樣點。如果9個點內存在1個點屬于墻體,則對應的原圖子區域送入檢測;若9個點全部都是非墻體,則其不送入檢測。窗口內取樣點的位置如圖6中的圓點所示。

圖6 窗口內采樣方式示意(圓點)Fig.6 Sampling mode in window (dots)
1.2.3 檢測結果后處理
應用訓練好的缺陷檢測器對篩選后的原圖子區域進行檢測,即可得到每個子區域上的檢測結果。然后只需要將每個窗口內的檢測框坐標依據所在窗口的位置信息進行調整,即可重新映射為原始高分辨率圖像上的檢測框。設子塊在原始圖像中的左上角點的位置被記錄為(X,Y),子塊內的檢測結果為(x,y,w,h),那么依據簡單的坐標變換就可以得到目標檢測框對應于原圖像的4個參數為(X+x,Y+y,w,h)。然而由于窗口重疊式獲取區域,所以檢測器將對同一目標進行多次檢測,最終導致圖像中同一個目標對應出現多個檢測框。為了避免太多相互覆蓋的檢測框的干擾,還需要對它們進行非極大值抑制處理。
完成不同尺度上的檢測任務后,需要對多尺度檢測結果進行融合。盡管已經借助過大尺度分割結果對小目標檢測區域進行了篩選,但是實際上由于滑動窗口為矩形、掩模生成不精確、區域篩選算法設置寬松等因素的影響,篩選后的窗口內不可避免地仍有部分非墻體區域存在。在這些缺陷目標本不該出現的區域內可能會出現虛警。為了提升檢測精度,將大尺度分割掩膜和小目標檢測結果再次進行融合,依據掩膜將非墻體區域包含的檢測框舍去。然而為了避免非墻體與墻體區域分界處的真實目標不被舍棄,在融合前需要先對非墻體掩模進行簡單的形態學腐蝕處理。從而使其掩膜邊界處的目標缺陷得以保留。
檢測算法中涉及的實例分割網絡及缺陷檢測網絡都需要在COCO[20]數據集上進行預訓練。對于實例分割模型,利用預訓練的Mask R-CNN在標注好窗戶和空調的大尺度低分辨率數據集上進行遷移學習[18-19]。對于小尺度下的缺陷檢測模型,利用預訓練的SSD模型做遷移學習。但是與前者的標準訓練方式不同,為了提升對微小缺陷的檢測精度,本文在數據集制作以及模型訓練方式上都做了改進,下面將對其流程進行介紹。其中所有實驗均基于Tensorflow平臺的Google Object Detection API[17]完成。
初始樣本集的制作需要標注樓面圖像中的缺陷的位置及種類,要求標注矩形框緊貼檢測目標的邊緣,得到初始標注框(xi,yi,wi,hi),其中xi和yi分別為初始標注框的左上角點的橫縱坐標,wi和hi分別為初始標注框的寬度和高度。然而由于缺陷的特征主要表現在其與周邊環境的差異性,故對初始標注框進行修正,為缺陷主動保留背景。設修正后的標注框為(xc,yc,wc,hc):
wc=wi×(1+α)
(1)
hc=hi×(1+α)
(2)
xc=xi-0.5×wc×α
(3)
yc=yi-0.5×hc×α
(4)
式中α∈(0.2,0.8)為擴展參數。通過實驗分析,當α取0.6時,訓練出來的模型檢測精度最高。
由于小尺度高分辨率圖像與檢測器輸入不匹配,故需要依據初始高分辨率數據集制作出合適的數據集,才能進行檢測器的訓練。首先將高分辨率圖像分為訓練集、驗證集和測試集;然后從各集合中的高分辨率圖像上裁剪包含缺陷的切片,得到對應的3個切片集。這些切片要符合檢測器的輸入尺寸,且每一塊至少包含一個目標;最后利用訓練切片集對模型進行訓練并保存在驗證切片集上表現最優的節點作為初次訓練完成后的模型參數。
如果檢測器的輸入樣本較少,那么深度網絡一般難以通過直接訓練得到很好的模型參數。通常可以采用遷移學習的方式解決小樣本問題。遷移學習是指先在開源的大數據集上對模型進行預訓練,然后再在自己的小樣本集上對模型進行微調。除此還可以應用數據擴增技術,例如對高分辨率圖像上的每一個目標進行多次隨機裁剪。由于樓面缺陷樣本較少,故采用遷移學習[18-19]的方式進行模型的訓練。首先讓模型在COCO[20]大數據集上進行預訓練,然后再在樓面缺陷小樣本集上進行微調,最后保存出驗證集上最佳節點作為初次訓練完成的模型參數。
然而由于算法最終處理對象是原始高分辨率圖像,故檢測算法效果的最終評價應該在高分辨率圖像集上獲得。在高分辨率圖像中,除了待檢測缺陷之外,還有大量的會干擾檢測的物體。而由于初次訓練使用的切片集只包含了小目標附近的區域,而不包含干擾項,導致訓練好的模型無法對他們進行區分,進而產生大量虛警。
為了構建更加全面的數據集,應用初次訓練模型對訓練和驗證的原始高分辨率圖集分別進行檢測,并將包含誤檢框的切片作為負樣本引入,生成新的訓練和驗證切片樣本集。這些負樣本切片的類別標簽設定為“正常”,其檢測框標簽則設定為整個切片區域,其數量與正樣本集數量的比例設定為1∶6。然后就可以利用新生成的數據集對初次訓練模型進行二次微調。由于引入了檢測器易于誤檢的樣本,檢測器將能更加關注這些樣本,并能更好地學習到區分正負樣本的特征。這種負反饋機制能夠對模型訓練起到矯正的作用,可以大大降低虛警的發生。需要注意的是,模型訓練完成后并不需要輸出負樣本類別(正常),即負樣本類別只在訓練時發揮作用。
實驗所用樓面圖像采用電動云臺對樓面進行網格式拍攝,圖像分辨率為7 952×5 304。評價指標采用COCO標準的平均精度均值(mean Average Precision,mAP)[20]。mAP理論上為各類別的PR曲線下面積的均值,COCO提供了一種近似計算方法,常用于評估目標檢測模型的效果。
3.1.1 分割模型的訓練及測試效果
用于訓練實例分割模型Mask R-CNN的樣本共31張,圖像分辨率下采樣為994×663,分為訓練集(25張)和驗證集(6張),每張圖片中的窗戶和空調個數不等。保存出驗證切片集上最高mAP節點處的模型作為最終分割模型,將其置信度閾值設定為0.5,得到的檢測效果示意如圖7所示,其中的空調和窗戶2種非墻體都被很好地分割了出來。

圖7 Mask-RCNN的檢測效果示意Fig.7 The training results of Mask RCNN
3.1.2 檢測模型的初次訓練及測試效果
用于訓練SSD模型的樣本共107張,圖像分辨率一般為7 952×5 304,分為訓練集(88張)、驗證集(9張)和測試集(10張),每張圖片中的缺陷個數不等。根據2.1節的樣本制作方法,得到分辨率為640×640切片圖集,其中訓練集、驗證集和測試集對應的切片樣本數量分別為3 180、220和130張(10倍擴增后)。然后利用在COCO數據集上預訓練好的SSD模型在樓面缺陷切片樣本集上進行遷移學習,batch size設為4,學習率設為0.000 05,迭代30 000次。模型在驗證切片集上的mAP隨迭代次數變化的曲線如圖所示,其中IOU閾值設定為0.5。在100 000步迭代后,模型在驗證切片集上的mAP可達到0.7左右,之后趨于穩定。保存出驗證切片集上最高mAP節點處的模型作為初次訓練模型,該模型在測試切片集上的mAP為0.714。將初次訓練模型的置信度閾值設定為0.5,其部分檢測結果如圖8所示,其中模型成功定位出了切片上的缺陷位置,并給出了相應的置信度。

圖8 SSD的模型檢測效果示意Fig.8 The training results of SSD
將初次訓練模型置于檢測算法框架中,應用所提檢測算法對訓練和驗證原始高分辨率圖集進行檢測并計算出模型在高分辨率圖集上的mAP值。從表1和表2的第1行可以發現,相較于初次訓練模型在訓練、驗證和測試的切片集上的mAP,算法在對應高分辨率圖集上的mAP都發生了嚴重的下降。通過觀察與分析檢測結果,認為這一現象主要是由于過多的虛警造成的。為了抑制虛警,將得到檢測結果中未與真實框相交的檢測框作為誤檢,并以其為中心剪切圖片。接著將得到的切片中的檢測框設為整張圖像,類別設為normal(無缺陷),并將其與原始切片樣本混合,得到擴增的訓練和驗證切片集分別為3 721和252張。最后在新數據集上對初次訓練模型進行再次微調,得到2次訓練模型作為最終檢測模型。通過對比表2中初次訓練模型和2次訓練模型在原始高分辨率圖像訓練、驗證和測試集上的mAP數值可以發現,該方法可以有效地提升算法的檢測精度。經過2次訓練后的最終檢測模型在測試集上的mAP為0.480。

表1 不同小尺度檢測器在切片集上的mAP

表2 采用不同小尺度檢測器的所提整體算法在高分辨率圖集上的mAP
分別將初次訓練模型和二次訓練模型置于總體檢測框架中,并應用檢測算法對測試集進行檢測,其部分檢測結果如圖9所示,其中只有周圍標有“缺陷”字樣的檢測框才是預測正確的結果。由圖可知,所提檢測算法在采用初次訓練模型作為小尺度缺陷檢測器時,其檢測結果中產生了很多誤檢,大部分集中在窗戶中疑似物的干擾。而當用二次訓練模型替換初次訓練模型后,所提算法的檢測結果中的誤檢數量明顯變少,證明負樣本的引入的確抑制了虛警的發生。但是同時由于負樣本中有一些與真正缺陷很相近的正常物體,故這些難樣本的引入反而會對待檢測缺陷的特征的學習產生抑制作用,使得模型性能提升有所限制。

圖9 二次訓練模型在某張驗證集圖像上的檢測結果Fig.9 The comparison of detections before re-train and after re-train
SIMRDWN[10]算法僅在單一的尺度下進行缺陷檢測,該算法直接將原始高分辨率大圖進行切分送入小目標檢測框架,不生成掩膜,不對窗戶和空調這些非墻體區域進行切片過濾和檢測框2次篩選。
本次測試結果對比如圖10所示,其中圖10(a)展示的是SIMRDWN算法結果,圖10(b)為相應的多尺度檢測結果對照。可以明顯看出單尺度測試結果中出現了將窗戶內部誤認為是墻體破損區域的檢測框,出現誤檢現象。非墻體區域為本檢測流程帶來了不必要的麻煩,所以針對缺陷目標的特殊性,采用多尺度融合檢測的方法是十分必要且有效的。

圖10 單尺度(SIMRDWN)與雙尺度(所提算法)檢測效果對比Fig.10 The comparison of detections of single-scale(SIMRDWN) and multi-scale
本次實驗中模型在高分辨率樓面圖像上的mAP值如表3所示,與多尺度融合算法(所提算法)框架相比,單尺度算法(SIMRDWN)的精度有明顯下降。同時由于在多尺度中待檢測切片經過了篩選,檢測次數少,算法的時間花費也較少,如表3所示。而由于硬件和模型的差別,并未計算掩膜生成時間,隨著硬件性能的提升,這部分時間也將大大縮短。

表3 不同算法在高分辨率圖集上的mAP和檢測時間對比
為了分析在獲取640×640大小的高分辨率圖像切片時采取不同滑動窗口步長對實驗結果的影響,分別設置滑動窗口步長為窗長的0.25、0.5和0.75進行實驗,3種步長的檢測算法在高分辨率圖集上的檢測時間和mAP如表4所示。

表4 采用不同滑動步長時所提算法的性能比較Table 4 Comparison of the methods of different strides
由表4可知,隨著滑動窗口步長的增大,檢測所需要的時間越來越少。其原因是步長設置越小,一張高分辨率大圖所剪裁出的小圖片數量越多,調用缺陷檢測器的次數越多,耗時越長。在檢測精度方面,訓練集、驗證集上的mAP都隨著滑動步長的增大而減小,其主要原因是候選框的稠密程度下降導致待檢測缺陷不易被檢測到。而與之相反,模型在測試集上的mAP卻呈上升趨勢。通過分析發現,其主要原因是圖片中干擾項太多,減小候選框的稠密程度可以減少誤檢的發生。因此圖像集上的mAP變化是誤檢與漏檢的相互作用以及博弈的結果,為了兼顧檢測精度和效率,滑動步長推薦設置為0.5。
1)在小尺度的缺陷檢測中,以負反饋的形式利用初次檢測的負樣本對模型進行2次訓練可以有效降低檢測器的虛警率。
2)在使用滑窗進行檢測時,步長的選擇是對檢測精度和檢測速度的平衡。其取決于小尺度檢測器的精度,也取決于操作人員對系統效率的要求。后續可以探究自適應步長變化的研究,進一步加快檢測速度。
3)提出的小目標多尺度檢測框架能夠在復雜背景的高分辨率圖像中實現微小目標的精確檢測,且在精度和效率上都要優于傳統單一尺度檢測框架。本文提出方法也適用于遙感圖像或醫學圖像中的目標或病灶檢測。