SNIP 算法笔记
論文:An Analysis of Scale Invariance in Object Detection – SNIP 
 論文鏈接:https://arxiv.org/abs/1711.08189 
 代碼鏈接:http://bit.ly/2yXVg4c
這篇是CVPR2018的文章,引用文獻(xiàn)非常到位,同時(shí)實(shí)驗(yàn)結(jié)果非常驚艷,總體來看比同是CVPR2018上的cascade RCNN效果還要好一些。概括而言,這篇文章從COCO數(shù)據(jù)集開始分析,認(rèn)為目前目標(biāo)檢測(cè)算法的難點(diǎn)在于數(shù)據(jù)集中object的尺寸分布較大,尤其對(duì)于小目標(biāo)的檢測(cè)效果也有待提高,因此提出Scale Normalization for Image Pyramids (SNIP)算法來解決這個(gè)問題。
先來看看這篇文章的出發(fā)點(diǎn)。這篇文章的出發(fā)點(diǎn)可以簡(jiǎn)單概括為:數(shù)據(jù)集。作者發(fā)現(xiàn)如果將數(shù)據(jù)集按照?qǐng)D像中object的尺寸(scale)除以圖像尺寸的倍數(shù)來排序,那么在ImageNet數(shù)據(jù)集中,這個(gè)倍數(shù)的中位數(shù)差不多是0.554倍,而在COCO數(shù)據(jù)集中,這個(gè)倍數(shù)是0.106倍,如Figure1中兩條線標(biāo)出的Median點(diǎn)所示。Figure1是關(guān)于ImageNet和COCO數(shù)據(jù)集中object尺寸和圖像尺寸的倍數(shù)關(guān)系曲線,橫坐標(biāo)表示object的尺寸/圖像尺寸的值,縱坐標(biāo)表示占比。也就是說在COCO數(shù)據(jù)集中,大部分的object面積只有圖像面積的1%以下,這說明在COCO數(shù)據(jù)集中小目標(biāo)占比要比ImageNet數(shù)據(jù)集大。另外,從Figure1中的COCO曲線可以看出,第90%的倍數(shù)(0.472)差不多是第10%的倍數(shù)(0.106)的20倍!這說明在COCO數(shù)據(jù)集中的object尺寸變化范圍非常大。
那么這種差異會(huì)帶來什么影響呢?因?yàn)樵谀繕?biāo)檢測(cè)算法中常用基于ImageNet數(shù)據(jù)集預(yù)訓(xùn)練的模型來提取特征,也就是常說的遷移學(xué)習(xí),但是從Figure1的兩條曲線可以看出ImageNet和COCO數(shù)據(jù)集在object的尺寸分布上差異比較大,這樣在做遷移學(xué)習(xí)時(shí)可能會(huì)存在一些問題,文章中將這個(gè)問題概括為domain-shift,可以簡(jiǎn)單理解為訓(xùn)練集和測(cè)試集分布存在較大差異,后面會(huì)有實(shí)驗(yàn)來證明這種差異對(duì)效果的影響。其實(shí)去年的YOLO v2也研究了類似的問題,YOLO v2考慮到在ImageNet數(shù)據(jù)集上預(yù)訓(xùn)練模型時(shí)輸入圖像大小是224*224,和檢測(cè)網(wǎng)絡(luò)用的尺寸差別較大(YOLO v2中常用416*416),所以就將預(yù)訓(xùn)練模型在416*416的ImageNet數(shù)據(jù)集上繼續(xù)預(yù)訓(xùn)練,然后再用到檢測(cè)模型提特征,這樣就實(shí)現(xiàn)了預(yù)訓(xùn)練模型和檢測(cè)模型的良好過渡。 
 
