R-CNN系列其三:Fast_R-CNN

介紹

R-CNN的創(chuàng)始人Girshick(同樣來自微軟)對(duì)R-CNN與SPP-Net有了更多思考后屯耸,對(duì)這種需要多階段進(jìn)行訓(xùn)練的目標(biāo)檢測(cè)框架做了重大更新。使得整體的目標(biāo)檢測(cè)這一部分不再由多階段來完成官地,而是統(tǒng)一使用一個(gè)CNN網(wǎng)絡(luò)來完成特征提取,區(qū)域提案分類及后期對(duì)檢測(cè)框的微調(diào)等三樣工作烙懦。這個(gè)創(chuàng)新算是不小驱入,相對(duì)于之間流程的復(fù)雜,簡(jiǎn)單后了的模型不只實(shí)現(xiàn)了訓(xùn)練與推理速度的提升,同時(shí)也帶來了目標(biāo)檢測(cè)精度的增加亏较。大牛水平就是高拜喊!往往能夠通過將模型簡(jiǎn)單化來使得問題得到更好的解決雪情。高山仰止遵岩!

R-CNN目標(biāo)檢測(cè)框架的缺點(diǎn)

  • 它的訓(xùn)練是多階段的:我們?cè)谑褂孟馭elective Search等方法獲得圖片的區(qū)域提案后,先使用這些提案作為輸入來訓(xùn)練出一個(gè)收斂巡通、精度還算可以的CNN網(wǎng)絡(luò)尘执;然后去掉此CNN網(wǎng)絡(luò)最后的Softmax層/FC層后,直接使用網(wǎng)絡(luò)最后的CNN層輸出的feature maps作為一個(gè)SVM分類器的輸入扁达,對(duì)SVM分類器進(jìn)行訓(xùn)練以識(shí)別出此區(qū)域提案可能的分類正卧;最后第三個(gè)階段同樣是利用第一階段訓(xùn)練得到的CNN前端網(wǎng)絡(luò)拿到處理過的CNN層的feature maps,將之作為輸入來訓(xùn)練一個(gè)邏輯回歸模型以來對(duì)區(qū)域位置進(jìn)行較正跪解;多階段訓(xùn)練本身就是復(fù)雜的炉旷,難操作的;
  • 訓(xùn)練時(shí)的空間與時(shí)間復(fù)雜度高:訓(xùn)練第二叉讥、三階段所用的SVM與邏輯回歸分類器都需要將圖片區(qū)域提案通過第一階段訓(xùn)練得到的CNN網(wǎng)絡(luò)以生成相應(yīng)的特征向量窘行;一般這些特征向量都會(huì)存儲(chǔ)在硬盤當(dāng)中;對(duì)于VGG16的前端CNN網(wǎng)絡(luò)图仓,一般需要2.5天的GPU時(shí)間來處理5000張VOC07 圖片罐盔,而這些圖片產(chǎn)生的特征向量則需要數(shù)百GB的硬盤空間來存儲(chǔ);
  • 對(duì)象檢測(cè)慢:因?yàn)镽-CNN網(wǎng)絡(luò)需要對(duì)每個(gè)圖片之上的每一個(gè)區(qū)域提案進(jìn)行三階段處理救崔,因此需要的時(shí)間極長(zhǎng)惶看,當(dāng)使用VGG16網(wǎng)絡(luò)時(shí)一般需要47秒來處理一副圖片。

SPP-Net應(yīng)用在目標(biāo)檢測(cè)框架上的缺點(diǎn)

  • 它的訓(xùn)練同樣是多階段的六孵,所以與前面章節(jié)所說的R-CNN有著類似的缺點(diǎn)纬黎;
  • 由于SPP層的引入,它可以對(duì)整張圖直接計(jì)算劫窒,以節(jié)省同張圖上面多個(gè)區(qū)域提案在前端網(wǎng)絡(luò)計(jì)算上所需的時(shí)本今,但在使用finetue方式進(jìn)行訓(xùn)練模型增強(qiáng)時(shí)只對(duì)SPP層之后的FC層進(jìn)行finetune,因此整體模型的準(zhǔn)確度會(huì)受些影響主巍。

Fast_R-CNN帶來的改進(jìn)

  • 它在多個(gè)數(shù)據(jù)集上取得了比R-CNN與SPP-Net更高的mAP準(zhǔn)確率冠息;
  • 使用單個(gè)階段完成目標(biāo)區(qū)域檢測(cè);(可以說是最本質(zhì)的創(chuàng)新)
  • 訓(xùn)練時(shí)對(duì)所有的層進(jìn)行同步更新孕索;
  • 因?yàn)槭菃坞A段訓(xùn)練所以不需要額外的硬盤空間來存儲(chǔ)中間特征逛艰。

