国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SSD算法推理過(guò)程的探析

2018-04-26 01:46郭葉軍汪敬華吉明明
現(xiàn)代計(jì)算機(jī) 2018年5期
關(guān)鍵詞:尺度卷積維度

郭葉軍,汪敬華,吉明明

(1.英特爾亞太研發(fā)有限公司,上海 200241;2.上海工程技術(shù)大學(xué),上海 201620)

0 引言

SSD(Single Shot Multibox Detector)算法[1]是端到端的圖像目標(biāo)檢測(cè)方法,和Faster RCNN[2]相比,最主要的不同是不再需要RPN(Region Proposal Network)來(lái)生成候選區(qū)域ROIs,因此,SSD算法從輸入圖像開(kāi)始,到最后的輸出結(jié)果,一氣呵成,很好地改善了檢測(cè)速度,從而更能滿足目標(biāo)檢測(cè)的實(shí)時(shí)性要求。

SSD有多種網(wǎng)絡(luò)模型,例如SSD300和SSD500等,分別表示支持的待檢測(cè)圖像的大小是300×300和500×500。本文根據(jù)SSD作者的基于Caffe[3]的SSD實(shí)現(xiàn)項(xiàng)目[4]中的示例代碼[5-6],用SSD300的網(wǎng)絡(luò)模型deploy.prototxt[7],分析了SSD對(duì)圖片fish-bike.jpg[8]的推理過(guò)程(inference)。

1 算法探析

1.1 SSD算法的網(wǎng)絡(luò)模型和多尺度特征提取

SSD算法在訓(xùn)練(train)時(shí),固定輸入圖像的大小,因此,待檢測(cè)圖像首先要縮放到固定大小,在SSD300中,其圖像大小為300×300,即圖像的高和寬都是300像素。如圖1所示,待檢測(cè)圖像輸出為1×3×300×300,它是由Caffe定義的在層之間傳遞的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)[3],表示1幅彩色圖像,包括紅綠藍(lán)這3個(gè)通道,圖像大小是 300×300。

SSD網(wǎng)絡(luò)一開(kāi)始部分基于VGG16模型[4,9]來(lái)提取圖像特征,為獲取更多大尺度下的特征信息,VGG網(wǎng)絡(luò)模型被分成part1和part2兩部分,其中,part1輸出的feature map的尺度是 38×38(圖中的 1×512×38×38表示 batch size為 1,有 512個(gè) feature map,每個(gè) feature map的大小是38×38),經(jīng)過(guò)規(guī)格化層后,保持尺度不變,傳遞至SSD特有網(wǎng)絡(luò),記為變量conv4_3_norm;part2輸出變量 fc7,feature map的尺度是 19×19,傳遞至SSD特有網(wǎng)絡(luò)。為獲取更多小尺度下的圖像特征信息,在VGG網(wǎng)絡(luò)之后,又依次增加了卷積網(wǎng)絡(luò)6、卷積網(wǎng)絡(luò)7、卷積網(wǎng)絡(luò)8、卷積網(wǎng)絡(luò)9,這里每個(gè)網(wǎng)絡(luò)包括兩個(gè)卷積層和兩個(gè)RELU層。其輸出的feature map的尺度分別為 10×10、5×5、3×3和 1×1,也都傳遞至 SSD 特有網(wǎng)絡(luò)。補(bǔ)充說(shuō)明:這里規(guī)格化層的引入,是為了使不同尺度下的數(shù)據(jù)具有可比性[10]。