其實(shí)之前就有不少算法針對(duì)數(shù)據(jù)集中不同尺寸的object檢測(cè)進(jìn)行改進(jìn),比如以Feature Pyramid Network(FPN)為例的通過融合高低層特征并基于多層融合特征單獨(dú)預(yù)測(cè)的算法;以Dilated/Deformable Convolution為例的通過改變卷積核的感受野來提升檢測(cè)效果;以multi-scale training/inference為例的通過引入圖像金字塔來訓(xùn)練或驗(yàn)證圖像。這篇文章基于對(duì)數(shù)據(jù)集的分析,提出一種新的訓(xùn)練模型的方式:Scale Normalization for Image Pyramids (SNIP),該算法主要包含兩個(gè)改進(jìn)點(diǎn):1、為了減少前面所提到的domain-shift,在梯度回傳時(shí)只將和預(yù)訓(xùn)練模型所基于的訓(xùn)練數(shù)據(jù)尺寸相對(duì)應(yīng)的ROI的梯度進(jìn)行回傳。2、借鑒了multi-scale training的思想,引入圖像金字塔來處理數(shù)據(jù)集中不同尺寸的數(shù)據(jù)。
接下來詳細(xì)介紹這兩種改進(jìn)。
首先是在ImageNet數(shù)據(jù)集上做關(guān)于scale variantion的實(shí)驗(yàn),換句話說就是驗(yàn)證前面提到的domain-shift對(duì)模型效果的影響。實(shí)驗(yàn)結(jié)果參看Figure3和Figure4,主要通過基于不同分辨率的圖像訓(xùn)練模型和用不同分辨率的圖像作為驗(yàn)證集來驗(yàn)證的方式評(píng)估訓(xùn)練集和測(cè)試集的尺度差異對(duì)效果的影響。
CNN-B:分類模型還是基于ImageNet數(shù)據(jù)集常規(guī)的224*224大小來訓(xùn)練,但是驗(yàn)證數(shù)據(jù)做了修改,首先將ImageNet的驗(yàn)證數(shù)據(jù)縮小到48*48、64*64、80*80、96*96和128*128,然后再將這些尺寸放大到224*224作為模型的輸入,可以看出放大后的圖像分辨率較低。因此這個(gè)實(shí)驗(yàn)?zāi)M的就是你訓(xùn)練數(shù)據(jù)的分辨率(resolution)和驗(yàn)證數(shù)據(jù)的分辨率不一致(甚至是差別很大)的時(shí)候?qū)πЧ挠绊?#xff0c;該實(shí)驗(yàn)的結(jié)果可以看Figure4(a)。 
 CNN-S:訓(xùn)練數(shù)據(jù)的分辨率和驗(yàn)證數(shù)據(jù)的分辨率保持一致,這里主要針對(duì)48*48和96*96分辨率,同時(shí)對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的第一層做了修改。比如基于48*48的數(shù)據(jù)進(jìn)行訓(xùn)練,將卷積核大小為7*7的卷積層換成卷積核為3*3,stride為1的卷積層。基于96*96的數(shù)據(jù)進(jìn)行訓(xùn)練時(shí),將卷積核大小為7*7的卷積層換成卷積核尺寸為5*5,stride為2的卷積層。顯然,該實(shí)驗(yàn)?zāi)M的是訓(xùn)練數(shù)據(jù)分辨率和驗(yàn)證數(shù)據(jù)分辨率一致時(shí)的效果,實(shí)驗(yàn)結(jié)果可以看Figure4(b)(c)。 
 CNN-B-FT:是CNN-B在放大的低分辨率圖像上fine tune后的模型,同時(shí)輸入圖像也采用放大的低分辨率圖像。可以看出該實(shí)驗(yàn)主要驗(yàn)證基于高分辨率圖像訓(xùn)練的模型是否能有效提取低分辨率圖像的特征,實(shí)驗(yàn)結(jié)果可以看Figure4(b)(c)。 
 
Figure4是關(guān)于Figure3中提到的CNN-B、CNN-S和CNN-B-FT的實(shí)驗(yàn)結(jié)果。從(a)可以看出如果驗(yàn)證數(shù)據(jù)的分辨率和訓(xùn)練數(shù)據(jù)的分辨率差別越大,則實(shí)驗(yàn)結(jié)果越差。這說明其實(shí)CNN網(wǎng)絡(luò)對(duì)尺寸變化的輸入圖像的魯棒性(robust)還不夠好。從(b)和(c)中CNN-B和CNN-S的對(duì)比可以看出當(dāng)訓(xùn)練數(shù)據(jù)的分辨率和驗(yàn)證數(shù)據(jù)的分辨率相同時(shí),效果要好很多。從(b)和(c)中CNN-B和CNN-B-FT的對(duì)比可以看出后者的效果要更好,二者的差別僅僅在于模型是否在放大的低分辨率圖像上做fine tune,因此可以得出結(jié)論:基于高分辨率圖像訓(xùn)練的模型同樣能有效提取放大的低分辨率圖像的特征。 
 