Fast_R-CNN網(wǎng)絡(luò)結(jié)構(gòu)

下圖所示為Fast_R-CNN的基本網(wǎng)絡(luò)結(jié)構(gòu),同過跟上篇的SPP-Net的網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比搞旭,我們能夠發(fā)現(xiàn)它結(jié)構(gòu)最本質(zhì)的創(chuàng)新即在于直接將最后FC層后得到的特征向量分別使用Softmax層與Regressor層來直接對(duì)區(qū)域方案的類別與位置進(jìn)行預(yù)測(cè)與調(diào)整散怖,這一網(wǎng)絡(luò)結(jié)構(gòu)改進(jìn)后來也為其它的模型像Yolo系列與SSD所采用唐断。

Fast_R-CNN網(wǎng)絡(luò)結(jié)構(gòu)
  • ROI池化層: ROI層的引入本質(zhì)上是Fast_R-CNN對(duì)SPP-Net里面idea的最大借鑒;ROI池化層有兩個(gè)參數(shù)H杭抠,W,分別表示此池化層處理后最終能得到的feature map的高與寬恳啥;任意一個(gè)ROI特征(經(jīng)過之間的CNN網(wǎng)絡(luò)處理后)都可以視為一個(gè)(r,c,h,w)的四元組偏灿,其中(r,c)表示區(qū)域左上角的位置,(h,w)則為此區(qū)域的高寬大卸鄣摹翁垂;ROI層在對(duì)這么一個(gè)ROI特征四元組進(jìn)行處理時(shí),會(huì)先將其分別H x W個(gè)網(wǎng)格單元硝桩,每個(gè)單元的大小為h/H x w/W沿猜,然后分別對(duì)每個(gè)單元做MaxPool處理以得到一個(gè)極大值,這樣最終就能得到一個(gè)大小為H x W的特征輸出碗脊。就此我們?nèi)菀卓闯霰举|(zhì)上ROI層是只有一個(gè)空間池化級(jí)別的金字塔式空間池化層啼肩。
  • 前端CNN網(wǎng)絡(luò)的初始化:任意一個(gè)CNN分類網(wǎng)絡(luò)都可作為它的前端CNN網(wǎng)絡(luò);不過對(duì)用于分類的CNN網(wǎng)絡(luò)我們需要進(jìn)行一些變形以來滿足Fast_R-CNN需求衙伶,首先需要將最后一個(gè)MaxPool層替換為ROI層以來輸出與接下來FC層輸入大小相匹配的feature maps祈坠;另外則需要將CNN分類網(wǎng)絡(luò)最后端的FC層(如對(duì)于Imagenet相關(guān)的CNN網(wǎng)絡(luò)即其最后的1000維輸入的FC層)替換為兩個(gè)兄弟層,一個(gè)為用于分類的Softmax層矢劲,另一個(gè)則用于區(qū)域位置檢測(cè)的回歸層赦拘,一般為L(zhǎng)1回歸;最后整個(gè)CNN網(wǎng)絡(luò)的輸入需要由兩部分組成芬沉,分別為輸入圖片數(shù)據(jù)與對(duì)應(yīng)的ROI區(qū)域位置提案躺同。
  • Fast_R-CNN的訓(xùn)練損失函數(shù):如下所示,可以知道它共有兩個(gè)部分構(gòu)成丸逸,分別對(duì)應(yīng)兩個(gè)層的輸出(Softmax層與L1回歸層)蹋艺;
    L(P, U, Tu, V) = Lcls(P, U) + λ[U ≥ 1]Lloc(Tu, V), 其中Lcls(P, U) = ? log Pu是ROI計(jì)算得到的相對(duì)于正確類別U的交叉熵?fù)p失;而Lloc 則是此ROI最終調(diào)整過后得到的目標(biāo)區(qū)域與正確目標(biāo)區(qū)域之間的L1損失椭员。

Fast_R-CNN檢測(cè)模型部署

一旦我們訓(xùn)練出了正確的Fast_R-CNN模型车海,那么可按以下步驟來進(jìn)行模型部署。

  • 以一張圖片及其上的R個(gè)目標(biāo)提案作為輸入隘击;(R一般為2000左右)
  • 一個(gè)前向運(yùn)算后我們能得出每個(gè)ROI所對(duì)應(yīng)的類別分布與相應(yīng)的目標(biāo)位置框的位置偏移(相對(duì)于輸入的RoI窗口位置)侍芝;
  • 接下來可使用與R—CNN類似的NMS(非最大值抑制)方法來減少預(yù)測(cè)得到的目標(biāo)檢測(cè)框的數(shù)目,最終得到的類別及框位置即為此圖片所檢測(cè)得到的類別與框埋同。

