
Faster-RCNN圖片識別
Faster-RCNN物件檢測演算法是R-CNN物件檢測的第三個版本演算法,其前面還有Fast-RCNN與RCNN演算法,由於R-CNN無法實現End-to-End訓練,Fast R-CNN Selective Search耗時比較長等原因,作者在此2版的基礎上,更新到了Faster-RCNN物件檢測演算法。

物件檢測
從下方結構圖可以看出:Faster-RCNN物件檢測演算法將特徵提取、proposal提取、Bounding Box Regression、Classification整合到一個網路中,物件檢測速度不僅有了提示還避免了前2個版本的缺點。

Faster R-CNN
Faster R-CNN物件檢測流程:
1、特徵提取(convolutional layer):Faster R-CNN使用卷積+relu+pooling池化層提取被檢測物件的特徵。
2、區域預測網路(Region Proposal Network):RPN通過softmax函式判斷錨點(anchors)屬於某個特徵,再利用邊界框迴歸(bounding box regression)修正anchors獲得精確的物件檢測值。
3、目標區池化(Roi Pooling):收集輸入的特徵資料和候選目標區域,利用此層資訊提取目標區域特徵資料,然後全連線層識別圖片。
4、分類(Classification):利用目標區域特徵資料計算太識別圖片,同時利用邊界框迴歸獲得物件檢測的精確位置。

Faster R-CNN流程圖
如何來實現Faster R-CNN,以及Faster R-CNN的具體工作是如何實現的,小編也參考了很多網友的原始碼,無奈程式碼量太大(少的也得幾千行),我們前期分享瞭如何使用opencv與MobileNet SSD的影像識別以及視訊實時識別
同樣使用opencv也可以來實現Faster R-CNN的物件檢測演算法,很多程式碼都比較類似,小夥伴們也可以參考往期文章
使用OpenCV進行基於Faster R-CNN 深度學習的物件檢測
Faster R-CNN prototxt 與Faster R-CNN model模型已經共享:
回覆:RCNN 即可領取
模型一共2種:
faster_rcnn_inception_v2與faster_rcnn_resnet50,2種模型是在不同的訓練集上訓練的資料,其中faster_rcnn_inception_v2模型較小,速度較快,本期按照此模型來搭建物件檢測,其faster_rcnn_resnet50模型跟faster_rcnn_inception_v2模型的程式碼完全一致,只是修改一下模型的路徑便可
在本節中,我們將使用 OpenCV中的深度神經網路( dnn)模組與Faster R-CNN prototxt 與Faster R-CNN model來構建我們的物件檢測器
1、模型以及第三方庫

模型以及第三方庫
首先匯入模型以及模型引數,若使用faster_rcnn_resnet50模型, 12 、13行直接修改為faster_rcnn_resnet50模型的相對地址
2、定義模型識別型別

定義模型識別型別
Faster R-CNN模型相比SSD來說,能夠識別的種類,豐富了很多,大概有100個種類,幾乎包含了生活中所能涉及的種類,當然,若你有強大的資料支撐,也可以來訓練自己的模型(後期分享如何來訓練自己的模型)
3、opencv建立神經網路

opencv建立神經網路
對比51 、52行可以知道,SSD模型是在caffe上訓練的模型,而Faster R-CNN模型是tensorflow上訓練的模型,但是強大的opencv庫使用dnn函式就能很方便的載入預訓練模型,且可以對比看出,其模型與引數檔案前後有區別
4、計算blob,進行神經網路的預測

計算blob,進行神經網路的預測
獲取圖片的長寬引數,重新調整圖片長寬為300*300,來進行圖片blob的計算,然後blob傳入神經網路來進行計算,使用前向傳播來預測圖片
5、遍歷預測值,提取設定閾值的物件

遍歷預測值,提取設定閾值的物件
此部分跟SSD物件檢測程式碼完全一致,小夥伴們可參考往期文章,此模型需要載入在opencv3.4.2版本以上。
關於此程式碼如何利用在視訊檢測上,如何通過多程式來加速神經網路,請參考往期文章