在SSD特有網(wǎng)絡(luò)中,有三個(gè)生成網(wǎng)絡(luò):mbox_priorbox生成網(wǎng)絡(luò)、mbox_loc生成網(wǎng)絡(luò)和mbox_conf_flattern生成網(wǎng)絡(luò),它們都分別接受以上6個(gè)尺度下的特征信息,然后生成 mbox_priorbox,mbox_loc和 mbox_conf_flattern,再一起傳遞給結(jié)果整合層,由結(jié)果整合層輸出最后結(jié)果,即目標(biāo)所在的位置、目標(biāo)所屬的類別和置信度等信息,將在后面詳述。特別指出的是,mbox_priorbox生成網(wǎng)絡(luò),除了接受6個(gè)尺度下的特征信息外,還需要將待檢測(cè)圖像的大?。?00×300)作為輸入。

1.2 目標(biāo)位置(Bounding Box)

目標(biāo)檢測(cè),需要確定圖像中目標(biāo)所在的位置,因此神經(jīng)網(wǎng)絡(luò)的輸出應(yīng)包含目標(biāo)的位置信息,被稱為Bounding Box。在SSD算法中,最終的Bounding Box是由Prior Box和Box Location組合而成,可將Prior Box理解為一個(gè)粗略的預(yù)定義矩形,可根據(jù)已確定的網(wǎng)絡(luò)模型參數(shù)計(jì)算得到;而B(niǎo)ox Location則是對(duì)預(yù)定義矩形Prior Box的坐標(biāo)調(diào)整參數(shù),是網(wǎng)絡(luò)經(jīng)過(guò)訓(xùn)練后的輸出。兩者組合,即得到最終的目標(biāo)位置結(jié)果,根據(jù)參數(shù)不同,有多種組合算法,詳細(xì)代碼實(shí)現(xiàn)可參考文獻(xiàn)[11]。下面先重點(diǎn)解析SSD特有網(wǎng)絡(luò)中的三個(gè)生成網(wǎng)絡(luò)。

1.3 mbox_priorbox生成網(wǎng)絡(luò)

mbox_priorbox生成網(wǎng)絡(luò)的功能是得到prior box的坐標(biāo)數(shù)據(jù),本質(zhì)上可事先根據(jù)已確定的網(wǎng)絡(luò)模型參數(shù)計(jì)算得到,為了更好地描述網(wǎng)絡(luò)模型,這里采用了PriorBox層進(jìn)行計(jì)算得到,如圖2所示。PriorBox層分別獨(dú)立處理輸入的每個(gè)尺度,最后在mbox_priorbox層匯總輸出,當(dāng)然PriorBox層的參數(shù)會(huì)有所區(qū)別。

圖2 mbox_priorbox生成網(wǎng)絡(luò)的方框圖

PriorBox層有兩個(gè)輸入,分別是圖像特征信息和待檢測(cè)圖像,實(shí)際上,它并不會(huì)用到輸入的具體數(shù)值,只是用到了圖像特征的尺度和原始圖像的大小。以圖中最左側(cè)的PriorBox層為例,它只是用到了1×512×38×38中的尺度 38×38,和 1×3×300×300中的圖像大小300×300。PriorBox層還有諸如min_size和aspect_ratio等參數(shù),根據(jù)這些參數(shù)可以計(jì)算出num_priors_,此值代表每個(gè)特征點(diǎn)會(huì)生成的prior box的數(shù)量,具體的生成方法,是從特征點(diǎn)回溯到原圖相應(yīng)區(qū)域,并經(jīng)過(guò)縮放等操作得到多個(gè)區(qū)域,這樣得到的多個(gè)區(qū)域就是prior box的坐標(biāo)。需要注意的是,prior box的坐標(biāo)會(huì)除以相應(yīng)的原圖寬高進(jìn)行規(guī)格化,這樣,待檢測(cè)圖像無(wú)論在事前還是事后進(jìn)行何種等比例縮放,在每個(gè)縮放級(jí)別,都可以直接使用檢測(cè)結(jié)果。

