一、 RCNN系列的發展
1.1 R-CNN
根據以往進行目標檢測的方法,在深度學習應用於目標檢測時,同樣首先嘗試使用滑動窗口的想法,先對圖片進行選取2000個候選區域,分別對這些區域進行提取特征以用來識別分割。
1.1.1 rcnn具體的步驟是:
步驟一:在imagenet分類比賽上尋找一個cnn模型,使用它用於分類的預訓練權重參數;對於這個模型修改最后的分類層,分為21類,去掉最后一個全連接層,因為所用的測試集為20類,且還有一類背景類。
步驟二:根據選擇性搜索來對輸入的圖像進行選取2000個候選區域框;
然后修改候選區域框的大小,以適應cnn的輸入,然后用cnn來提取出每個候選區域的feature map。
步驟三:訓練svm分類器,這個svm分類器是對於特定的某一類進行區分,是專門用來對特定敏感區域進行分類,每一個類別對應於一個SVM分類器
步驟四:使用回歸器精細修正每個候選框的位置,對於每一個類,需要訓練一個回歸模型去判定這個框框的是否完美。
對應步驟的圖片結構如下圖1:

這里有幾點需要補充的是:
1. 采用預訓練和fine-tune來解決了標簽數據不多的問題,在imagenet上訓練過大規模圖片集合的網絡已經對圖片的基本信息都有了很明確的收集,采用預訓練模型后再在voc訓練集上進行fine-tune會達到很好的效果。
2. 選擇候選區域的幾種方法:這里采用的是slective search
3. 訓練過程:
在得到候選區域后,首先將候選區域跟gt(真實標注的框)來進行比較,如果iou>0.5(iou是圖像分割里面對於判定兩個不同區域的相似度所采用的一個標准)把這個候選區域置為正樣本,否則就是負樣本。Iou的取值相當重要,會對結果影響較大。
訓練時候采用SGD方法來調整框的位置。
1.1.2 RCNN的缺點:
1. 訓練過程太慢,需要對每一個候選區域都輸入到cnn中再進行提取特征,極大的浪費了時間和精力。
2. 步驟相對較多,需要fine-tune預訓練模型、訓練SVM分類器、回歸器進行精細的調整。
3. 占用空間大,提取出的特征以及分類器都需要占用額外的空間
4. 沒有對資源進行重復利用,在使用SVM分類和對框進行回歸操作的時候cnn模型的參數並沒有同步修改。
1.2 Fast rcnn
針對RCNN的需要對每一個候選區域進行cnn操作這一繁瑣操作進行改進,從而的到了fast-rcnn算法,
1.2.1 fast-rcnn的步驟如下:
步驟一:同樣是尋找一個在imagenet上訓練過的預訓練cnn模型
步驟二:與rcnn一樣,通過selective search在圖片中提取2000個候選區域
步驟三:將一整個圖片都輸入cnn模型中,提取到圖片的整體特征(這是相對於rcnn最大的改進的地方)
步驟四:把候選區域映射到上一步cnn模型提取到的feature map里
步驟五:采用rol pooling層對每個候選區域的特征進行上采樣,從而得到固定大小的feature map,以便輸入模型中
步驟六:根據softmax loss和smooth l1 loss對候選區域的特征進行分類和回歸調整的過程,回歸操作是對於框調整所使用的bou b reg來訓練。
相比rcnn的不同處:
在得到每個候選區域的feature map后,通過rolpooling 層來進行上采樣操作對尺寸進行調整以便時輸入模型;
最后使用的loss函數為multi-task loss,然后是把回歸操作加入到cnn權重更新的過程中去。
1.2.2優點有以下幾點:
1. fast-rcnn在訓練的時候,把整張圖片送入cnn網絡進行提取特征,不需要像rcnn那樣對每一個候選區域進行輸入cnn,從而在cnn的利用上提高了很大的效率。
2. 訓練速度相應提升,不需要svm分類器對提取后的特征進行存儲數據,把圖片的特征和候選區域直接送入loss,不需要對硬盤進行讀寫的操作。
3. 對網絡的利用效率,用於分類和回歸調整的功能都用cnn網絡來實現,不需要額外的分類器和回歸器。
但是fast-rcnn仍然有其缺陷,對於生成候選區域仍然不夠快速,所以faster-rcnn針對這一點進行改進,提出使用rpn網絡來生成候選區域。同時提出的rpn網絡可以與目標檢測同時共享一個cnn的網絡參數,減少參數的數量。
二 Faster rcnn的基本原理
2.1 faster rcnn的原理及結構
前面介紹了rcnn以及fast-rcnn,基礎知識已經做好鋪墊,接下來將介紹rcnn系列的最后一種算法faster-rcnn的詳細內容。Faster-rcnn的主要原理如下:
Faster-rcnn是Ross B.Girshick在2016年在r-cnn和Fast-rcnn的基礎上提出來的,最大的亮點之處是faster-rcnn把獲取feature map,候選區域選取,回歸和分類等操作全部融合在一個深層網絡當中,效率較前兩種提升了很多。
Faster-rcnn的基本結構如下圖:

Faster-rcnn在結構上主要由一下幾部分構成:
1. 卷積層,這部分卷積層就是普通的由imagenet比賽上用於分類的預訓練模型所用的卷積層,它的主要功能是用來提取整張圖片的feature map,卷積層結構也是卷積+激活函數+池化操作組成的。
2. RPN網絡,這是整個faster-rcnn的核心部分,改善了前兩種方法用選擇搜索來獲取候選區域的方法,這種方法不僅快速而且更加高效地利用了cnn網絡。在生成候選區域的時候會生成anchors,然后內部通過判別函數判斷anchors屬於前景還是后景,然后通過邊框回歸來進行第一次調整anchors獲取准確的候選區域。
3. Roi pooling,這一層的添加主要是為了解決最后輸入全連接層的feature map的尺寸大小不同的問題,通過上采樣來獲取固定大小。
4. 分類和回歸,最后通過兩個分類層和回歸層來分別判斷物體屬於哪個類別以及精細調整候選區域的位置,以獲取最終目標檢測的結果。
