Faster-rcnn源碼解析4

我們已經(jīng)訓(xùn)練出了rpn網(wǎng)絡(luò)凤跑,下面利用訓(xùn)練好的rpn網(wǎng)絡(luò)來(lái)生成proposals乍迄。


下面來(lái)看一下rpn_generate函數(shù):

首先設(shè)置參數(shù):


然后得到一個(gè)pascal_voc類:imdb = get_imdb(imdb_name)

加載訓(xùn)練的rpn網(wǎng)絡(luò):rpn_net = caffe.Net(rpn_test_prototxt, rpn_model_path, caffe.TEST)

然后得到生成的proposals(候選區(qū)域苗傅,最多2000個(gè)):rpn_proposals = imdb_proposals(rpn_net, imdb)休吠,得到的rpn_proposals 是一個(gè)列表语稠,列表中的每個(gè)元素是每個(gè)圖片的rpn_proposals,酷誓,而且rpn_proposals是一個(gè)len(keep)行4列的矩陣,其中l(wèi)en(keep)的最大值為2000慈参。

好了呛牲,下面看一下imdb_proposals函數(shù)的具體結(jié)構(gòu):


這里可以看到imdb_boxes是一個(gè)列表,列表中元素初始化為空驮配。imdb_boxes也是返回值娘扩。在這個(gè)函數(shù)中,首先用cv2.imread讀取圖片數(shù)據(jù)壮锻,然后用im_proposals函數(shù)來(lái)得到proposals和對(duì)應(yīng)的前景得分琐旁。

具體來(lái)看一下im_proposals函數(shù):


首先獲取網(wǎng)絡(luò)的輸入數(shù)據(jù),_get_image_blob函數(shù)可以將imread讀取的圖片數(shù)據(jù)轉(zhuǎn)化成blob需要的格式猜绣,這個(gè)函數(shù)返回兩個(gè)值:blob(4維矩陣灰殴,當(dāng)然這里的batch=1,通道數(shù):3)和?im_info(1行3列的矩陣:[縮放后的圖片高度掰邢、縮放后的圖片寬度牺陶、縮放比例])伟阔。

然后把這兩個(gè)變量輸入到net網(wǎng)絡(luò),net網(wǎng)絡(luò)是什么呢掰伸,從rpn_generate函數(shù)中皱炉,可以看到:net對(duì)應(yīng)的prototxt文件為:rpn_test_prototxt,我們進(jìn)入到rpn_test_prototxt文件里面狮鸭,可以看到這個(gè)網(wǎng)絡(luò)的結(jié)果和我們前面訓(xùn)練的rpn網(wǎng)絡(luò)基本上是一致的合搅,只是把最后的loss部分改成了proposal layer,我們只需要看最后一層proposal layer的forward的結(jié)果就可以了歧蕉。

layer {

name: 'proposal'

type: 'Python'

bottom: 'rpn_cls_prob_reshape'

bottom: 'rpn_bbox_pred'

bottom: 'im_info'

top: 'rois'? ? # len(keep)行5列的矩陣灾部,第1列元素:0,其余4列:proposals的左上角和右下角的坐標(biāo)

top: 'scores'? # len(keep)行1列的矩陣惯退,矩陣元素為:前景得分

python_param {

module: 'rpn.proposal_layer'

layer: 'ProposalLayer'

param_str: "'feat_stride': 16"

}

}

先看一下輸入:

bottom: 'rpn_cls_prob_reshape' ?:batch * 18 * height * width ?( 1 * 18 * 14 *14)

bottom: 'rpn_bbox_pred' ?:batch * 36* height * width ?( 1 * 36* 14 *14)

bottom: 'im_info' ?:1行3列的矩陣:[縮放后的圖片高度赌髓、縮放后的圖片寬度、縮放比例]

下面蒸痹,我們到對(duì)應(yīng)的rpn.proposal_layer里面去看一下:


首先春弥,是設(shè)置一些參數(shù),然后得到一些基本數(shù)據(jù):

scores:前景得分 ?( 1 * 9 * 14 * 14)

bbox_deltas:anchor的偏移量叠荠,即:tx, ty, tw, th ???( 1 * 36* 14 *14 )

im_info:[縮放后的圖片高度匿沛、縮放后的圖片寬度、縮放比例]

height, width = scores.shape[-2:] 榛鼎,得到feature的高度和寬度逃呼,然后利用height, width來(lái)生成所有的anchor,之后對(duì)anchor進(jìn)行reshape:

anchors = anchors.reshape((K * A,4)) ? ? ? ? ? # 生成所有的anchor者娱,K*A個(gè)抡笼,K=height *?width ,A=9

然后黄鳍,把bbox_deltas 和?scores 都reshape到同樣的形式:

bbox_deltas = bbox_deltas.transpose((0,2,3,1)).reshape((-1,4))

