目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)
原文引用:http://lufo.me/2016/10/detection/
最近幾年深度學習在計算機視覺領域取得了巨大的成功,而在目標檢測這一計算機視覺的經典問題上直到去年(2015)才有了完全使用深度學習的方法,也就是大名鼎鼎的Faster-RCNN以及和它同一時期的工作YOLO。
目標檢測就是要找到一張圖中所有的物體和它們的位置,在這兩篇文章之前,人們通常的做法是先用一些傳統視覺的方法如selective search找到proposal,即比較可能是物體的一個區域,然后再用CNN判斷這個物體究竟是不是物體,是哪個物體,以及用CNN去優化這個框的位置,這種方法最典型的代表就是Faster-RCNN的前身,RCNN和Fast-RCNN,當然它們也是同樣出色的工作。Faster-RCNN和YOLO解決的問題是省去了selective search,直接用CNN得到最后的結果,并且性能比之前的方法有很大提升。這篇文章主要介紹一下Faster-RCNN中替換掉selective search的RPN(Region Proposal Network)以及對RPN的改進:SSD(Single Shot MultiBox Detector)。
Faster-RCNN由RPN和Fast-RCNN組成,RPN負責尋找proposal,Fast-RCNN負責對RPN的結果進一步優化。其實RPN已經可以找到圖片中每個物體的種類和位置,如果更注重速度而不是精度的話完全可以只使用RPN。RPN是一個全卷積網絡(FCN),由于沒有全連接層,所以可以輸入任意分辨率的圖像,經過網絡后就得到一個feature map,然后怎么利用這個feature map得到物體的位置和類別那?這里要先介紹一下文章中提到的anchor這個概念,把這個feature map上的每一個點映射回原圖,得到這些點的坐標,然后著這些點周圍取一些提前設定好的區域,如選取每個點周圍5x5的一個區域,這些選好的區域可以用來訓練RPN。假設我們對feature map上的每個點選取了K個anchor,feature map的大小為H*W*C,那么我們再對這個feature map做兩次卷積操作,輸出分別是H*W*num_class*K和H*W*4*K,分別對應每個點每個anchor屬于每一類的概率以及它所對應的物體的坐標,那么怎么訓練這個網絡那?這個網絡的loss function就是一個用于分類的softmax loss和一個用于回歸的smooth L1 loss,輸出對應的ground truth也很好得到,對于每個anchor,如果它和圖片中某個物體的IOU(面積的交/面積的并)大于一個閾值,就認為它屬于這一類,否則認為是背景,對于那些是背景的anchor回歸的loss就是0,其他anchor位置的ground truth就是它們所對應的物體的位置。RPN其實也很簡單,關鍵的地方就在于選取了一些anchor然后進行pixel-wise的學習。論文中RPN的插圖如下圖:
但是RPN也有缺點,最大的問題就是對小物體檢測效果很差,假設輸入為512*512,經過網絡后得到的feature map是32*32,那么feature map上的一個點就要負責周圍至少是16*16的一個區域的特征表達,那對于在原圖上很小的物體它的特征就難以得到充分的表示,因此檢測效果比較差。去年年底的工作SSD: Single Shot MultiBox Detector很好的解決了這個問題。
我個人認為SSD可以理解為multi-scale版本的RPN,它和RPN最大的不同在于RPN只是在最后的feature map上預測檢測的結果,而最后一層的feature map往往都比較抽象,對于小物體不能很好地表達特征,而SSD允許從CNN各個level的feature map預測檢測結果,這樣就能很好地適應不同scale的物體,對于小物體可以由更底層的feature map做預測。這就是SSD和RPN最大的不同,其他地方幾乎一樣。下圖是SSD的網絡結構,可以看到不同層的feature map都可以做預測。
另外SSD的代碼也寫得非常簡潔優雅,不得不感嘆作者真是碉堡,即寫得了paper又做得了coding,不得不服。
總結
以上是生活随笔為你收集整理的目标检测方法简介:RPN(Region Proposal Network) and SSD(Single Shot MultiBox Detector)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单的CreateRemoteThrea
- 下一篇: 基于Nokia S60的游戏开发之一