仍以圖中最左側(cè)的PriorBox層為例,尺度是38×38,num_priors_是 4,就會(huì)生成 38×38×4=5776個(gè) prior box,每個(gè)box需4個(gè)坐標(biāo),則共生成5776×4=23104個(gè)數(shù)據(jù),因此在圖2中,該層輸出的數(shù)據(jù)維度就是1×2×23104。其中,前23104個(gè)數(shù)據(jù)是生成的所有prior box的坐標(biāo)數(shù)據(jù),后23104個(gè)數(shù)據(jù)則是相應(yīng)縮放系數(shù)[12],在目前的代碼實(shí)現(xiàn)中縮放系數(shù)是固定值,在最后根據(jù)prior box和box location計(jì)算得到最終的bounding box時(shí)被用作縮放因子。其他5個(gè)尺度的輸入也用同樣的方法處理。

在mbox_priorbox層中,將輸入的6組數(shù)據(jù)進(jìn)行簡(jiǎn)單的維度組合,輸出的數(shù)據(jù)維度為1×2×34928,這是因?yàn)?3104+8664+2400+600+144+16=34928,對(duì)應(yīng)著一共34928/4=8732個(gè)prior box的坐標(biāo)和縮放因子。這樣的維度組合,將輸入的多個(gè)變量表示為一個(gè)變量的形式,主要是為了后面計(jì)算bounding box時(shí)易于編程處理。

1.4 mbox_loc生成網(wǎng)絡(luò)

mbox_loc生成網(wǎng)絡(luò)的功能是得到prior box的坐標(biāo)調(diào)整參數(shù),即box location。每個(gè)尺度的數(shù)據(jù)分別經(jīng)過(guò)相同的處理,最后在mbox_loc進(jìn)行簡(jiǎn)單的維度合并,如圖3所示。為圖示簡(jiǎn)潔,只畫(huà)出了三個(gè)尺度(即38×38、10×10和 1×1)的詳細(xì)過(guò)程,另三個(gè)尺度(即 19×19、5×5和3×3)的處理過(guò)程用一個(gè)方框略之。

以圖3中最左側(cè)的輸入conv4_3_norm為例,其數(shù)據(jù)維度是1×512×38×38,首先經(jīng)過(guò)卷積層 conv4_3_norm_mbox_loc,因?yàn)榫矸e參數(shù) kernel size是 3,pad是1,stride是1,所以輸出的feature map大小還是38×38;而卷積參數(shù)num_output是16,因此,這個(gè)卷積層的輸出的數(shù)據(jù)維度是 1×16×38×38。16個(gè) feature map,分別依次對(duì)應(yīng)著4個(gè)prior box的調(diào)整參數(shù),而每個(gè)prior box需要4個(gè)調(diào)整參數(shù)。這里和mbox_priorbox生成網(wǎng)絡(luò)中Prior Box層的參數(shù)num_priors_是一一對(duì)應(yīng)的。例如,處理conv6_2的卷積層的num_output參數(shù)是24,對(duì)應(yīng)著相應(yīng)Prior Box層中值為6的num_priors。在卷積過(guò)程中,feature map的大小并沒(méi)有發(fā)生變化,因此,實(shí)現(xiàn)了box location和prior box的一一對(duì)應(yīng)關(guān)系。

仍以圖3中最左側(cè)的輸入conv4_3_norm為例,經(jīng)過(guò)卷積層后,還要依次經(jīng)過(guò)層conv4_3_norm_mbox_loc_perm和conv4_3_norm_mbox_loc_flat,這兩層也是為了后面計(jì)算bounding box時(shí)便于編程處理而引入的。其中,conv4_3_norm_mbox_loc_perm層重排了數(shù)據(jù)的內(nèi)存布局,使得數(shù)據(jù)從頭排列依次為第一個(gè)prior box的4個(gè)調(diào)整參數(shù),第二個(gè)prior box的4個(gè)調(diào)整參數(shù),直到最后一個(gè)prior box的4個(gè)調(diào)整參數(shù)。而conv4_3_norm_mbox_loc_flat層則只是換了一個(gè)視角來(lái)看待數(shù)據(jù),不涉及任何內(nèi)存拷貝,這種新視角便于后續(xù)編程處理。