scores = scores.transpose((0,2,3,1)).reshape((-1,1))

好了推姻,到重點(diǎn)部分了,由anchor來(lái)生成proposals:

proposals = bbox_transform_inv(anchors, bbox_deltas) :bbox_transform_inv函數(shù)很簡(jiǎn)單框沟,就是根據(jù)anchors和anchor的偏移量(tx, ty, tw, th)來(lái)生成?proposals 藏古。

接下來(lái)對(duì)proposals 進(jìn)行一系列的過(guò)濾操作,過(guò)濾之后進(jìn)行NMS操作:具體的流程是忍燥,先對(duì)前景得分scores進(jìn)行從大到小的排序拧晕,然后把排序的結(jié)果做NMS:keep = nms(np.hstack((proposals, scores)), nms_thresh),這里得到的keep是一個(gè)列表梅垄,列表的元素是進(jìn)行NMS操作之后厂捞,剩余的proposals的索引,然后根據(jù)keep索引,取出剩余的proposals 和 對(duì)應(yīng)的scores: ? ? ? ? ? ?proposals = proposals[keep, :] ? ? ? ? ? ? ? ? ? ?scores = scores[keep]靡馁。

最后欲鹏,把proposals增加1列,最前面增加1列的0臭墨,然后把proposals 和??scores 輸出貌虾。

top: 'rois'? ? # len(keep)行5列的矩陣,第1列元素:0裙犹,其余4列:proposals的左上角和右下角的坐標(biāo)

top: 'scores'? # len(keep)行1列的矩陣,矩陣元素為:前景得分


到這里衔憨,已經(jīng)得到了net的forward的結(jié)果叶圃,下面回到im_proposals函數(shù)。

將boxes = blobs_out['rois'][:,1:].copy() / scale践图,得到的boxes是把proposals對(duì)應(yīng)的原圖的結(jié)果(proposals是在縮放后的圖片中得到的)掺冠。然后輸出boxes和scores。

接著返回到imdb_proposals函數(shù):

imdb_boxes[i], scores = im_proposals(net, im)码党,從這里可以看出imdb_boxes[i]就是我們得到的box( len(keep)行4列的矩陣 )德崭,而且imdb_boxes[i]矩陣,就是im_proposals中的box揖盘。最后眉厨,返回imdb_boxes(列表,imdb中所有圖片的proposals)兽狭。

下面憾股,返回rpn_generate函數(shù),我們最終得到了imdb_name中所有圖片的rpn_proposals(列表)箕慧。

最后把rpn_proposals列表寫(xiě)入到rpn_proposals_path文件中服球。然后把rpn_proposals_path文件以字典的形式推入到子進(jìn)程的隊(duì)列中:queue.put({'proposal_path': rpn_proposals_path})。

經(jīng)過(guò)以上步驟颠焦,我們就創(chuàng)建了一個(gè)子進(jìn)程p:p = mp.Process(target=rpn_generate,kwargs=mp_kwargs)

然后啟動(dòng)子進(jìn)程:p.start()

從進(jìn)程中拿出rpn_proposals_path文件斩熊,得到rpn_proposals:rpn_stage1_out['proposal_path'] = mp_queue.get()['proposal_path']

等待進(jìn)程結(jié)束:p.join()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伐庭,隨后出現(xiàn)的幾起案子粉渠,更是在濱河造成了極大的恐慌,老刑警劉巖似忧,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣叛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盯捌,警方通過(guò)查閱死者的電腦和手機(jī)淳衙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人箫攀,你說(shuō)我怎么就攤上這事肠牲。” “怎么了靴跛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵缀雳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我梢睛,道長(zhǎng)肥印,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任绝葡,我火速辦了婚禮深碱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘藏畅。我一直安慰自己敷硅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布愉阎。 她就那樣靜靜地躺著绞蹦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榜旦。 梳的紋絲不亂的頭發(fā)上幽七,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音溅呢,去河邊找鬼锉走。 笑死,一個(gè)胖子當(dāng)著我的面吹牛藕届,可吹牛的內(nèi)容都是我干的挪蹭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼休偶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梁厉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起踏兜,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤词顾,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后碱妆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肉盹,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年疹尾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了上忍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骤肛。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窍蓝,靈堂內(nèi)的尸體忽然破棺而出腋颠,到底是詐尸還是另有隱情,我是刑警寧澤吓笙,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布淑玫,位于F島的核電站,受9級(jí)特大地震影響面睛,放射性物質(zhì)發(fā)生泄漏絮蒿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一叁鉴、第九天 我趴在偏房一處隱蔽的房頂上張望歌径。 院中可真熱鬧,春花似錦亲茅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至腔长,卻和暖如春袭祟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捞附。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工巾乳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸟召。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓胆绊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親欧募。 傳聞我的和親對(duì)象是個(gè)殘疾皇子压状,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容