介紹完在ImageNet數(shù)據(jù)集上的實(shí)驗(yàn),接下來就來看看在COCO數(shù)據(jù)集上關(guān)于scale-specific detector和scale invariant detector的實(shí)驗(yàn),具體實(shí)驗(yàn)結(jié)果參看Table1和Figure5。
Table1是關(guān)于在小目標(biāo)驗(yàn)證集上的檢測(cè)效果對(duì)比,所用的驗(yàn)證圖像尺寸都是1400*2000。 
 800all和1400all分別表示檢測(cè)網(wǎng)絡(luò)基于800*1400和1400*2000大小的圖像進(jìn)行訓(xùn)練,從二者的mAP結(jié)果對(duì)比可以看出1400all的效果要更好一些,主要原因就在于訓(xùn)練圖像的分辨率和驗(yàn)證圖像的分辨率一致,這和前面基于ImageNet數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果也吻合,但這個(gè)提升非常小,猜測(cè)原因在于雖然基于放大圖像(原始圖像大概640*480,放大成1400*2000)訓(xùn)練的模型在訓(xùn)練過程中可以提高對(duì)小目標(biāo)物體的檢測(cè),但是由于訓(xùn)練數(shù)據(jù)中尺寸中等或較大的目標(biāo)的尺寸太大所以難以訓(xùn)練,這就影響了模型最終的效果。檢測(cè)結(jié)果可以參考Figure5(1)。 
 1400<80px表示訓(xùn)練數(shù)據(jù)尺寸是1400*2000,但是訓(xùn)練過程中忽略中等尺寸和大尺寸的目標(biāo)(中等和大尺寸目標(biāo)的標(biāo)準(zhǔn)是在原始圖像中目標(biāo)寬高的像素點(diǎn)大于80),這就是前面所說的scale-specific detector,也就是基于單一尺寸范圍的輸入進(jìn)行訓(xùn)練,這樣能夠減少所謂的domain-shift。因此做這個(gè)實(shí)驗(yàn)的目的是基于前面那個(gè)實(shí)驗(yàn)中的猜想:基于1400*2000大小的圖像訓(xùn)練時(shí)由于訓(xùn)練數(shù)據(jù)中尺寸中等及較大的目標(biāo)對(duì)模型訓(xùn)練有負(fù)作用,因此這里直接在訓(xùn)練過程中忽略這樣的數(shù)據(jù)。但是從Table1可以看出這個(gè)模型的效果非常差,猜想原因是忽略這些訓(xùn)練數(shù)據(jù)(占比大約30%)所帶來的數(shù)據(jù)損失對(duì)模型效果的影響更大,具體的檢測(cè)結(jié)果可以參考Figure5(2)。 
 Multi-Scale Training(MST)表示訓(xùn)練一個(gè)檢測(cè)器時(shí)采用不同尺度的圖像進(jìn)行訓(xùn)練(包括480*800),也就是前面所說的scale invariant detector。照理來說這個(gè)實(shí)驗(yàn)的效果應(yīng)該會(huì)比較好的,因?yàn)槊總€(gè)object都會(huì)有多種尺寸來訓(xùn)檢測(cè)模型,但是從Table1可以看出該模型的效果和800all差不多,這是為什么呢?主要原因在于訓(xùn)練數(shù)據(jù)中那些尺寸非常大或非常小的object會(huì)影響訓(xùn)練效果,因此這篇文章在引入MST思想的同時(shí)限定了不同尺寸的object在訓(xùn)練過程中的梯度回傳,這就是SNIP。 
 Scale Normalization for Image Pyramids(SNIP)是這篇文章提出的算法,從Table1可以看出效果提升非常明顯。 
 
Figure5是關(guān)于Table1中不同實(shí)驗(yàn)的訓(xùn)練數(shù)據(jù)展示。 
 
