曠世面試之Faster RCNN算法

      一開始坑定是問項目,但每個人都不一樣,所以沒啥寫的必要,然後開始問基礎,這個大家都一樣,所以有寫的價值,最後編程,就寫了個NMS,這個應該會吧?

      曠視實習生面試, 感覺面試官對這種 two stage 的算法很在意,  問的問題也會從很寬泛到非常的細節. 面完之後感覺對這個算法的理解還是不夠的, 所以 按照我碰到的問題,再來認真的撕一遍.

一 RPN

      問: 按照你接觸的檢測算法,簡單介紹一下

      答: 經典的檢測算法主要有Faster RCNN SSD YOLO 之後的很多工作都是在這些的基礎上的改進,比如MASK RCNN DSSD YOLOv2 v3等等

      問: 我不是要你說簡單的名字,我的意思是你要介紹一下他們的主要貢獻,這樣吧,你來說一下 Faster RCNN 相對於之前的工作有什麼貢獻,具體是什麼,並解釋一下 (這裏就引出了第一個很重要的點 RPN 網絡)

      首先, Faster RCNN 是在 FAST RCNN 的基礎上做的,他的主要貢獻是設計了RPN網絡. 之前的工作生成預選框用的方法是 selective search 的方法, RPN (region proposal network)的方法將整個算法實現了端到端的訓練, 提升了精度和速度. 

      RPN的具體工作流程是這樣的,首先我們需要一個骨幹網絡,通過特徵提取得到 feature map . 將這個feature map 作爲 RPN 網絡的輸入. 進入RPN網絡之前, 在這張feature map 上的每個錨點上提出9個錨框. 比如原文的是40×60×9 大約20000個框. 之後這20000框的信息分成兩路 ,分別做 1×1 的卷積操作,第一路卷積後的尺寸是 40×60×36(4×9 9個框,每個框有四個數值的信息), 另外一路卷積後的結果是 40×60×18(2×9 9個框,每個框有兩種可能 positive or negative) , 在這一路經過softmax的打分後就可以得到每個框的分數,有了分數,又有這些框的座標,我們就可以做 NMS . 在NMS之後選出排名最靠前(也就是softmax得分最高)的2000個框. 再然後從這2000個框中選擇出 256 個框包括 128 個正樣本和 128 個負樣本來計算 Loss. Loss的話就兩個部分嘛, 置信度損失和定位損失,分別用着256個框的 score 和 座標去計算就行了, RPN的流程到這裏就結束了,後邊就是用 RPN 選出來的 ROI 訓練全連接層進行分類和位置預測的部分了.

      其實上邊的回答 還有一些沒說的內容, im_info中一共只有三個數字,原圖的 W , H , 縮放的尺寸. proposal 之後20000個框就只剩下256個框了. 這裏的第一個Loss就是用來訓練RPN的 目的是讓RPN網絡在前向預測的時候提出的框的質量更高. 

二 ROI pooling

     問: 你瞭解ROI pooling 和 ROI Align嘛 說一說

     答: 在 Faster RCNN 中 ROI Pooling 的輸入有兩個,proposal 的 ROI 和原圖的標籤, 首先將得到的256個框和原圖的GT 匹配,匹配上的就直接打上原圖的標籤,(包括座標和標籤).然後講這些打上標籤的框縮放至 Feature map 上,再用這些縮放過的框進行ROI Pooling (這個pooling其實就是不規則的圖做池化 tf.image.crop_and_resize) . 最終得到256×7×7×1024的結果.

     ROI Align的話就是解決了一個ROI pooling中的不匹配問題, 因爲在ROI Pooling的過程中 有兩次的整數化,這兩次整數化會導致預測框的偏差, ROI Align 就是通過雙線性插值的辦法是整個過程沒有整數化的操作, 解決了這種 不匹配問題.

     我們看到ROI Pooling之後就剩下全連接了,最後兩個全連接子層得到分類和座標預測的結果,並且和標籤做Loss , 注意:這裏的標籤就是之前ROI Pooling哪一步RoI和原圖匹配時打上的標籤.

     總結下: 其實Faster RCNN 真正重要的東西就只有兩個 一個是RPN網絡, 另外一個是ROI Pooling 剩下的都很好理解.所以面試時問到的一定是這兩個的內容!!

 

     還有一些其他的問題:

     問: focal Loss 和交叉熵的區別是什麼

     答: focal Loss 本質上也是交叉熵,他在式子前加了控制正負樣本平衡的算子, 解決了正負樣本不平衡的問題 ( 我在這個地方舉了一個例子,就是之前CSP博客中的東西 )

     問: Faster RCNN 如果加上FPN的話 提出的anchor會有什麼變化

     答: 我沒做過,但我覺得可以少一些 (應該是對的)

     問: SSD的anchor 和Faster RCNN的有什麼區別?

     答: SSD是在每一個特徵圖上都提出anchor fasterrcnn 只在最後一層

 

     還有兩個非常要命的問題:

     問: 你覺得 MR 和 FPPI 的本質區別是什麼    ( 很簡單 ,但是相信很多人都懶得看所以搞不清楚)

     答: 沒答上來 .........

     其實, MR(miss rate) 和 FPPI (false positive per image)都是目標檢測的評價指標,MR的計算方式是 FN/(TP+FN)  FPPI的計算方式是 FP(all) / num_images , 所以分母並不重要,既然他問的是本質,那就是要知道這兩個指標是描述什麼的.  很顯然MR是描述FN的 而FPPI是描述 FP的!!!!!!!!!,很關鍵的東西哦

    問:在CSP中使用的數據增強是怎麼做的,如果讓你來做,你會怎麼做數據增強?

    答: 我也不知道自己稀裏糊塗的說了些什麼。。( 但,數據增強這個點很重要!!! )

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章