最近開始看一些object detection的文章,順便整理一下思路。排版比較亂,並且幾乎全部圖片都是應用的博客或論文,若有侵權請聯繫我。
文章閱讀路線參考
目前已完成的文章以下,後續還會繼續補充(其中加粗的爲精讀文章):git
吐槽一下,博客園的markdown居然沒有補齊功能,我仍是先在本地補全再傳上來吧。。。github
在深度學習應用以前,圖像的特徵是人工定義的具備魯棒性的特徵,如SIFT,HOG等,下面簡要介紹一下HOG。
8x8像素框內計算方向梯度直方圖:算法
特徵金字塔,對於不一樣大小的物體進行適應,設計尺度不變性特徵
windows
加組件組合的HOG特徵, 組件間計算彈性得分,優化可變形參數markdown
若是沒有彈性距離,就是BoW (Bag of Word)模型, 問題很大, 位置所有丟失:
網絡
n個組件的DPM計算流程:
框架
過度割後基於顏色紋理等類似度合併,
而後,過度割、分層合併、建議區域排序dom
此時的框架就是RCNN的雛形,由於DPM就是基本由RBG和他導師主導,因此大神就是大神。ide
2012年AlexNet贏得LSVRC的ImageNet分類競賽。深度CNN結構用來圖像特徵提取。
學習
BBR 在DPM時代就和SVM分類結合,通常直接使用線性迴歸,或者和SVR結合
RCNN做爲深度學習用於目標檢測的開山之做,能夠看出是基於Selective Search + DPM/HoG + SVM框架,只不過將是將手工特徵轉變爲CNN提取特徵,本文主要貢獻以下:
主要流程以下:
regional preposals(selective research)
CNN feature extraction
SVM Classification
NMS
bounding-box regression(BBR)
爲啥能work?
Multi-Region的提出, 開始對Box進一步作文章, 至關於對Box進一步作加強,但願改進加強後的效果,主要改善了部分重疊交叉的狀況。
特徵拼接後使得空間變大,再使用SVM處理, 效果和R-CNN基本相似.
不得不說雖然OverFeat在可是比賽成績不是太好,可是它的思想仍是頗有啓發性的。
OverFeat直接拋棄了Selective Search,採用CNN上slide windows來進行框推薦,而且把Bounding box Regression整合一塊兒使用全鏈接層搞定, 解決了後面一端的問題(取代了SVM分類器和BBR線性迴歸器),這個思想影響了後來的Fast RCNN。是第一個End to End 的目標檢測模型,模型雖然簡陋,可是能夠驗證網絡強大的擬合能力注意整合目標檢測的各項功能(分類,迴歸)。
亮點:
爲啥能work?
能夠看出OverFeat將不一樣的兩個問題物體分類和位置迴歸採用了兩個分支網絡,共用前面的CNN特徵表述,而CNN提取的特徵正如OverFeat所言,是一種相似於SIFT,HOG等人工描述子的一種穩定的描述子(底層抽象),能夠用於構建不一樣的任務(高層表述),也就是模型爲何能work的緣由。
R-CNN和Overfeat都存在部分多尺度,重疊效果的問題。 某種意義上, 應對了HoG特徵, 這樣對於物體來講相似BoW模型, 咱們知道DPM裏面,是帶有組件空間分佈的彈性得分的, 另外也有HoG Pyramid的思想。 如何把Pyramid思想和空間限制得分加入改善多尺度和重疊的效果呢? MR-CNN裏面嘗試了區域加強, Overfeat裏面嘗試了多尺度輸入。 可是效果都通常。 這裏咱們介紹另一個技術Spatial Pyramid Matching, SPM,是採用了空間尺度金字塔的特色。和R-CNN相比作到了先特徵後區域, 和Overfeat相比自帶Multi-Scale。
SPP pooling layer 的優點:
也能看出文章仍是強調用CNN作特徵的提取,仍是用的BBR和SVM完成迴歸和分類的問題
能夠看出Fast RCNN結合了OverFeat和Sppnet的實現,打通了高層表述和底層特徵之間的聯繫
主要流程:
任意size圖片輸入CNN網絡,通過若干卷積層與池化層,獲得特徵圖;
在任意size圖片上採用selective search算法提取約2k個建議框;
根據原圖中建議框到特徵圖映射關係,在特徵圖中找到每一個建議框對應的特徵框【深度和特徵圖一致】,並在RoI池化層中將每一個特徵框池化到H×W【VGG-16網絡是7×7】的size;
固定H×W【VGG-16網絡是7×7】大小的特徵框通過全鏈接層獲得固定大小的特徵向量;
將上一步所得特徵向量經由各自的全鏈接層【由SVD分解實現(全鏈接層加速)】,分別獲得兩個輸出向量:一個是softmax的分類得分,一個是Bounding-box窗口迴歸;
利用窗口得分分別對每一類物體進行非極大值抑制剔除重疊建議框
其中ROI POOL層是將每個候選框映射到feature map上獲得的特徵框經池化到固定的大小,其次用了SVD近似求解實現全鏈接層加速。
這裏須要注意的一點,做者在文中說道即便進行多尺度訓練,map只有微小的提高,scale對Fast RCNN的影響並非很大,反而在測試時須要構建圖像金字塔使得檢測效率下降。這也爲下一步的多尺度改進埋下了伏筆。
爲啥能更好的work?
也是結合了OverFeat的和SPPnet的work,同時規範了正負樣本的斷定(以前因爲SVM和CNN對區域樣本的閾值劃分不一樣而沒法統一網絡,固然這只是其中的一個緣由。更多的估計是做者當時沒想到),將網絡的特徵抽取和分類迴歸統一到了一個網絡中。
這篇論文是對,CMU與rbg的online hard example mining(OHEM)改進,hard example mining是一個針對目標檢測的難例挖掘的過程,這是一個更充分利用數據集的過程。實際上在RCNN訓練SVM時就已經用到,可是OHEM強調的是online,即如何在訓練過程當中選擇樣本。同期還有S-OHEM的改進。
而隨着可是GAN的火熱,A-Fast-RCNN嘗試生成hard example(使用對抗網絡生成有遮擋和有形變的兩種特徵,分別對應網絡ASDN和ASTN)
結論以下:
ASTN 和 隨機抖動(random jittering)作了對比,發現使用AlexNet,mAP分別是58.1%h和57.3%,使用VGG16,mAP分別是69.9%和68.6%,ASTN 的表現都比比隨機抖動效果好。做者又和OHEM對比,在VOC 2007數據集上,本文方法略好(71.4% vs. 69.9%),而在VOC 2012數據集上,OHEM更好(69.0% vs. 69.8%)。gan用於目標檢測尚未很好的idea,這篇論文至關於拋磚引玉了。
同時須要注意的一個問題,網絡對於比較多的遮擋和形變狀況識別狀況更好;可是對於正常目標的特徵抽象能力降低,因此有時候創造難例也要注意樣本的數量。下面是一些因爲遮擋緣由形成的誤判。
這篇文章標誌着two-stage目標檢測的相對成熟,其主要改進是對候選區域的改進,將候選區域推薦整合進了網絡中。
結合後面的一系列文章,能夠馬後炮一下它的缺點:
做者的論文簡直是一股論文界的泥石流,做者自己是一個喜歡粉紅小馬的大叔,萌萌噠。實際上YOLO一直髮展到v3都是簡單粗暴的目標檢測方法,雖然學術界模型繁雜多樣,可是在實際應用工業應用上YOLO絕對是一個首選的推薦。YOLO v1版本如今看來真是簡單粗暴,也印證了網絡抽象的強大之處。能夠看出做者沒有受到太多前輩的影響,將對象檢測從新定義爲單個迴歸問題,直接從圖像像素到邊界框座標和類機率(固然這也是一個缺乏座標約束也是一個缺點)。
YOLO的明顯缺點,如多尺度問題,密集物體,檢測框耦合,直接回歸座標等在yolo 9000中也作了比較好的改進。
SSD做爲one stage的表明模型之一,省去了判斷推薦候選區域的步驟(實際上能夠認爲one-stage就是以feature map cell來抽象代替ROI Pooling功能) ,雖然SSD和Faster RCNN在Anchor box上一脈相承,可是Faster RCNN卻仍是有一個推薦候選區域(含有物體的區域)的監督部分(注意後面其實也是整合到了最終Loss中),所以one-stage優點是更快,而含有區域推薦的two-stage目前是更加準確一些。(更看好one-stage,其實區域推薦不太符合視覺系統,可是能夠簡化目標檢測問題),主要貢獻:
缺點:
爲啥能更好的工做?
SSD的出現對多尺度目標檢測有了突破性進展,利用卷積層的自然金字塔形狀,設定roi scale讓底層學習小物體識別,頂層學習大物體識別
SSD網絡引入了多尺度feature map,效果顯著。那Faster RCNN天然也不能落後,如何在Faster RCNN中引入多尺度呢?天然有FPN結構
同時FPN也指出了SSD由於底層語義不足致使沒法做爲目標檢測的feature map
注意原圖的候選框在Faster RCNN中只固定映射到同一個ROI Pooling中,而如今若是某個anchor和一個給定的ground truth有最高的IOU或者和任意一個Ground truth的IOU都大於0.7,則是正樣本。若是一個anchor和任意一個ground truth的IOU都小於0.3,則爲負樣本。
本文算法在小物體檢測上的提高是比較明顯的,另外做者強調這些實驗並無採用其餘的提高方法(好比增長數據集,迭代迴歸,hard negative mining),所以能達到這樣的結果實屬不易。
一個SSD上移植FPN的典型例子,做者主要有一下改動:
本文着重討論了不一樣特徵圖之間的融合對SSD的影響(水論文三大法寶),這篇論文創新點不是太多,就不說了
這篇文章的亮點:
很喜歡這個做者的論文風格,要是你們都這麼寫也會少一點套路,多一點真誠。。。。文章針對yolo作了較多的實驗和改進,簡單粗暴的列出每項改進提高的map。這個建議詳細的看論文。下面列舉幾個亮點:
本文提出了一個問題,base CNN網絡是爲分類而設計的(pooling 其實是反應了位置的不變性,我一張人臉圖片只要存在鼻子,兩隻眼睛,分類網絡就認爲它是人臉,這也就是Geoffrey Hinton 在Capsule中吐槽卷積的缺陷),而目標檢測則要求對目標的平移作出準確響應。Faster RCNN是經過ROI pooling讓其網絡學習位置可變得能力的,再次以前的base CNN仍是分類的結構,以前講過R-FCN將Faster RCNN ROI提取出來的部分的卷積計算共享了,那共享的分類和迴歸功能的卷積必定在劃分ROI以前,那麼問題來了,如何設計讓卷積對位置敏感?
主要貢獻:
爲啥能work?
實際上rfcn的feature map設計表達目標檢測問題的方式更加抽象(ROI pool前的feature map中每個cell的channel表明定義都很明確),loss在監督該層時更能經過論文中關於ROI pool和vote設計,在不一樣的channel上得到高的響應,這種設計方式可能更好優化(這個是須要大量的實驗得出的結論),至於前面的resnet-base 天然是抽象監督,咱們自己是沒法理解的,只是做爲fintuning。實際上fpn的loss監督也是很是淺和明確的,感受這種能夠理解的優化模塊設計比較能work。
這篇文章實際上提供了另一個角度,以前一直認爲Single stage detector結果不夠好的緣由是使用的feature不夠準確(使用一個位置上的feature),因此須要Roi Pooling這樣的feature aggregation辦法獲得更準確的表示。可是這篇文章基本否定了這個觀點,提出Single stage detector很差的緣由徹底在於:
極度不平衡的正負樣本比例: anchor近似於sliding window的方式會使正負樣本接近1000:1,並且絕大部分負樣本都是easy example,這就致使下面一個問題:gradient被easy example dominant的問題:每每這些easy example雖然loss很低,但因爲數 量衆多,對於loss依舊有很大貢獻,從而致使收斂到不夠好的一個結果。
因此做者的解決方案也很直接:直接按照loss decay掉那些easy example的權重,這樣使訓練更加bias到更有意義的樣本中去。很直接地,以下圖所示:
實驗中做者比較了已有的各類樣本選擇方式:
OHEM+按class比例sample:在前者基礎上,再保證正負樣本的比例(1:3)
Focal loss各類吊打這三種方式,coco上AP的提高都在3個點左右,很是顯著。值得注意的是,3的結果比2要更差,其實這也代表,其實正負樣本不平衡不是最核心的因素,而是由這個因素導出的easy example dominant的問題。
RetinaNet 結構以下
實際上就是SSD+FPN的改進版