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對象檢測流程:
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的具體工作是如何實現的,小編也參考了很多網友的源碼,無奈代碼量太大(少的也得幾千行),我們前期分享瞭如何使用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建立神經網絡
對比51 、52行可以知道,SSD模型是在caffe上訓練的模型,而Faster R-CNN模型是tensorflow上訓練的模型,但是強大的opencv庫使用dnn函數就能很方便的加載預訓練模型,且可以對比看出,其模型與參數文件前後有區別
4、計算blob,進行神經網絡的預測
獲取圖片的長寬參數,重新調整圖片長寬為300*300,來進行圖片blob的計算,然後blob傳入神經網絡來進行計算,使用前向傳播來預測圖片
5、遍歷預測值,提取設置閾值的對象
此部分跟SSD對象檢測代碼完全一致,小夥伴們可參考往期文章,此模型需要加載在opencv3.4.2版本以上。
關於此代碼如何利用在視頻檢測上,如何通過多進程來加速神經網絡,請參考往期文章
閱讀更多 人工智能研究所 的文章