郭葉軍,汪敬華
(1.英特爾亞太研發(fā)有限公司,上海 200241;2.上海工程技術大學,上海 201620)
Faster R-CNN是用深度學習來進行目標檢測的算法[1],并在PASCAL VOC目標檢測競賽[2]中取得了很好的成績。從理論研究的角度來解析這個算法,存在不易描述清楚的理論問題;而從源代碼的角度來講述該算法,則又拘泥于編程細節(jié),因此,從算法對應的網(wǎng)絡模型出發(fā),明確網(wǎng)絡模型中每一層的輸入輸出,并概述其功能,就能把握算法的整體思路,為后續(xù)的深入研究奠定基礎。
眾所周知,有監(jiān)督的深度學習算法包括兩個方面:一是前饋(forward)的推理過程(inference),根據(jù)輸入和網(wǎng)絡模型參數(shù),得到輸出;二是反饋(backward)的訓練過程(train),根據(jù)輸入和預期的輸出,調整網(wǎng)絡模型參數(shù)。本文僅關注推理過程,因為理解了推理過程,也就容易理解訓練過程。提出Faster R-CNN算法的作者,在其GitHub主頁[3]中提供了基于Caffe網(wǎng)絡模型[4]的代碼,其中也包括一個demo示例程序,其網(wǎng)址見文獻[6],通過分析這個demo,來解析這個算法。
目標檢測,是指在一張圖像上,找出所有的目標,以及這些目標的具體位置。由于無法預知目標在圖像的具體位置,因此,最初始想法就是遍歷圖像中所有可能位置的候選區(qū)域,對每個候選區(qū)域(Region of Inter?est,簡稱RoI),通過特征提取等方法分析是否屬于某個目標類別。但是,RoI過多會導致算法效率低而無法實用,因此,有很多后續(xù)研究關注如何減少候選區(qū)域[7]。Faster R-CNN算法的網(wǎng)絡模型如圖1所示,通過RPN(Region Proposal Network)來生成所有的候選區(qū)域RoI。
圖1 Faster R-CNN算法的網(wǎng)絡模型
在Faster R-CNN算法中,待檢測圖像沒有固定的尺寸要求,作為輸入圖像只需要長寬等比例縮放到一定范圍即可,因此可以避免失真。RoI Pooling層用來將一定范圍內(nèi)的尺寸轉換為固定尺寸,以滿足后續(xù)全連接網(wǎng)絡層的要求。待檢測圖像首先通過深度神經(jīng)網(wǎng)絡來生成圖像特征,這些特征既被候選的RPN使用,又被后續(xù)的檢測過程使用,因此,實現(xiàn)了兩個不同目的的特征共享,這就是圖中被稱為共享神經(jīng)網(wǎng)絡的原因。
目標檢測,需要確定目標所在的位置,因此神經(jīng)網(wǎng)絡的輸出應包含目標的位置信息,被稱為Bounding Box,簡稱BBox。在Faster R-CNN算法中,BBox被拆分成兩部分:初始位置(矩形位置信息xa,ya,ha,wa共四個值,記為 PriorBox)和調整參數(shù)(tx,ty,tw 和 th四個參數(shù),記為BoxDelta)。神經(jīng)網(wǎng)絡是如何知道Prior?Box和BoxDelta的物理意義呢?這是因為在訓練網(wǎng)絡時,訓練數(shù)據(jù)就是建立在這些概念之上,網(wǎng)絡經(jīng)過訓練后,這些物理意義就被內(nèi)化在網(wǎng)絡中了。結合PriorBox和BoxDelta,可以算出調整后的新矩形位置,這個新矩形就是目標所在的更精確的位置,即BBox。這個思路,在RPN和結果整合層都被用到。在文獻[1]中用如下公式表示它們之間的關系:
其中xa,ya,ha,wa表示PriorBox的中心點坐標和高寬,tx,ty,tw 和 th是調整參數(shù),而 x,y,h和 w 則是BBox的中心點坐標和高寬。
在RPN生成RoIs時,PriorBox是預先定義的an?chor;在結果整合層,PriorBox是RoIs。而BoxDelta則是網(wǎng)絡的中間輸出。都將在后面詳述。
卷積神經(jīng)網(wǎng)絡在圖像識別中表現(xiàn)絕佳[8-9],已是非?;A的概念,這里需要強調的是,卷積神經(jīng)網(wǎng)絡對輸入圖像的尺寸沒有要求,可以是任意大小。所以,雖然在Caffe網(wǎng)絡模型[4]描述中,第一層接受的輸入是1×3×224×224,實際上,也可輸入 1×3×600×800的圖像,其中,1表示一幅彩色圖像,3表示圖像中有三個通道(channel),分別是紅綠藍三色信號通道,而600×800則是圖像的高和寬,這也是在demo[6]中作為Faster RCNN算法輸入的圖像尺寸。圖1所示的共享卷積神經(jīng)網(wǎng)絡來源自VGG16模型[5],最后的輸出數(shù)據(jù)維度是1×512×38×50,表示有 512個 feature map,每個 feature map的 size是 38×50。
RPN的網(wǎng)絡模型詳細如圖2所示,其輸入數(shù)據(jù)是來自共享卷積網(wǎng)絡的輸出,維度是1×512×38×50,首先經(jīng)過一個卷積層rpn_conv和一個relu層,然后,分為兩條支路。這里的rpn_conv卷積層的kernel size是3,output number是512,對應文獻[1]中圖3的3×3的滑動窗口,只是輸出的不是論文中的256-d數(shù)據(jù),而是512維的數(shù)據(jù)。
下面一條支路經(jīng)過rpn_bbox_pred卷積層后,變成的維度是 1×36×38×50,表示 feature map的 size是 38×50,一共36個feature map。考察任意一個feature map中的單個元素,其值最終可以對應著原始圖像中的某個區(qū)域;正是原始圖像中的這個區(qū)域中的像素,決定了feature map中的這個元素的值。將這個區(qū)域進行縮放和偏移,根據(jù)事先在訓練之前就定義好的規(guī)則,我們得到了9個新的區(qū)域,這些新的區(qū)域就被稱為anchor。所以,38×50大小的 feature map就對應著 9×38×50個anchor。由于每個anchor有四個調整參數(shù),因此就對應著 4×9×38×50個調整參數(shù),剛好和feature map的數(shù)量對應起來。因此,36個feature map在這里被賦予了具體的物理意義,對應著9個anchor的調整參數(shù),而每個anchor有4個調整參數(shù)。
上面一條支路經(jīng)過rpn_cls_score卷積層后,維度變成了 1×18×38×50,相同的,這里的 18個 feature map也被賦予了具體的物理意義,對應著9個anchor的得分,每個anchor有2個得分,分別是存在目標和不存在目標的得分,顯然,這兩個得分的概率之和應該是1,所以,后面加了rpn_cls_prob層做softmax。在rpn_cls_prob前后還各有一個Reshape層主要是為了使得數(shù)據(jù)格式符合相關層的要求,做簡單的shape變化,并不涉及到具體的數(shù)據(jù)拷貝,為圖示簡潔,這兩個Reshape層并沒有畫出。
圖2 RPN的網(wǎng)絡模型
最后,在proposal層中,首先根據(jù)調整參數(shù)來調整anchor得到新矩形位置,為了避免新區(qū)域過小,或者超過了原圖范圍,proposal層還有一個輸入im_info用來傳入原圖尺寸。從這里我們可以看出,新矩形位置是基于原圖坐標的,而不是基于某個feature map尺寸的。再結合 NMS(Non-Max Suppress)算法,根據(jù)得分概率和新矩形的重疊情況,給出最有可能性存在目標的160個候選區(qū)域,稱為RoIs,每個候選區(qū)域除了矩形的四邊坐標外,還有一個id(在這個demo中被置為0,并沒有被實際用到),因此是5維的,所以,最后輸出的RoI維度是160×5。其中,160是在確定網(wǎng)絡結構模型參數(shù)的時候,事先確定的。
RoI Pooling層如圖3所示,有兩個輸入,分別是來自共享卷積網(wǎng)絡的圖像特征數(shù)據(jù)和來自RPN的RoIs。由于RPN產(chǎn)生的RoI是基于原圖坐標,而RoI Pooling層處理的是卷積后的圖像特征數(shù)據(jù),其大小已經(jīng)發(fā)生了變化,不再是原圖分辨率,因此,通過層參數(shù)spatial_scale來調整RoI坐標,使之符合卷積后數(shù)據(jù)的尺寸要求。在網(wǎng)絡模型參數(shù)確定后,這個參數(shù)可以事先計算得到。
RoI Pooling層的參數(shù)還包括pooled_w和pooled_h,指的是每個RoI區(qū)域應該分成pooled_w×pooled_h個子區(qū)域,對每個子區(qū)域采用max pooling。所以,在本例子中,對于輸入的512個feature map,每個feature map中有160個RoI,一共會產(chǎn)生160×512×7×7個數(shù)據(jù)。一旦明確模型參數(shù)后,無論輸入的圖像尺寸如何變化,這些數(shù)字都不再變化。因此,RoI Pooling層的輸出維度是固定的,所以,滿足后續(xù)全連接網(wǎng)絡的固定輸入維度的要求。從這里輸出的四個維度,我們還可以有一個推論,也就是faster rcnn在推理過程中,在Caffe框架下,每次只能處理一張圖片,因為Caffe的數(shù)據(jù)結構最多就是四個維度,在這里都已經(jīng)被使用,已經(jīng)無法容納諸如圖片個數(shù)等額外信息了。
圖3 RoI Pooling層
全連接網(wǎng)絡如圖4所示,輸入來自RoI Pooling層,經(jīng)過兩個全連接層(Fully Connected)和RELU層(FC6,RELU6,F(xiàn)C7和 RELU7),演變?yōu)?160×4096的數(shù)據(jù),然后分成兩路。其中一路在經(jīng)過全連接層bbox_pred,產(chǎn)生維度為160×84的輸出,其中160還是對應著160個RoI,而84則對應著每個RoI的21個分類(本例子的識別目標分20類,再加上背景一共21類)的位置調整參數(shù)。另外一路經(jīng)過全連接層cls_score產(chǎn)生維度為160×21的數(shù)據(jù),表示160個ROI中每個ROI對應著21個分類的可能性得分,顯然,所有可能性相加應該為1,所以,后續(xù)緊跟著cls_probe層做softmax。這里的輸出,邏輯上和RPN網(wǎng)絡中的rpn_cls_prob和rpn_bbox_pred是非常類似的。
結果整合層并不在Caffe網(wǎng)絡模型文件中體現(xiàn),而是在demo最后用Python代碼完成,非常類似于RPN網(wǎng)絡中的proposal層,只是初始位置從事先可以靜態(tài)計算的anchor變成了動態(tài)計算得到的RoIs。首先根據(jù)調整參數(shù)bbox_pred來調整RoIs得到新矩形位置,再結合NMS算法,根據(jù)得分概率和新矩形的重疊情況,給出本圖像中的目標位置和目標類別。
圖4 全連接網(wǎng)絡
本文從Faster R-CNN算法的網(wǎng)絡模型出發(fā),針對重要的網(wǎng)絡層,分析它們的輸入輸出,包括數(shù)據(jù)維度格式和對應的物理意義,也簡單介紹了每一層的主要參數(shù)和功能。這樣,更容易理解Faster R-CNN算法的關鍵技術,為后續(xù)的進一步研究打下堅實的基礎。
[1]Shaoqing Ren,Kaiming He,Ross Girshick,Jian Sun.Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2017,vol.39,no.6,1137-1149.
[2]Mark Everingham,S.M.Ali Eslami,Luc Van Gool,Christopher K.I.Williams,John Winn,Andrew Zisserman.The PASCAL Visual Object Classes Challenge:A Retrospective[J].International Journal of Computer Vision,2015,98-136.[3]https://github.com/rbgirshick/py-faster-rcnn.
[4]Y.Jia,E.Shelhamer,J.Donahue,S.Karayev,J.Long,R.Girshick,S.Guadarrama,T.Darrell.Caffe:Convolutional Architecture for Fast Feature embedding[J].Proceedings of the 22nd ACM International Conference on Multimedia,2014,675-678.
[5]K.Simonyan,A.Zisserman.Very Deep Convolutional Networks for Large-Scale Image Recognition[C].International Conference on Learning Representations,2015.
[6]https://github.com/rbgirshick/py-faster-rcnn/blob/master/models/pascal_voc/VGG16/faster_rcnn_alt_opt/faster_rcnn_test.pt.
[7]R.Girshick.Fast R-CNN[J].Proceedings of IEEE International Conference on Computer Vision,2015,1440-1448.
[8]許可.卷積神經(jīng)網(wǎng)絡在圖像識別上的應用的研究[D].杭州:浙江大學,2012.
[9]A.Krizhevsky,I.Sutskever,G.Hinton.Imagenet Classification with Deep Convolutional Neural Networks[J].Proceedings of Neural Information Processing Systems,2012,1097-1105.