王超奇,宮法明
(中國石油大學(華東)計算機科學與技術學院,山東 青島 266580)
自從ImageNet[1]競賽中引入卷積神經(jīng)網(wǎng)絡以后,各種使用卷積神經(jīng)網(wǎng)絡的方法就一直占據(jù)著目標檢測準確率的榜首。其中影響最大且效果好的3種算法分別是:Faster R-CNN[2]、SSD(Single Shot MultiBox Detector)[3]和YOLO[4-5]。R-CNN系列使用RPN(Region Proposal)和ROI(Region of Interest)技術來提高準確率和實時性,而SSD在RPN的基礎上提出了多尺度檢測框架,提高了小目標的檢測率。YOLO系列則實現(xiàn)了端到端(end-to-end)的目標檢測,在大幅度提升檢測效率的同時也利于網(wǎng)絡優(yōu)化。但在目標檢測領域快速發(fā)展的同時,還有一些問題仍有待解決,例如特征的有效學習。
對于深度學習而言,學習到高魯棒性的特征是高準確率的基礎。目前,在機器學習應用中,能夠學習到有效特征的計算開銷是極大的,而且在復雜情況下是非常困難的。一個典型的例子就是單樣本學習(one-shot learning)[6],其中必須在只給出每個類的一個樣本的情況下,對剩余樣本做出正確的預測。施工圖圖例檢測就是一種單樣本學習問題,施工圖樣例如圖1所示。
圖1 施工圖樣例
施工圖中間部分是圖紙區(qū)域,右上角是圖例區(qū)域(不同施工圖可能不一樣),其他部分包含了無用信息。施工圖一般為A3紙大小,分辨率一般為3508×4961或更高。圖紙和圖例部分分別如圖2和圖3所示,圖例像素一般為25×25左右,在圖紙中往往與背景重合較多。圖例檢測即需要在圖紙區(qū)域中檢測出不同圖例的種類和位置。這項工作可以大幅提升相關工作人員的看圖速度,同時能夠降低漏看、誤看的概率,提高工作效率,具有重要的理論研究和應用價值。
圖2 部分圖紙區(qū)域
圖3 圖例區(qū)域
圖例檢測具有其特殊性,包括施工圖(輸入圖像)分辨率較大、圖例(檢測目標)較小、圖例的尺度不變性和個體獨立性(不同類別圖例間差距巨大)等特點。結合單樣本學習的特性,本文使用結構簡單且易于優(yōu)化的SSD目標檢測框架,在此基礎上進行按需調整,提出一種新的SiameseSSD檢測框架以解決訓練集過少、小目標難以檢測以及大圖像輸入等問題。
本文的主要貢獻是通過微調SSD框架,在此基礎上加入孿生網(wǎng)絡結構,提出SiameseSSD檢測框架,利用大圖像裁剪與單樣本數(shù)據(jù)增強等方法解決以上幾個問題。在圖例檢測任務上達到了91.3%(IOU=0.5,CONF=0.8)的準確率,較其他目標檢測算法有一定優(yōu)勢,基本可以滿足實際工作的需求。
深度學習方法已經(jīng)被證明是高效的機器學習方法,但是,深度學習往往都需要大量的標注數(shù)據(jù)集來訓練模型,當樣本每個類都只包含少量樣本的情況下,深度學習方法就難以發(fā)揮作用。針對單樣本學習問題,Chopra等人[7]提出了將輸入映射成特征向量,使用2個特征向量來表達不同圖像間的相似度。Koch等人[8]通過學習圖像對之間的相似性,把單樣本分類任務轉化為圖像驗證任務,同時也證明了成對訓練的有效數(shù)據(jù)集的大小足以用于訓練模型。Vinyals[6]等人通過訓練一個完整的近鄰分類器,而不是學習相似度函數(shù),來解決單樣本學習任務,提供了一種單樣本學習任務的新思路。
Santoro等人[9]解釋了單樣本學習和元學習的關系,揭示了單樣本學習的實質。Bertinetto等人[10]和Li等人[11]通過孿生網(wǎng)絡結構提取一對圖像的特征,并使用互相關(cross-correlation)操作輸出響應圖,描述圖像對之間的相似性,在目標跟蹤任務上達到非常高的實時性。最近Zhang等人[12]引入貝葉斯條件概率理論,并使用孿生網(wǎng)絡結構有效地解決了單樣本目標檢測問題,驗證了孿生網(wǎng)絡結構對單樣本目標檢測的有效性。鑒于以上研究,筆者認為把圖像對進行互相關操作得到的響應圖,作為一種特征圖直接進行分類和邊框回歸是高效且可行的。同時,圖像配對訓練也可以有效地解決每一類樣本過少的問題。
圖例相對于圖像來說顯得過小,主流的目標檢測方法幾乎都通過不斷的下采樣來進行多尺度檢測。相對地,在高層特征圖上,感興趣的目標可能就只有幾像素。以YOLO為例,最終的預測網(wǎng)格只有13×13大小,相對于原圖像(416×416)縮小了32倍,這意味著,如果對象很小,那么對于一個檢測網(wǎng)格的影響可能非常小,難以檢測。對于這個問題,Redmon等人[5]使用聚類調整了錨點框的位置,使目標定位更準確。Zhang等人[13]使用更低的特征圖做檢測,效果顯著。Lin等人[14]提出的特征金字塔網(wǎng)絡(Feature Pyramid Networks, FPN)通過上采樣融合高層和低層特征圖的信息,達到了目標檢測的先進水平。但由于圖例的結構簡單(語義信息不足)、個體獨立性(不同類圖例差異巨大)和圖像配對算法的限制,使得其難以訓練。而SSD由于其結構簡單,具有很大的改進空間,故本文嘗試改進SSD并增大響應圖來增強對小目標的檢測效果。
由于大部分卷積神經(jīng)網(wǎng)絡結構具有固定性,在圖片不符合其輸入圖像大小時,往往需要進行大小調整(resize)來適應網(wǎng)絡結構,這種情況在LeNet[15]網(wǎng)絡上就是如此。在Darknet[16]中,訓練時會對短邊進行填充從而保證長寬比,這雖然是一種解決方法,但這些都會帶來問題,例如減少圖像語義信息、降低對小目標的檢測效果以及增加測試難度等。Van Etten等人[17]提出對大圖像的分塊裁剪算法,通過拼接結果并使用非極大值抑制(Non-Maximum Suppression, NMS)處理結果,這是一種不降低檢測準確率前提下的大分辨率圖像目標檢測方法。
本章將介紹所提出的SiameseSSD檢測框架,如圖4所示。左側是孿生網(wǎng)絡結構的特征提取網(wǎng)絡。右側則是SSD框架的改良,對于一張?zhí)卣鲌D同時進行分類和邊框回歸。通過孿生網(wǎng)絡提取特征向量后,使用相關操作(☆位置)得到響應圖,同時作為SSD的輸入。在SSD中,對于特征圖上每一個網(wǎng)格,對應4個錨點框(anchor)和4×(k+4)個卷積核,4k個用于分類,4×4個用于邊框回歸。具體而言,改良SSD完成了分類和邊框回歸的工作;將圖像輸入到孿生網(wǎng)絡的入口,通過整個SiameseSSD框架進行端到端的訓練和檢測。
圖4 SiameseSSD框架
在孿生網(wǎng)絡中,本文采用不填充的全卷積網(wǎng)絡。令Lτ表示翻譯操作符(Lτx)[u]=x[u-τ],對于任意平移τ與整數(shù)步長k,如果滿足公式(1):
h(Lkτx)=Lτh(x)
(1)
那么信號映射函數(shù)h是全卷積的。在圖4中,59×59大小的輸入圖為模板圖,而207×207大小的輸入為檢測圖。設學習函數(shù)f(z,x),即將模板圖z與檢測圖上相同大小的候選圖像x進行比較,相同則返回高分。測試所有可能位置,并選擇與目標之前外觀具有最大程度相似的候選塊x,從而學習訓練函數(shù)f。更進一步,將深度卷積網(wǎng)絡作為函數(shù)f。孿生網(wǎng)絡對輸入x、z用變換φ,定義:
f(z,x)=g(φ(z),φ(x))
(2)
用函數(shù)g組合輸入表示,函數(shù)g即相關操作,用卷積[10-11]來實現(xiàn)。函數(shù)φ的結構如表1所示,表1是圖4中CNN的結構信息,對2個輸入進行相應處理。類似于Krizhevsky等人[18]的網(wǎng)絡的卷積階段。在每個卷積層后面(除了Conv5)都包含線性修正單元(Rectified Linear Unit, ReLU)模塊。卷積時不引入填充,因為會違反圖像的全卷積性。訓練時在線性層加入BN(Batch Normalization)[19]。深度孿生卷積網(wǎng)絡先前已應用于面部驗證[20-21],關鍵點描述學習[22]和一次性字符識別[8]等任務,是使用孿生特征提取網(wǎng)絡的基礎。
表1 卷積嵌入函數(shù)φ的體系結構(圖4中的CNN)
SSD目標檢測網(wǎng)絡與SSD的結構大體相同。其中,輸入圖像38×38×256是孿生特征提取網(wǎng)絡的輸出。如圖4所示,對于任意特征圖的每個網(wǎng)格都會對應4×(k+4)個卷積核,k為圖例的種類數(shù)量。配對圖像從孿生網(wǎng)絡進入,生成響應圖后輸入SSD,最后在SSD里完成圖例檢測。由于沒有復雜的殘差結構和多尺度特征融合,可以方便地進行端到端的訓練和檢測。檢測與訓練不同的是,模板圖在前向傳播一次以后即可駐存在內存中,與不同的檢測圖直接進行互相關操作即可。
相對于原始的SSD,本文做出許多微調。首先,Luo等人[23]的工作驗證了圖像感受野和下采樣之間的關系,即有效感受野極大地影響不同尺度的目標的檢出率。因此,本文認為當有效感受野能正好覆蓋目標真實框時,可以有效提高小目標的檢出率。因此,本文調整了特征圖大小,即使是最高層的7×7特征圖,有效感受野上仍然可以覆蓋圖例。本文舍棄了原SSD的高層特征圖,使用5個低層的特征圖來提高圖例的檢出率。
錨點框的形狀和大小也是有效感受野的影響因素之一。對于不同層次的特征圖,接受域也不一樣[24]。通過分析圖例的長寬比以及在特征圖上的占比,本文調整了SSD的錨點框尺寸(scale)為:
(3)
(4)
置信度損失(confidence loss)為Softmax損失,位置損失(localization loss)為Smooth L1 loss,并保留超參數(shù)α(實際設定為1)均衡2種損失。
在訓練階段,本文從施工圖數(shù)據(jù)集中取出相對應的一對樣本對(來自同一張背景圖片)。本文設定標注框IOU大于0.5的錨點框為正樣本,小于的為負樣本。由于圖例結構簡單(語義信息少)且具有個體獨立性(不同類圖例差異較大),特征學習速度可能會呈現(xiàn)先快后慢的情況,本文使用Adam[25]在不確定最佳初始學習率的情況下對SiameseSSD進行端到端的訓練。同時,由于圖片配對訓練的機制會導致難易樣本不均衡(easy sample overwhelming)的問題,本文使用RetinaNet[26]中提出的Focal loss,添加于Softmax損失前,有效地解決了不同種類圖例的學習問題。
本文的數(shù)據(jù)集采集于海洋采油廠的施工圖中。為了解決樣本過少的問題,本文采用了特殊的樣本數(shù)據(jù)增強方法。如圖5和圖6所示。
圖5 通過圖片嵌入獲得檢測圖
本文采集了2份數(shù)據(jù),一份是原始圖例數(shù)據(jù),即從圖例區(qū)域通過標注獲得的數(shù)據(jù)。另一份是背景圖,本文從施工圖的圖紙區(qū)域中裁剪出207×207大小的背景圖片,把圖例樣本嵌入到背景中心來獲得檢測圖。要注意的是,嵌入的背景圖不包含所嵌入的圖例,避免錯誤標注的樣本。同樣地,通過裁剪檢測圖中心59×59的區(qū)域,就可以輕松獲得模板圖,這樣就獲得了一對樣本對,如圖6所示。
圖6 通過圖片裁剪獲得模板圖
同時,單樣本數(shù)據(jù)增強是提高樣本質量的有效手段。本文使用放大和縮小(通過隨機裁剪)[3]、隨機旋轉等操作,成功地把數(shù)據(jù)集擴大了5~6倍。通過標注,本文一共獲得樣本對11780對,共37種圖例,來自21張施工圖。
在數(shù)據(jù)增強之后,直接在數(shù)據(jù)集里選取一部分作為測試數(shù)據(jù)是不合適的,因為測試圖像只來自于圖紙的一部分,無法完全代表整個測試數(shù)據(jù)。同時,施工圖還包含了很多無用信息,會使檢測難度上升。本文借鑒Van Etten等人[17]使用的裁剪(crop)后拼接的方法來處理大分辨率的施工圖圖像,直接對標注后的施工圖進行測試。大分辨率圖像裁剪的結果如圖7所示,實線框與虛線框的交界處即為重疊部分。
圖7 大分辨率圖像裁剪
設定重疊為15%,每次都裁剪207×207大小的測試圖,在測試后合并同一施工圖的結果,并使用NMS來去除那些重疊的檢測框。施工圖會預先進行離線標注,方便測試。模板圖使用原始樣本,嵌入59×59的空白背景中,使其分辨率與訓練時一致。最終本文標注了測試樣本共115個,共生成測試圖3256張,共11種圖例,來自6張訓練過訓練數(shù)據(jù)的施工圖,最多產生11×3256種圖像配對。
本文實驗環(huán)境為:Intel Core i7-9750H @ 2.60 GHz ,16 GB DDR4 2666 MHz內存, Nvidia GeForce GTX 1660 Ti 6GB, Ubuntu-kylin 16.04,64位操作系統(tǒng),Pytorch框架。由于孿生網(wǎng)絡本身建立于單目標的配對比較上,在多目標任務上順序執(zhí)行檢測會極大地影響檢測速度。所以本文利用模型本身的可并行性,并行執(zhí)行多目標檢測任務,使多個種類的圖例可以同時檢測,最后統(tǒng)一檢測結果。在該實驗環(huán)境下,SiameseSSD檢測器的檢測速度達到61幀/s(fps)。由于圖例檢測的最終目的是為了在靜態(tài)的施工圖上檢測出所有圖例,以此滿足看圖、施工相關人員的需求,只要響應速度滿足人的感受閾值即可。對于施工圖而言,一張施工圖在檢測時一般裁剪出550張左右的檢測圖,以本文實驗環(huán)境約需9 s,尚可滿足看圖者的需求,所以一般滿足實際工作要求。最后,可以通過更新實驗環(huán)境、增大裁剪大小并縮小檢測圖、減少檢測范圍等方法滿足更嚴苛的速度要求。
為了合理評價SiameseSSD在施工圖數(shù)據(jù)集上的表現(xiàn),本文挑選了Adaboost+Haar、YOLO、Faster R-CNN。它們分別是傳統(tǒng)目標檢測方法、深度學習下的單階段(one-stage)目標檢測方法和雙階段(two-stage)目標檢測方法的代表性方法。由于結構上的不同,訓練方法也不同。Adaboost中每類100張正樣本、30張負樣本。正樣本為圖例直接嵌入背景,負樣本只存在背景(不包含圖例)。YOLO和RCNN中每類100張樣本,通過圖例嵌入背景并進行旋轉、縮放等操作制作樣本。測試集與SiameseSSD的測試圖一致。結果如表2所示。
表2 施工圖數(shù)據(jù)集各檢測算法結果
由于Adaboost是個單目標分類器,檢測多目標時多個分類器串聯(lián)導致檢測速度極慢。但由于其特征計算簡單、參數(shù)較少,并行執(zhí)行時獲得了最快的檢測速度。另一方面,其對無關區(qū)域的魯棒性較差,導致準確率極低。YOLO和Faster R-CNN的準確率較低,可能是因為訓練樣本過少,無法獲得有效訓練。SiameseSSD相比于準確率第二的Faster R-CNN,在準確率上高出29.5個百分點。同時,比第二快的YOLO快了14幀/s。筆者認為,由于圖例間不存在重疊現(xiàn)象(否則使用NMS會影響準確率),且一般都相隔一定距離,所以SiameseSSD對于圖例的檢測效果才會這么好。同時,相比于YOLO,本文使用207×207的輸入圖,并且在孿生特征提取網(wǎng)絡里只做了少量簡單運算,所以在檢測速度上也會有優(yōu)勢。
為了驗證SSD的改變對于小目標檢測的影響,本文設置對照試驗,通過控制變量來檢驗結構改變對于性能的影響。對于所有的實驗,本文都使用相同的輸入,確保對照實驗的有效性。
本文通過控制特征圖每個網(wǎng)格的錨點框數(shù)量和改變錨點框的尺寸變化,通過同樣的訓練集和測試集,額外訓練了2個模型,最終得到表3的結果。筆者認為,對于包含3和1/3錨點框的情況,由于錨點框的增多,對于目標的檢測次數(shù)必然會增多,同時增多的卷積核也會增強特征學習能力,所以準確率略有提升。但檢測速度的大幅下降,使得網(wǎng)絡面對大分辨率施工圖時不那么友好。而較小的錨點框尺寸變化幅度加強了整體對小目標的檢測能力,但對檢測速度并無影響,只在一定程度上影響目標定位的準確度(即平均IOU)。
表3 錨點框對SiameseSSD性能的影響
相對而言,特征圖大小的變化對于SiameseSSD性能的影響難以衡量,因為變量太多,排列組合下會產生很多種可能性,影響判斷。如表4所示,本文通過改變最后一個卷積層的大小和步長來調整最后一層特征圖的大小,之后通過一樣的步驟進行訓練和測試。通過控制變量,筆者發(fā)現(xiàn)準確率隨特征圖網(wǎng)格數(shù)變少有明顯的下降趨勢,但又存在一個下降緩慢的點(5×5)。通過分析,筆者認為有一部分的圖例樣本的特征學習正好在5×5特征圖附近,使得其稍顯異常。而8×8和6×6特征圖對應的模型準確率與7×7都極為接近,說明該特征圖大小分布極有可能尚未達到最優(yōu),微調任意層特征圖的大小都有可能提高準確率。通過互補搜索技術組合[27]應該可以優(yōu)化該網(wǎng)絡。
表4 特征圖大小對SiameseSSD性能的影響
表3和表4的結果在一定程度上驗證了對SSD的適當改變可以有效提高準確率和檢測速度。同時,也可以通過設置一些參數(shù)來控制準確率和檢測速度的平衡,以適應不同場景下的不同實際需求。
本文提出將孿生網(wǎng)絡結構與SSD目標檢測框架結合用于圖例檢測,并結合圖例本身的特點,調整了孿生特征提取子網(wǎng)和SSD子網(wǎng)的網(wǎng)絡結構,構建SiameseSSD目標檢測框架。通過在施工圖數(shù)據(jù)集上的實驗表明,該檢測方法在單樣本情況下的單目標檢測任務上有非常優(yōu)異的性能。但是,該檢測方法受限于孿生網(wǎng)絡結構的配對輸入,一次前向傳播只能檢測一種目標,在資源受限的情況下檢測速度不佳。為了提高檢測速度,針對多目標檢測進行結構調整,這是孿生網(wǎng)絡結構應用于單樣本多目標檢測的關鍵,也是筆者下一步研究的重點。