實(shí)驗(yàn)得到的發(fā)現(xiàn)

  • 作者通過實(shí)驗(yàn)證實(shí)通過多目標(biāo)學(xué)習(xí)來一起學(xué)習(xí)目標(biāo)類別與位置相對(duì)于像之前R-CNN或SPP-Net那樣對(duì)目標(biāo)類別與位置分別進(jìn)行學(xué)習(xí)相比州叠,多目標(biāo)學(xué)習(xí)可取得更好的mAP值;
  • 較深的網(wǎng)絡(luò)在進(jìn)行圖片特征學(xué)習(xí)時(shí)會(huì)自動(dòng)地學(xué)會(huì)圖片大小無關(guān)的特征提取方法凶赁;因此作者認(rèn)為在使用像VGG16這樣較深的網(wǎng)絡(luò)時(shí)咧栗,只使用單一縮放圖片數(shù)據(jù)集進(jìn)行模型訓(xùn)練在時(shí)間與精度權(quán)衡上效果更好逆甜。

Fast_R-CNN Caffe代碼

本質(zhì)上它相對(duì)于SPP-Net的主要改進(jìn)在于將原來R-CNN框架下分為三個(gè)階段去做的事情整合為一個(gè)階段,反映在caffe model 上面即是最終的loss層實(shí)現(xiàn)了多目標(biāo)損失函數(shù)學(xué)習(xí)致板。另外因?yàn)镽OI層也是SPP層的一個(gè)特例交煞,因此我們也放在這里。

---------------ROI層-----------------------

layer {
  name: "roi_pool5"
  type: "ROIPooling"
  bottom: "conv5"
  bottom: "rois"
  top: "pool5"
  roi_pooling_param {
    pooled_w: 6
    pooled_h: 6
    spatial_scale: 0.0625 # 1/16
  }
}

---------------最后幾層的損失函數(shù)層----------------------

layer {
  name: "cls_score"
  type: "InnerProduct"
  bottom: "fc7"
  top: "cls_score"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 21
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

layer {
  name: "bbox_pred"
  type: "InnerProduct"
  bottom: "fc7"
  top: "bbox_pred"
  param {
    lr_mult: 1
    decay_mult: 1
  }
  param {
    lr_mult: 2
    decay_mult: 0
  }
  inner_product_param {
    num_output: 84
    weight_filler {
      type: "gaussian"
      std: 0.001
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}

layer {
  name: "loss_cls"
  type: "SoftmaxWithLoss"
  bottom: "cls_score"
  bottom: "labels"
  top: "loss_cls"
  loss_weight: 1
}

layer {
  name: "loss_bbox"
  type: "SmoothL1Loss"
  bottom: "bbox_pred"
  bottom: "bbox_targets"
  bottom: "bbox_loss_weights"
  top: "loss_bbox"
  loss_weight: 1
}

參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斟或,一起剝皮案震驚了整個(gè)濱河市素征,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萝挤,老刑警劉巖御毅,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怜珍,居然都是意外死亡端蛆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門酥泛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來今豆,“玉大人,你說我怎么就攤上這事柔袁⊥碓洌” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵瘦馍,是天一觀的道長(zhǎng)歼秽。 經(jīng)常有香客問我,道長(zhǎng)情组,這世上最難降的妖魔是什么燥筷? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮院崇,結(jié)果婚禮上肆氓,老公的妹妹穿的比我還像新娘。我一直安慰自己底瓣,他們只是感情好谢揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捐凭,像睡著了一般拨扶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茁肠,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天患民,我揣著相機(jī)與錄音,去河邊找鬼垦梆。 笑死匹颤,一個(gè)胖子當(dāng)著我的面吹牛仅孩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播印蓖,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辽慕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赦肃?” 一聲冷哼從身側(cè)響起鼻百,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摆尝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體因悲,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡堕汞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晃琳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯检。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卫旱,靈堂內(nèi)的尸體忽然破棺而出人灼,到底是詐尸還是另有隱情,我是刑警寧澤顾翼,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布投放,位于F島的核電站,受9級(jí)特大地震影響适贸,放射性物質(zhì)發(fā)生泄漏灸芳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一拜姿、第九天 我趴在偏房一處隱蔽的房頂上張望烙样。 院中可真熱鬧,春花似錦蕊肥、人聲如沸谒获。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽批狱。三九已至,卻和暖如春展东,著一層夾襖步出監(jiān)牢的瞬間精耐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工琅锻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卦停,地道東北人向胡。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惊完,于是被迫代替她去往敵國和親僵芹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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