SNIP——“自适应”型“狙击”策略 (目标检测)(two-stage)(深度学习)(CVPR 2018)
論文名稱:《?An Analysis of Scale Invariance in Object Detection – SNIP 》
論文下載:https://arxiv.org/abs/1711.08189
論文代碼:http://bit.ly/2yXVg4c
一、概述:
1、本文的主要工作:
(1)通過實驗驗證了upsampling對于提高小目標檢測的效果——認為其效果不大;
(2)提出了一種Scale Normalization for Image Pyramids的方法——很有道理但不易實現。
2、針對COCO數據集的實驗結論:
作者對COCO數據集的尺度進行了分析,下圖中,橫坐標代表了GT目標與圖像大小的IoU比,縱坐標代表了尺度的概率分布(每個IoU所對應該值以內GT的比重)。COCO數據集中,大部分的object面積只有圖像面積的1%以下,這說明在COCO數據集中小目標占比要比ImageNet數據集大。另外,從Figure1中的COCO曲線可以看出,第90%的倍數(0.472)差不多是第10%的倍數(0.106)的20倍!這說明在COCO數據集中的object尺寸變化范圍非常大。
3、作者的motivation:
(1)現在檢測網絡為了提高對小目標的效果,都采用upsample的方法,這個真的是必要的嗎?我能不能直接用低分辨率的圖像不做upsample來訓練網絡(需要調小strides),即在ImageNet上用低像素圖片預訓練一個縮放倍數較小的CNN?
(2)用ImageNet做預訓練模型的時候訓練檢測器的時候, 是否所有尺寸的object都可以參與進來?用所有的gt來訓練真的更好嗎? 能不能通過挑選樣本的方式來增加網絡效果的,比如我upsample調整了大小以后,只用64x64~256x256范圍的ground truth來訓練?
4、現在有很多針對小目標的措施和改良方案:
(1)擴大卷積感受野:使用dilated/strous或者deformable這類特殊的卷積來提高檢測器對分辨率的敏感度(如RFB);
(2)上采樣把小目標變大:最常用的,upsample來rezie網絡輸入圖像的大小(如YOLO);
(3)融合低層特征:使用FPN這種把淺層特征和深層特征融合的,或者最后在預測的時候,使用淺層特征和深層特征一起預測;也有比較直接地在淺層和深層的feature map上直接各自獨立做預測的(如FPN);
二、內容:
1、提出訓練策略:
(1)CNN-B——原圖訓練(高清)+ “偽高清”測試(低清upsample):
CNN-B是一個在224x224尺度上訓練的模型, 其stride=2,將測試圖片降采樣到 [48x48, 64x64, 80x80, 96x96,128x128], 然后再放大回224x224用于測試。
結論:訓/測尺度(實際上是清晰度)差距越大,,性能越差,?因為不用與訓練尺度相互匹配的尺度進行測試, 會使得模型一直在sub-optimal發揮。
(2)CNN-S——低清訓練 + 低清測試:
CNN-S是根據上述原則,,做的訓練/檢測尺度匹配的實驗.,選取48x48作為訓練和測試的尺度.,并且stride=1,根據結果看到, 訓/測尺度匹配后, 性能大幅提升. 同樣將48換成96也得到一致的結果.
(3)CNN-B-FT——原圖訓練(高清)+ “偽高清”微調(低清upsample) +? “偽高清”測試(低清upsample):
把由原圖訓練的CNN-B用偽高清去做微調.,最終CNN-B-FT的結果甚至好于CNN-S。可得在高清訓練集學出來的模型依然有辦法在低清晰度的圖片上做預測,直接用低清晰度圖片微調好過將stride降低得到高清圖片后微調(重新訓練)。
總結,這三個網絡:
? ?(1) CNN-B使用高分辨率圖像訓練,分類經過降采樣和upsample的圖片;
? ?(2)CNN-S使用低分辨率圖像訓練,分類經過降采樣的圖片;
? ?(3)CNN-B-FT使用高分辨率圖像訓練,然后在低分辨率圖像上fine-tune,分類經過降采樣和upsample的圖片;
本質上,其實三個網絡都是在對小目標進行分類,最后結果,CNN-B-FT準確率最高,CNN-S其次,作者認為這是因為模型從高分辨率圖像中得到了充分的學習。同時說明,訓練樣本和輸入樣本如果分辨率存在太大誤差,performance必然下降。與其為了小目標而專門使用改變的網絡結構(CNN-S),直接upsample微調和使用高分辨率圖像預訓練得到的模型是更好的選擇(CNN-B-FT)。
作者想通過上面這個實驗說明:
(1)upsample確實一定程度上可以提高性能,但是并不顯著,這是因為Upsample提高了小目標的檢測效果,但會讓本來正常大小或者本來就大的目標過大,性能下降;
(2)訓練網絡需要使用大量樣本,樣本損失會導致性能下降;
(3)隨機在分辨率之間采樣的效果也不好,雖然你的樣本滿足了多尺度條件,但是還有其它原因限制了性能。
2、提出SNIP:
(1)SNIP的思想:
SNIP是MST(多尺度訓練)的升級版.,只有當這個物體的尺度與預訓練數據集的尺度(通常224x224)接近時,我們才把它用來做檢測器的訓練樣本。這一切基于一個假設, 即不同尺度的物體,因為多尺度訓練,總有機會落在一個合理的尺度范圍內,只有這部分合理尺度的物體參與了訓練, 剩余部分在BP的時候被忽略了,不參與反向傳播。
(2)SNIP中的RPN階段(以anchor為基礎生成region proposal):
1)生成Anchor并判斷正負:用所有的GroundTruth給Anchors分配好+/-標簽;
2)刪除過大、過小的Anchor:根據第i個尺度下的有效范圍: [si,ei], 將GroundTruth根據是否落在范圍內分為Valid/Invalid GT;
3)刪除定位不準的Anchor:除那些IoU(anchors|InvalidGT)>0.3的Anchors;
(3)SNIP中的FC階段:
1)給region proposal分類:用所有的GroundTruth給ProposalRoIs分配好類別標簽;
2)在本次迭代的本張圖片中刪除過大or過小的GT和Proposal:棄用不在[si,ei]范圍內的GT和Proposals;
3)在本次迭代中刪除不存在合適大小的GT的圖片;
(4)算法核心:
1)在生成Anchor并給Anchor分配label的時候,檢查該Anchor是否和某個invalid gt box的overlap超過0.3,若存在,則該Anchor會被視作invalid Anchor;若不存在,則會被視作valid Anchor。這些invalie anchor在train的時候都會被無效化,也不會加入到反向傳播的過程中從而對參數產生影響,相當于在每個分辨率上,只對大小合適的目標進行訓練,相應的,在inference預測邊界框時候,如果區域面積在那個分辨率的指定范圍外,也同樣會被拋棄,最后,在進行rescale和NMS。
2)SNIP相當于開了三個pipe-line,劃分了三個尺度,其中包括了三個并行的feature extraction,對應三種不同分辨率的圖像,每個pipe-line的RPN只負責一個scale range的proposal生成,每個分辨率i下的RoI都有其指定范圍,如果gt的box大小在這個范圍內,就被標記做valid,否則就被標記為invalid。每個尺度只學最容易學的region proposal,因此SNIPaccuracy高,但speed慢;
3)對于大尺度的feature map,對應的RPN只負責預測被放大的小物體,此時原來的大目標因為太大已經不在有效范圍內;對于小尺度的feature map,對應的RPN只負責預測被縮小的大物體,此時原來的小目標因為太小已經不在有效范圍內;這樣的設計保證了每個CNN分支在判別proposal是否為感興趣區域時,只需針對最易分類的中等range的proposal進行訓練,而不會大小一起學從而走火入魔——學亂了記差了;
(5)細節問題:
1)作者使用的是Deformable RFCN detector而不是常見的一般卷積;
2) 作者使用的網絡結構是Dual path networks(DPN)和ResNet-101,由于需要內存很大,為了適應GPU內存,作者對圖像進行了采樣,具體方法是選取一個1000x1000的包含最多目標的區域作為子圖像,然后重復該步驟直到所有目標都被選取;
3) 作者為了提升RPN的效果,嘗試了使用7個尺度,連接conv4和conv5的輸出等等。
三、測試階段:
1、測試方法:
(1)用多尺度正常進行測試;
(2)在合并多尺度Detection之前, 只在各個尺度留下滿足其條件的參與Detection的框;
(3)Soft-NMS合并結果;
2、實驗結果:
總結
以上是生活随笔為你收集整理的SNIP——“自适应”型“狙击”策略 (目标检测)(two-stage)(深度学习)(CVPR 2018)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国防科技论坛,一个不错的技术资料分享网站
- 下一篇: oracle的权限授予,oracle权限