在mbox_loc層中,將輸入的6組數(shù)據(jù)進(jìn)行簡(jiǎn)單的維度組合,輸出的數(shù)據(jù)維度為1×34928,這是因?yàn)?3104+8664+2400+600+144+16=34928。這里將輸入的多個(gè)變量表示為一個(gè)變量的形式,主要也是為了后面計(jì)算bounding box時(shí)方便編程處理。

1.5 mbox_conf_flattern生成網(wǎng)絡(luò)

mbox_conf_flattern生成網(wǎng)絡(luò)的方框圖如圖4所示,為圖示簡(jiǎn)潔,同樣也只畫(huà)出了三個(gè)尺度的詳細(xì)過(guò)程,另三個(gè)尺度的處理過(guò)程用一個(gè)方框略之。mbox_conf_flattern生成網(wǎng)絡(luò)的功能是得到最終的bounding box屬于某個(gè)類別的可能性,即置信度(confidence)。本網(wǎng)絡(luò)模型基于20個(gè)類別訓(xùn)練而成,再加上背景,一共有21個(gè)分類。所以,最終得到的是每個(gè)bounding box分別屬于21個(gè)分類的可能性得分。

mbox_conf_flattern生成網(wǎng)絡(luò)的前面思路和mbox_loc生成網(wǎng)絡(luò)非常類似,六個(gè)尺度的數(shù)據(jù)分別獨(dú)立處理后在mbox_conf進(jìn)行簡(jiǎn)單的維度合并。唯一不同的是,對(duì)每個(gè)box,需要生成21個(gè)數(shù)據(jù),代表屬于21個(gè)分類的可能性得分,而不是表示調(diào)整參數(shù)的4個(gè)數(shù)據(jù)。因此,卷積層的num_output參數(shù)值是相應(yīng)的Prior-Box層的num_priors_的21倍,而不是4倍。

圖3 mbox_loc生成網(wǎng)絡(luò)的方框圖

圖4 mbox_conf_flattern生成網(wǎng)絡(luò)的方框圖

考慮到屬于21個(gè)分類的可能性得分的總和應(yīng)該是1,所以增加了mbox_conf_softmax層做歸一化處理,而mbox_conf_reshape層則是調(diào)整看待數(shù)據(jù)的視角,以滿足mbox_conf_softmax層的要求。

最后,mbox_conf_flattern層重新恢復(fù)了看待數(shù)據(jù)的視角,方便后續(xù)結(jié)果整合層的編程處理。mbox_conf_flattern層的輸出維度是1×183372,這是因?yàn)?732×21=183372,即對(duì)應(yīng)著8732個(gè)box的屬于21個(gè)分類的得分,這與前面的mbox_priorbox生成網(wǎng)絡(luò)和mbox_loc生成網(wǎng)絡(luò)的輸出實(shí)現(xiàn)了對(duì)應(yīng)。

1.6 結(jié)果整合層

本層首先根據(jù)輸入的prior box和box location計(jì)算得到8732個(gè)bounding box的準(zhǔn)確位置,然后使用NMS(non-max suppress)算法,根據(jù)得分概率mbox_conf和bounding box的重疊情況,最終給出本圖像中的目標(biāo)位置和目標(biāo)類別。其輸出維度是1×1×N×7,其中N就是最終輸出的bounding box的個(gè)數(shù),每個(gè)bounding box對(duì)應(yīng)7個(gè)數(shù)據(jù),分別是:image_id(SSD算法可同時(shí)處理多個(gè)圖像)、label(所屬類別的標(biāo)號(hào))、confidence(置信度,介于0和1之間),以及bounding box的4個(gè)坐標(biāo)值(即左上和右下坐標(biāo)xmin、ymin、xmax和ymax,它們?cè)赑riorBox層就已做規(guī)格化處理,介于0和1之間)。