鋪墊了這么多,終于輪到這篇文章的主角登場(chǎng)了:Scale Normalization for Image Pyramids(SNIP)。
從前面的分析可以看出,我們希望有一個(gè)算法能夠既get到多尺度的目標(biāo)信息,又能減少domain-shift帶來的影響,因此就誕生了SNIP。SNIP借鑒了Multi-Scale Training(MST)的思想,在MST方法中,由于訓(xùn)練數(shù)據(jù)中尺寸極大或極小的目標(biāo)會(huì)影響實(shí)驗(yàn)結(jié)果,因此SNIP的做法就是只對(duì)尺寸在指定范圍內(nèi)的目標(biāo)回傳損失(該范圍需接近預(yù)訓(xùn)練模型的訓(xùn)練數(shù)據(jù)尺寸),也就是說訓(xùn)練過程實(shí)際上只是針對(duì)這些目標(biāo)進(jìn)行的,這樣就能減少domain-shift帶來的影響。又因?yàn)橛?xùn)練過程采用了類似MST的做法,所以每個(gè)目標(biāo)在訓(xùn)練時(shí)都會(huì)有幾個(gè)不同的尺寸,那么總有一個(gè)尺寸在指定的尺寸范圍內(nèi)。需要注意的是對(duì)目標(biāo)的尺寸做限制是在訓(xùn)練過程,而不是預(yù)先對(duì)訓(xùn)練數(shù)據(jù)做過濾,訓(xùn)練數(shù)據(jù)還是基于所有數(shù)據(jù)進(jìn)行。實(shí)驗(yàn)證明這種做法對(duì)小目標(biāo)物體的檢測(cè)非常有效,參看Table1中SNIP的mAP結(jié)果。
Figure6是SNIP算法的示意圖。不管是訓(xùn)練檢測(cè)器還是RPN網(wǎng)絡(luò),都是基于所有g(shù)round truth來定義proposal和anchor的標(biāo)簽。正如前面所述,某個(gè)ROI在某次訓(xùn)練中是否回傳梯度是和預(yù)訓(xùn)練模型的數(shù)據(jù)尺寸相關(guān)的,也就是說當(dāng)某個(gè)ROI的面積在指定范圍內(nèi)時(shí),該ROI就是valid,也就是會(huì)在此次訓(xùn)練中回傳梯度,否則就是無效的(如Figure6中右邊的紫色框所示)。這些invalid ROI所對(duì)應(yīng)的invalid ground truth會(huì)用來決定RPN網(wǎng)絡(luò)中anchor的有效性確定。invalid anchor的定義是和invalid ground truth的IOU大于0.3的anchor就是invalid anchor,如Figure6中左邊的黑色框所示。 
 
關(guān)于RPN網(wǎng)絡(luò)中不同標(biāo)簽的anchor比例作者也做了分析,我們知道在RPN網(wǎng)絡(luò)中,一個(gè)anchor的標(biāo)簽是根據(jù)該anchor和ground truth的IOU來決定的,只有兩種情況下才會(huì)認(rèn)為某個(gè)anchor的標(biāo)簽是正樣本(標(biāo)簽為1):1、假如該anchor和某個(gè)ground truth的IOU超過某個(gè)閾值(閾值默認(rèn)采用是0.7),那么該ancho就是正樣本。2、假如一個(gè)ground truth和所有anchor的IOU都沒超過該閾值,那么和該ground truth的IOU最大的那個(gè)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是因?yàn)闈M足前面的情況2才被定義為正樣本)!顯然,這樣的正樣本質(zhì)量不算很高。而這篇文章因?yàn)橐攵喾N分辨率的圖像作為輸入,所以在一定程度上緩解了這種現(xiàn)象。另外,作者也嘗試將conv4和conv5的特征做融合并預(yù)測(cè),不過這部分文章只是一筆帶過,還需要看源碼才能知道具體是怎么做的。
實(shí)驗(yàn)結(jié)果: 
 Table2是SNIP算法和其他算法的對(duì)比。第二行的multi-scale test顯然比第一行的single scale效果要好。第三行,在multi-scale test的基礎(chǔ)上加入multi-scale train的時(shí)候,會(huì)發(fā)現(xiàn)在大尺寸目標(biāo)(APL)的檢測(cè)效果上要比只有multi-scale test的時(shí)候差。這個(gè)原因我們?cè)谇懊嬉步榻B過了,主要是因?yàn)橛?xùn)練數(shù)據(jù)中那些尺寸極大和極小的object對(duì)訓(xùn)練產(chǎn)生了負(fù)作用。 
 
Table4是幾個(gè)目標(biāo)檢測(cè)算法結(jié)果的對(duì)比。D-RFCN表示Deformable RFCN。D-RFCN+SNIP(RCN+RPN)表示在Deformable RFCN算法的檢測(cè)模塊和RPN網(wǎng)絡(luò)中同時(shí)加入SNIP。 
 
總結(jié)
 
                            
                        - 上一篇: android 农历源码,android
- 下一篇: 英雄无敌服务器维护,英雄无敌王国服务器地
