深度学习(三十六)——R-FCN, FPN, RetinaNet, CornerNet
R-FCN
R-FCN是何愷明/孫劍小組的Jifeng Dai于2016年提出的。
論文:
《R-FCN: Object Detection via Region-based Fully Convolutional Networks》
代碼:
https://github.com/PureDiors/pytorch_RFCN
faster R-CNN對卷積層做了共享(RPN和Fast R-CNN),但是經過RoI pooling后,卻沒有共享,如果一副圖片有500個region proposal,那么就得分別進行500次卷積,這樣就太浪費時間了,于是作者猜想,能不能把RoI后面的幾層建立共享卷積,只對一個feature map進行一次卷積?
上圖是R-FCN的網絡結構圖。和上一節的Faster R-CNN相比,我們可以看出如下區別:
1.Faster R-CNN是特征提取之后,先做ROI pooling,然后再經過若干層網絡,最后分類+bbox。
2.R-FCN是特征提取之后,先經過若干層網絡,然后再做ROI pooling,最后分類+bbox。
FC layer在近來的CV實踐中,越來越不受歡迎,因此R-FCN在最后的分類+bbox階段,也做了一些針對性的改進(如上圖所示):
1.直接將roi pooling生成的feature map連接到最后的分類和回歸層效果很差。這主要是因為:基CNN本身是對圖像分類設計的,具有圖像移動不敏感性;而對象檢測領域卻是圖像移動敏感的,所以二者之間產生了矛盾。
2.因此R-FCN專門設計了一個position-sensitive score maps。在feature map上通過卷積運算生成一個等大但通道數為k2(C+1)k^{2}(C+1)k2(C+1)的feature map X。
3.對這個feature map進行特殊的ROI pooling。
標準的ROI pooling:將ROI在空間上分成kxk部分,對每個部分進行pooling操作。
R-FCN的ROI pooling:將ROI在通道上分成kxk部分,對每個部分進行pooling操作,得到一個尺寸為kxkx(C+1)的tensor。上圖中各種顏色部分之間的對應關系,展示了該ROI pooling操作的實現方式。
從中可以看出,feature map X不僅在空間維度上對位置敏感,在通道維度上也對位置敏感。因此也被稱作position-sensitive score maps。
4.對上一步結果的每個C+1部分進行分類,這樣可以得到kxk個分類結果。對所有的分類結果進行vote,得到最終結果。
從上面兩圖可以看出,vote的規則就是簡單多數,因此k需要是奇數才行。
5.bbox也是類似的操作,只需將上面的C+1換成4(bbox位置的坐標)即可。
參考:
http://blog.csdn.net/zijin0802034/article/details/53411041
R-FCN: Object Detection via Region-based Fully Convolutional Networks
https://blog.csdn.net/App_12062011/article/details/79737363
R-FCN
https://mp.weixin.qq.com/s/HPzQST8cq5lBhU3wnz7-cg
R-FCN每秒30幀實時檢測3000類物體,馬里蘭大學Larry Davis組最新目標檢測工作
https://mp.weixin.qq.com/s/AddHG_I00uaDov0le4vdvA
R-FCN和FPN
FPN
FPN(Feature Pyramid Network)是Tsung-Yi Lin(Ross Girshick和何愷明小組成員)的作品(2016.12)。
論文:
《Feature Pyramid Networks for Object Detection》
-
圖(a)為手工設計特征描述子(Sift,HoG,Harr,Gabor)時代的常見模型,即對不同尺寸的圖片提取特征,以滿足不同尺度目標的檢測要求,提高模型性能;
-
圖(b)則是深度卷積網的基本結構,通過不斷的卷積抽取特征同時逐漸增加感受野,最后進行預測;
-
圖(c)則是融合深度網絡的特征金字塔模型,眾所周知深度網在經過每一次卷積后均會獲得不同尺度的feature map,其天然就具有金字塔結構。但是由于網絡的不斷加深其圖像分別率將不斷下降,感受野將不斷擴大,同時表征的特征也更叫抽象,其語義信息將更加豐富。SSD則采用圖c結構,即不同層預測不同物體,讓top層預測分辨率較高,尺寸較大的目標,bottom則預測尺寸較小的目標。然而對于小目標的檢測雖然其分辨率提高了但是其語義化程度不夠,因此其檢測效果依舊不好。
-
圖(d)則是FPN的網絡結構,該網絡結構大體上分為三個部分,即buttom-up自底向上的特征抽取,自頂向下的upsampling,以及側邊融合通道(lateral coonnection)。通過這三個結構網絡的每一層均會具有較強的語義信息,且能很好的滿足速度和內存的要求。
上圖是加了FPN之后的ResNet,其中的虛線框表示的是通道融合的方法。U-Net采用了concat模式融合下采樣和上采樣通道,而這里則是沿用了ResNet的融合方法:Tensor Add。
上圖是Faster R-CNN+FPN。原始的Faster R-CNN的RoI pooling是從同一個feature map中獲得ROI,而這里是根據目標尺度大小,從不同尺度的feature map中獲得ROI。
參考:
https://mp.weixin.qq.com/s/mY_QHvKmJ0IH_Rpp2ic1ig
目標檢測FPN
https://mp.weixin.qq.com/s/TelGG-uVQyxwQjiDGE1pqA
特征金字塔網絡FPN
https://zhuanlan.zhihu.com/p/58603276
FPN-目標檢測
RetinaNet
RetinaNet也是Tsung-Yi Lin的作品(2017.8)。
論文:
《Focal Loss for Dense Object Detection》
我們已經指出“類別不平衡”是導致One-stage模型精度不高的原因。那么如何解決這個問題呢?
答案是:Focal Loss。
上圖是RetinaNet的網絡結構圖,可以看出它是一個One-stage模型?;鞠喈斢?#xff1a;ResNet+FPN+Focal loss。
參考:
https://blog.csdn.net/jningwei/article/details/80038594
論文閱讀: RetinaNet
https://zhuanlan.zhihu.com/p/68786098
再談RetinaNet
CornerNet
傳統的目標檢測網絡,無論是One-stage還是Two-stage,都有基于Anchor的。Anchor的作用主要在于:顯式枚舉出不同的scale和aspect ratio的基準bbox。
但就本質而言,**框對于物體來說不是一個最好的表示。**框的頂點可能甚至都不在物體上,離物體本身已經很遠了。
因此,自2018年以來,逐漸有一些不基于anchor的目標檢測方法出現,形成了一股Anchor-Free的熱潮。下面將首先介紹一下,該類方法的開山之作——CornerNet。
CornerNet并非第一個提出Anchor-Free思想的模型,但卻是第一個精度和性能達到與anchor base方法同等水平的Anchor-Free模型。
CornerNet是Princeton University的Hei Law的作品。(2018.8)
論文:
《CornerNet: Detecting Objects as Paired Keypoints》
CornerNet認為Two-stage目標檢測最明顯的缺點是在Region Proposal階段需要提取anchor boxes。這樣做導致兩個問題:
-
提取的anchor boxes數量較多,比如DSSD使用40k,RetinaNet使用100k,anchor boxes眾多造成正負樣本不均衡。
-
Anchor boxes需要調整很多超參數,比如anchor boxes數量、尺寸、比率,影響模型的訓練和推斷速率。
上圖是CornerNet的網絡結構??梢钥闯鏊饕蓛刹糠纸M成:
Hourglass Network
這是CornerNet的骨干部分。
Bottom-right corners & Top-left Corners Prediction Module
CornerNet堆疊兩個Hourglass Network生成Top-left和Bottom-right corners,每一個corners都包括corners Pooling,以及對應的Heatmaps, Embeddings vector和offsets。
上圖是Heatmaps, Embeddings vector的示意圖。
-
heatmaps包含C channels(C是目標的類別,沒有background channel),每個channel是二進制掩膜,表示相應類別的頂點位置。
-
embedding vector使相同目標的兩個頂點(左上角和右下角)距離最短。或者也可以反過來說,兩個頂點的embedding vector越相近,則它們越有可能配對。
-
offsets用于調整生成更加緊密的邊界定位框。
corner pooling
corner pooling是CornerNet新提出的一種操作。其步驟如下圖所示:
依top-left corner pooling為例,對每個channel,分別提取特征圖的水平和垂直方向的最大值,然后求和。具體的計算如下圖所示:
論文認為corner pooling之所以有效,是因為:
-
目標定位框的中心難以確定,和邊界框的4條邊相關,但是每個頂點只與邊界框的兩條邊相關,所以corner更容易提取。
-
頂點更有效提供離散的邊界空間,使用O(w×h)O(w\times h)O(w×h)頂點可以表示O(w2×h2)O(w^2\times h^2)O(w2×h2)個anchor boxes。
參考
https://mp.weixin.qq.com/s/e74-zFcMZzn67KaFXb_fdQ
CornerNet目標檢測開啟預測“邊界框”到預測“點對”的新思路
https://zhuanlan.zhihu.com/p/41865617
CornerNet:目標檢測算法新思路
https://mp.weixin.qq.com/s/e6B22xpue_xZwrXmIlZodw
ECCV-2018最佼佼者CornerNet的目標檢測算法
https://mp.weixin.qq.com/s/9ldLaYKGkgq-MnJZw7CrDQ
CornerNet為什么有別于其他目標檢測領域的主流算法?
https://mp.weixin.qq.com/s/ZhfnZ4IwOnTQlqeB6Ilr3A
CornerNet: Detecting Objects as Paired Keypoints解讀
https://zhuanlan.zhihu.com/p/63134919
普林斯頓大學提出:CornerNet-Lite,基于關鍵點的目標檢測算法,已開源!
https://mp.weixin.qq.com/s/8hN1RdYVJQWOqPpejjfXeQ
CornerNet
總結
以上是生活随笔為你收集整理的深度学习(三十六)——R-FCN, FPN, RetinaNet, CornerNet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(三十五)——Style Tra
- 下一篇: 深度学习(三十七)——CenterNet