2 結(jié)語(yǔ)

本文從SSD圖像目標(biāo)檢測(cè)算法的網(wǎng)絡(luò)模型出發(fā),介紹了SSD算法整體的網(wǎng)絡(luò)模型及其特有三個(gè)生成網(wǎng)絡(luò)層,重點(diǎn)闡明網(wǎng)絡(luò)層之間的輸入輸出數(shù)據(jù)維度的變化和對(duì)應(yīng)關(guān)系,以及它們的主要參數(shù)和功能,以此來(lái)探析SSD算法不同于其他算法的關(guān)鍵,也為后續(xù)深入研究提供了一種新視角。

參考文獻(xiàn):

[1]Wei Liu.Dragomir Anguelov,Dumitru Erhan,Christian Szegedy,Scott Reed,Cheng-Yang Fu,Alexander C.Berg.SSD:Single Shot MultiBox Detector.[EB/OL][2016-12-29/2017-9-20].URL:https://arxiv.org/pdf/1512.02325.pdf.

[2]Shaoqing Ren,Kaiming He,Ross Girshick and Jian Sun.Faster R-CNN:Towards Real-Time Object Detection with Region Proposal Networks[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2017,39(6):1137-1149.

[3]Y.Jia,E.Shelhamer,J.Donahue,S.Karayev,J.Long,R.Girshick,S.Guadarrama,and T.Darrell.Caffe:Convolutional Architecture for Fast Feature Embedding[J].Proceedings of the 22nd ACM International Conference on Multimedia,2014:675-678.

[4]K.Simonyan,A.Zisserman.Very Deep Convolutional Networks for Large-Scale Image Recognition[C].International Conference on Learning Representations,2015.

[5]Wei Liu.SSD.[EB/OL][2017-5-28/2017-11-15].URL:https://github.com/weiliu89/caffe/tree/ssd.

[6]Wei Liu.ssd_detect[CP/OL][2016-7-11/2017-10-15].URL:https://github.com/weiliu89/caffe/blob/ssd/examples/ssd_detect.ipynb.

[7]models_VGGNet_VOC0712_SSD_300x300.tar.gz[EB/OL][2017-10-4].URL:https://drive.google.com/file/d/0BzKzrI_SkD1_WVVTSmQxU0dVRzA/view

[8]Wei Liu.Fish Bike Example Image.[EB/OL][2014-6-9/2017-9-24].URL:https://github.com/weiliu89/caffe/blob/ssd/examples/images/fish-bike.jpg

[9]Wei Liu,Dragomir Anguelov,Alexander C.Berg.ParseNet:Looking Wider to See Better[C].International Conference on Learning Representations,2016.

[10]Wei Liu.Why normalization Performed Only for conv4_3?[EB/OL][2016-10-24/2017-10-16].URL:https://github.com/weiliu89/caffe/issues/241

[11]Wei Liu.bbox_util.[CP/OL][2016-11-26/2017-10-18].URL:https://github.com/weiliu89/caffe/blob/ssd/src/caffe/util/bbox_util.cpp#L355

[12]Wei Liu.Variance in Priorbox Layer.[EB/OL][2016-8-30/2017-10-12].URL:https://github.com/weiliu89/caffe/issues/155.

猜你喜歡
尺度卷積維度
理解“第三次理論飛躍”的三個(gè)維度
基于3D-Winograd的快速卷積算法設(shè)計(jì)及FPGA實(shí)現(xiàn)
一種并行不對(duì)稱空洞卷積模塊①
認(rèn)識(shí)黨性的五個(gè)重要維度
財(cái)產(chǎn)的五大尺度和五重應(yīng)對(duì)
淺論詩(shī)中“史”識(shí)的四個(gè)維度
從濾波器理解卷積
基于傅里葉域卷積表示的目標(biāo)跟蹤算法
宇宙的尺度
9