——CVPR2018,Best Student Entry in the COCO 2017 challenge
——小目標(biāo)檢測,多尺度檢測
摘要
提出在極端尺度變化下檢測識別的不同技術(shù)的分析。通過使用不同尺度的數(shù)據(jù)進行訓(xùn)練來比較檢測器的尺度特性和尺度變化設(shè)計。通過比較不同網(wǎng)絡(luò)結(jié)構(gòu)在分類小目標(biāo)上的性能,得出CNN對圖像目標(biāo)尺度變化并不魯棒。基于這個理論,本文提出在相同尺度的圖像金字塔上訓(xùn)練和測試檢測器。由于小對象和大對象很難在其對應(yīng)的尺度上識別,意即單獨在較大或較小的尺度上檢測大目標(biāo)和小目標(biāo)較為困難,故而提出一種新的訓(xùn)練策略,稱之為SNIP(Scale Normalization for Image Pyramids),將目標(biāo)在不同大小下的梯度信息選擇性反向傳播。在COCO數(shù)據(jù)集上,單個模型達(dá)到45.7%的mAP,三個模型集成達(dá)到48.3%的mAP。
介紹
下圖橫坐標(biāo)表示對象大小所占圖像大小的比例,縱坐標(biāo)表示不同尺度的對象在數(shù)據(jù)集中所有對象中所占的比例,可見COCO數(shù)據(jù)集中90%的對象所占圖像大小比例都小于0.472,而Imagenet數(shù)據(jù)集中對象尺度分布比較均勻。因此Imagenet預(yù)訓(xùn)練模型遷移到COCO數(shù)據(jù)集會帶來較大的domain-shift。另外,在COCO數(shù)據(jù)集中對象尺度差異極大,最小的10%和最大的10%相差超過20倍。
為解決上述問題,有許多解決辦法:如將低層特征與高層特征融合;使用空洞卷積、可形變卷積擴張感受野使檢測器對scale跨度大的問題適應(yīng)性更強;在不同分辨率的層進行獨立預(yù)測;使用上采樣增加上下文信息;在多尺度圖像(圖像金字塔)上進行訓(xùn)練或者測試等等。但是仍有一些問題沒有解決:
1、用上采樣來達(dá)到好的檢測效果是否必要?檢測數(shù)據(jù)集的典型大小是480*640,為什么要將圖像上采樣為800*1200?是否可以用smaller strides來預(yù)訓(xùn)練ImageNet數(shù)據(jù)集中的低分辨率圖像,然后再遷移至目標(biāo)數(shù)據(jù)集?
2、在預(yù)訓(xùn)練時,應(yīng)當(dāng)使訓(xùn)練集中所有大小的目標(biāo)都參與訓(xùn)練么?還是應(yīng)該只選取一部分大小的對象,如64*64~256*256。
對于尺度特定的檢測器,一個解決對象尺度變化的方法是為不同尺度的對象單獨訓(xùn)練檢測器,在對象大小接近的數(shù)據(jù)集上進行遷移學(xué)習(xí)有助于減少domain shift,但是這種訓(xùn)練方法會減少每個尺度的訓(xùn)練樣本的數(shù)量,這也會造成性能下降。另一方面,用所有的訓(xùn)練樣本來訓(xùn)練一個單尺度的檢測器將使得網(wǎng)絡(luò)學(xué)習(xí)變得困難,因為網(wǎng)絡(luò)需要學(xué)習(xí)檢測大范圍尺度的對象。
基于此,本文提出一種新穎的訓(xùn)練策略:SNIP(Scale Normalization for Image Pyramids),通過圖像金字塔來克服尺度變化問題。為了減小遷移學(xué)習(xí)中的domain shift,只對預(yù)訓(xùn)練模型對象尺度相似的RoI/anchors的梯度進行回傳,由于上述約束,在對數(shù)據(jù)集中每個尺度進行訓(xùn)練時,可以有效利用所有訓(xùn)練對象,性能得到極大提升,打破了只要提供足夠數(shù)據(jù),深度CNN就能解決尺度變化的共識。利用Deformable-RFCN骨架網(wǎng)絡(luò),在COCO數(shù)據(jù)集上。
實際上,目前也有很多針對小目標(biāo)的措施和改良,如:
使用dilated/strous卷積來提高特征圖的分辨率,Dilated/deformable卷積擴張/可變形的卷積保留了預(yù)訓(xùn)練網(wǎng)絡(luò)的權(quán)重和感受野,并且不會帶來大物體性能的下降;最常用的,Upsample來rezie網(wǎng)絡(luò)輸入圖像的大小,訓(xùn)練時將誒圖像放大1.5倍到2倍,測試時將圖像放大4倍;使用FPN(FPN,Mask-RCNN,RetinaNet)把淺層特征和深層特征融合的,或者最后在預(yù)測的時候,使用淺層特征和深層特征一起預(yù)測;或者直接地在淺層和深層的特征圖上直接各自獨立做預(yù)測的(SDP,SSH,MS-CNN,SSD)。
《Finding tiny faces》將每個尺度的響應(yīng)值做最大池化之后,再進行梯度的反向傳播,在分類層中不同尺度的人臉使用不同的核,但是這樣的方法在對象檢測中有較大的局限性,因為每一類的訓(xùn)練數(shù)據(jù)量將被限制,而且通用對象在外觀、姿態(tài)上比人臉更復(fù)雜。而且本文發(fā)現(xiàn)在R-FCN中為每一類加入固定尺度的核將對性能造成損傷。
Image Classification at Multiple Scales
現(xiàn)在的很多檢測模型為了提升對小目標(biāo)的檢測精度,一般都會在 800×1200的分辨率上訓(xùn)練圖片,為了進一步提升對小目標(biāo)的監(jiān)測精度,在inference時會進一步放大圖片,比如在1400×2000的分辨率上檢測。也就是說 train和test(inference)之間是存在domain shift 的。本文從實驗上來驗證放大圖片對于檢測效果的影響:
CNN-B:是在高分辨率圖像的數(shù)據(jù)集上訓(xùn)練的(ImageNet 224),然后測試時,先將ImageNet的圖像下采樣至 48x48, 64x64, 80x80, 96x96 和128x128 大小,然后再上采樣至224,將這個ImageNet稱為ImageNet up-sampled low resolution images to 224(將低分辨率圖片上采樣至224)。
CNN-S:是在低分辨率圖像的數(shù)據(jù)集上訓(xùn)練的(ImageNet 48x48, 64x64, 80x80, 96x96 and 128x128, 通過降采樣完成),測試也是在相應(yīng)低分辨率上測試的。
CNN-B-FT:是在高分辨率圖像的數(shù)據(jù)集上訓(xùn)練(ImageNet 224),而后又在上采樣到224的低分辨率的數(shù)據(jù)集(ImageNet up-sampled low resolution images to 224數(shù)據(jù)集)上fine-tuning的,測試也是在ImageNet up-sampled low resolution images to 224數(shù)據(jù)集上。
(a)CNN-B 在不同分辨率圖像上的測試精度。CNN-B是在高分辨率圖像上訓(xùn)練的,然后在由不同低分辨率圖像上采樣構(gòu)成的 ImageNet上測試的。測試圖像與訓(xùn)練圖像的分辨率差別越大,效果越差。使用網(wǎng)絡(luò)沒有訓(xùn)練過的圖像進行測試,結(jié)果只能是次優(yōu)的,至少對于分類問題來說是這樣。
(b)、(c)三種訓(xùn)練好的模型在 48×48 (96×96)大小的低分辨率圖像上的測試精度,CNN-B的效果最差,CNN-S次之,CNN-B-FT最好。
直接用低分辨率圖像訓(xùn)練(CNN-S,減小第一個卷積步長),然后低分辨率測試,效果是比較好的。直接啟發(fā)是如果檢測時想要提升對小目標(biāo)的檢測效果,應(yīng)該專門在低分辨率的ImageNet上訓(xùn)練一個對低分辨率圖像最優(yōu)的分類模型(通過減小步長),然后再遷移到檢測任務(wù)上,用于檢測小目標(biāo)。
先在高分辨率圖像訓(xùn)練然后再在上采樣后的低分辨率圖像上fine-tuning 效果最好,說明分類模型在高分辨率圖像中學(xué)習(xí)到了其他更有用的信息,上采樣是有用的。直接啟發(fā)是在高分辨率圖像上先預(yù)訓(xùn)練,然后再在低分辨率圖像上fine-tuning,對于分類小目標(biāo)是有利的,應(yīng)該比前一條提到的方法更有效。
進一步:
在高分辨率圖像上先預(yù)訓(xùn)練,然后再在低分辨率圖像上fine-tuning,對于分類小目標(biāo)時有利的。
如果檢測時的proposals與ImageNet預(yù)訓(xùn)練模型的分辨率相近,那么可以減少domain shift。
上采樣確實是有用的。
Multi-scale Detection
D-RFCN作為baseline,ResNet101 作為backbone,在800*1200分辨率的圖像上進行訓(xùn)練,5種anchor scales用于產(chǎn)生proposals。
train和test時分辨率不同將會存在domain shift,但是由于GPU現(xiàn)存的限制,這個差異一般都會存在。事實檢測模型經(jīng)常會在800×1000的分辨率上訓(xùn)練,然后再1400×2000的分辨率上測試。
在COCO數(shù)據(jù)集上關(guān)于scale-specific detector和scale invariant detector的實驗:固定測試時的分辨率為 1400×2000 ,然后通過調(diào)整不同的輸入來對比COCO數(shù)據(jù)集上小目標(biāo)(小于32×32的目標(biāo))的檢測精度。主要使用800×1000和1400×2000這兩種訓(xùn)練輸入分辨率,然后再梯度反向傳播時,把所有scale的ROI的梯度回傳。因此下表 800all,1400all,就是代表這個意思。
800all和1400all分別表示檢測網(wǎng)絡(luò)基于800*1400和1400*2000大小的圖像進行訓(xùn)練,從二者的mAP結(jié)果對比可以看出1400all的效果要更好一些,主要原因就在于訓(xùn)練圖像的分辨率和測試圖像的分辨率一致,這和前面基于ImageNet數(shù)據(jù)集的實驗結(jié)果也吻合,但這個提升非常小,猜測原因在于雖然基于放大圖像(原始圖像約640*480,放大成1400*2000)訓(xùn)練的模型在訓(xùn)練過程中可以提高對小目標(biāo)物體的檢測,但是由于訓(xùn)練數(shù)據(jù)中尺寸中等或較大的目標(biāo)經(jīng)過放大之后尺寸太大所以難以訓(xùn)練,這就影響了模型最終的效果。
1400<80px表示訓(xùn)練數(shù)據(jù)尺寸是1400*2000,但是訓(xùn)練過程中忽略中等尺寸和大尺寸的目標(biāo)(中等和大尺寸目標(biāo)的標(biāo)準(zhǔn)是在原始圖像中目標(biāo)寬高的像素點大于80),這就是scale-specific detector,也就是基于單一尺寸范圍的輸入進行訓(xùn)練,這樣能夠減少所謂的domain-shift。因此做這個實驗的目的是基于前面那個實驗中的猜想:基于1400*2000大小的圖像訓(xùn)練時由于訓(xùn)練數(shù)據(jù)中尺寸中等及較大的目標(biāo)對模型訓(xùn)練有負(fù)作用,因此這里直接在訓(xùn)練過程中忽略這樣的數(shù)據(jù)。但是可以看出這個模型的效果非常差,猜想原因是忽略這些訓(xùn)練數(shù)據(jù)(占比大約30%)所帶來的數(shù)據(jù)損失對模型效果的影響更大。
Multi-Scale Training(MST)表示訓(xùn)練一個檢測器時采用不同尺度的圖像進行訓(xùn)練(包括480*800),也就是scale invariant detector。照理來說這個實驗的效果應(yīng)該會比較好的,因為每個object都會有多種不同尺寸來訓(xùn)練檢測模型,但是可以看出該模型的效果和800all差不多,主要原因在于訓(xùn)練數(shù)據(jù)中那些尺寸非常大或非常小的object會影響訓(xùn)練效果,因此這篇文章在引入MST思想的同時限定了不同尺寸的object在訓(xùn)練過程中的梯度回傳,這就是SNIP。?
Object Detection on an Image Pyramid
Scale Normalization for Image Pyramids
SNIP是MST的改進版本,只有當(dāng)對象的分辨率和預(yù)訓(xùn)練模型的訓(xùn)練數(shù)據(jù)即相近時(224*224),才使用它來訓(xùn)練檢測器。在MST中,每張圖片都被縮放到不同的尺度,在高分辨率圖像中,原本較大的對象變得更大,很難檢測到,在低分辨率圖像中,原本較小的對象變得更小,也很難檢測到。SNIP的做法就是只對尺寸在指定范圍內(nèi)的目標(biāo)回傳損失(該范圍需接近預(yù)訓(xùn)練模型的訓(xùn)練數(shù)據(jù)尺寸),也就是說訓(xùn)練過程實際上只是針對這些目標(biāo)進行的,這樣就能減少domain-shift帶來的影響。又因為訓(xùn)練過程采用了類似MST的做法,所以每個目標(biāo)在訓(xùn)練時都會有幾個不同的尺寸,那么總有一個尺寸在指定的尺寸范圍內(nèi)。需要注意的是對目標(biāo)的尺寸做限制是在訓(xùn)練過程,而不是預(yù)先對訓(xùn)練數(shù)據(jù)做過濾,訓(xùn)練數(shù)據(jù)還是基于所有數(shù)據(jù)進行。實驗證明這種做法對小目標(biāo)物體的檢測非常有效。
某個ROI在訓(xùn)練中是否回傳梯度是和預(yù)訓(xùn)練模型的數(shù)據(jù)尺寸相關(guān)的,也就是說當(dāng)某個ROI的面積在指定范圍內(nèi)時,該ROI就是valid,也就是會在此次訓(xùn)練中回傳梯度,否則就是無效的,valid anchor的定義是和invalid ground truth的IOU小于0.3的anchor。
在前向時,使用RPN在每個分辨率上生成候選區(qū)域,然后在每個分辨率上獨立分類,跟訓(xùn)練階段相似,在每個分辨率上,不將落在指定面積范圍之外的檢測結(jié)果剔除,在經(jīng)過分類和回歸之后,使用soft-NMS來講不通分辨率上的檢測結(jié)果融合起來。
為了降低訓(xùn)練對GPU內(nèi)存的要求,將原圖進行裁剪,目標(biāo)是在原圖裁剪盡可能少的1000x1000的區(qū)域,并且這些裁剪區(qū)域包含所有的小目標(biāo)具體方法:選擇一幅圖像;隨機生成50個1000x1000的裁剪區(qū)域;選擇包括目標(biāo)最多的裁剪區(qū)域;如果所有裁剪區(qū)沒有包含原圖所有的目標(biāo),繼續(xù)隨機生成50個1000x1000的裁剪區(qū)域;由于很多目標(biāo)在原圖邊界,再加上是隨機裁剪,為了加快速度,裁剪時,保證裁剪區(qū)域的至少一個邊在原圖邊界上,對于分辨率小于1000*1000的,或者不包含小目標(biāo)的圖像,不進行處理。實驗證明裁剪原圖不是提高精度的原因。
對于分辨率為1400*2000的訓(xùn)練圖像,原圖中的有效尺寸的范圍為[0,80],800*1200的訓(xùn)練圖像,原圖中有效尺寸為[40,160],480*800的訓(xùn)練圖像有效尺寸為大于等于120。
關(guān)于RPN網(wǎng)絡(luò)中anchor的正負(fù)樣本比例。在RPN網(wǎng)絡(luò)中,一個anchor的標(biāo)簽是根據(jù)該anchor和ground truth的IOU來決定的,只有兩種情況下才會認(rèn)為某個anchor的標(biāo)簽是正樣本:1、假如該anchor和某個ground truth的IOU超過某個閾值(閾值默認(rèn)采用是0.7),那么該ancho就是正樣本;2、假如一個ground truth和所有anchor的IOU都沒超過該閾值,那么和該ground truth的IOU最大的那個anchor就是正樣本。將conv4的輸出作為RPN網(wǎng)絡(luò)的輸入,然后設(shè)置了15種anchor(5 scales,3 aspect ratios),發(fā)現(xiàn)在COCO數(shù)據(jù)集上(圖像大小為800*1200),只有30%的ground truth滿足前面第一種情況,即便將閾值調(diào)整為0.5,也只有58%的ground truth滿足第一種情況,說明即便閾值等于0.5,仍有40%的正樣本anchor和ground truth的IOU小于0.5(這些anchor是因為滿足前面的情況2才被定義為正樣本)。顯然,這樣的正樣本質(zhì)量不算很高。而引入多種分辨率的圖像作為輸入在一定程度上緩解了這種現(xiàn)象。