【目标检测算法系列】一、R-CNN算法
R-CNN 是第一個成功將深度學習應用到目標檢測上的算法,也是后續Fast R-CNN , Faster R-CNN等系列算法的鼻祖
一、R-CNN整體架構
R-CNN的全貌如下圖所示?
它主要分為4個模塊
具體RCNN的訓練流程如下:
二、具體模塊設計
1.在ImageNet數據集上訓練一個CNN網絡
論文中提到,因為實際標簽數據太少,遠遠不夠去訓練一個大型的CNN網絡模型,所以需要先借助ImageNet數據集進行訓練CNN網絡,也就是預訓練過程,然后再在自己的數據集上針對特定任務進行微調,也就是調優。這是在訓練數據稀少的情況下一個非常有效的訓練大型卷積神經網絡的方法
2. 候選區域提取
R-CNN算法使用的?選擇性搜索(selective search)算法提取出了2000個候選框,Selective search綜合考慮圖像的顏色、紋理、尺寸相似性和空間重合度來劃分區域,并將小區域按照相似性合并為大區域。
具體選擇SS算法的大概思路如下:
? ? 1. 使用圖像分割算法創建候選區域
? ? 2. 使用貪心算法來進行候選區域合并:
? ? ? ? 計算所有候選區域的相似度
? ? ? ? 將最相似的兩個候選區域合并為一個區域
? ? 3. 重復迭代2過程,直到滿足條件
3.候選框的縮放
因為CNN網絡輸入的圖像尺寸是固定(論文中為224*224),所以需要將不同大小的候選框resize到CNN網絡所需要的尺寸,
候選區域大小調整選擇最簡單的各向異性縮放,同時論文中在縮放之前,還對原候選區域增加了一個邊緣(padding),大小為16個像素,用原始圖像中的點進行填充,這樣使候選區域邊緣有一定的緩沖
4.?fine-tuning CNN網絡
通過ImageNet數據集訓練來的CNN網絡是用來進行1000種類別分類,需要替換掉最后的分類層,改為一個隨機初始化的K+1類分類層,K即為自己數據集上針對特定任務的目標分類數,后面+1是因為還需要加上背景類別。 論文中作者是在VOC數據集上進行目標檢測的,所以為20+1,即21個類別的分類任務。
CNN網絡中的卷積層則保持不變。關于進行fine-tuning時的正負樣本,如果候選框與真實標注框的IOU>=0.5,就認為此候選框為正樣例,否則為負樣例,另外,由于對于一張圖片的多有候選區域來說,負樣本是遠遠大于正樣本數,所以需要將正樣本進行上采樣來保證樣本分布均衡
在進行fine-tuning?時,需要選用比較小的學習率,以保證不會破壞初始化的成果,論文中所采用的learn_rate為0.001。每輪迭代,統一使用32個正例窗口(跨所有類別)和96個負例窗口(背景),即每個mini-batch的大小是128
5.候選框特征提取
R-CNN算法是用CNN網絡來進行特征提取,然后用提取出來的特征進行后續的SVM分類。
所有需要將fine-tuning?后的CNN網絡去掉最后的softmax層,然后用來對候選框進行特征提取
6. 訓練多個二元SVM分類模型
R-CNN算法,對于每個類別單獨訓練一個二元SVM分類。這塊有個問題,為什么不用上面CNN網絡的softmax直接進行分類,而要把CNN網絡提取出來的特征,重新用SVM進行分類?作者給出的答案是經過測試發現,重新使用SVM單獨進行分類效果更好。另外,在訓練每個SVM分類模型時,正負樣本的構建和上面fine-tuning CNN網絡?時有所不同。在訓練對應某個類別的SVM分類模型時,ground-truth(即對應類別的真實標注框)為正樣本,負樣本為與ground-truth(真實標注框)的IOU小于0.3的候選框,也就是說IOU<0.3被作為負例,ground-truth是正例,其余的全部丟棄
7.Bounding-box回歸
為了減少Selective search 候選框的誤差,最后需要進行?Bounding-box Regression(BBR)來對候選框進行精修
這塊需要注意,只有IOU值大于0.6的候選框,才會進行Bounding-box Regression
首先,來具體看下,Bounding-box Regression是什么,如下綠色框P為輸入進來的候選框,紅色框G為ground-truth,也就是真實標注框。我們的目標就是通過線性回歸,訓練一種關系,使得輸入原始的窗口 P 經過映射得到一個回歸窗口G'(藍色框),需要盡可能的讓回歸窗口G'(藍色框)跟真實窗口 G 更接近。
Bounding-box Regression的目的就是:給定(Px,Py,Pw,Ph),尋找一種映射f, 使得?f(Px,Py,Pw,Ph)=(Gx',Gy',Gw',Gh')??并且(Gx',Gy',Gw',Gh')≈(Gx,Gy,Gw,Gh)
所以我們需要經過平移和尺度縮放,將窗口P變為窗口G'。
首先看下平移變化,假設為?為對應平移轉換,所以有:
,由于候選框的大小各不相同,所以這塊需要使用相對位移來進行統一,所以
即
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
接下來看下尺度縮放:
,這塊統一進行對數變換,是為了確保縮放比例大于0
所以:? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
所以,Bounding-box Regression?最終是為了獲得這四個變化。
Bounding-box Regression 的輸入是一組N個訓練對, 輸出為
我們設從到實際的轉換為,所以有
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
所以最終的損失函數為:
? ? ? ? ? ? ? ? ? ? ??
訓練結束后,可以獲得最終的,進而獲得
到此,R-CNN的訓練就結束了
?
三、R-CNN不足之處
R-CNN作為目標檢測算法中的一個里程碑之作,本身也就有許多缺點
首先,最大的一個缺點就是不管是預測還是訓練,速度都很慢,
因為
1.候選框選擇算法嚴重耗時
2.每張圖片2000個候選框中會有很多重復的部分,從而導致后面在使用CNN時有很多重復計算
另外,RCNN是分步驟進行,過程比較繁瑣
3.在進行候選區域的特征提取時,為了適應CNN網絡的輸入,需要對候選區域進行扭曲,縮放等操作,這會導致一些圖片特征信息的丟失和變形,從而降低了檢測的準確性
?
所有后面在此基礎上,衍生出來其他一些目標檢測算法,來對相關問題進行改進優化,具體我們后面再介紹
?
歡迎關注我的個人公眾號 AI計算機視覺工坊,本公眾號不定期推送機器學習,深度學習,計算機視覺等相關文章,歡迎大家和我一起學習,交流。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
總結
以上是生活随笔為你收集整理的【目标检测算法系列】一、R-CNN算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: boost::function的用法(二
- 下一篇: 基于jquery的web在线流程图设计器