前言
接著昨天介紹的RCNN形真,我們知道RCNN需要把每一個可能有目標的候選框搜索出來抡砂,然后把每個候選框傳入CNN提取特征,每一張圖片要產(chǎn)生大約2K個候選框窒篱,而每個框?qū)?yīng)的圖像都要傳入CNN焕刮,這個時間開銷肯定是很難承受的∩嗉粒基于RCNN這個致命問題济锄,F(xiàn)ast-RCNN出現(xiàn)了。
算法介紹
Fast-RCNN是在SPPNet和RCNN的基礎(chǔ)上進行改進的霍转。SPPNet的主要貢獻是在整張圖像上計算全局特征圖荐绝,然后對于特定的proposal,只需要在全局特征圖上取出對應(yīng)坐標的特征圖就可以了避消。但SPPNet仍然需要將特征保存在磁盤中低滩,速度還是很慢。結(jié)合RCNN的思想岩喷,論文提出直接將候選框區(qū)域應(yīng)用于特征圖恕沫,并使用ROI Pooling將其轉(zhuǎn)化為固定大小的特征圖,最后再連接兩個并行的分類頭和回歸頭完成檢測任務(wù)纱意。整個算法可以用下面的圖來表示:
貢獻&創(chuàng)新點
- Fast-RCNN 只對整個圖像進行一次特征提取婶溯,避免R-CNN的上千次特征提取褥影。
- 使用ROI Pooling層替換最后一層的Max Pooling層哑芹,巧妙避免RCNN中的將每個候選框Resize到固定大小的操作唬党。
- Fast RCNN在網(wǎng)絡(luò)的尾部采用并行的全連接層冒嫡,可同時輸出分類結(jié)果和窗口回歸結(jié)果,實現(xiàn)了端到端的多任務(wù)訓(xùn)練倦青,且不需要額外的特征存儲空間(在R-CNN中特征需要保存到磁盤羹唠,以供SVM和線性回歸器訓(xùn)練)志鹃。
- 使用SVD矩陣分解算法對網(wǎng)絡(luò)末端并行的全連接層進行分解硫狞,加速運算信轿。
ROI Pooling層
Fast-RCNN的核心是ROI池化層晃痴,它的作用是輸入特征圖的大小不定,但輸出大小固定的輸出特征圖财忽。而什么是ROI呢倘核?ROI就是經(jīng)過區(qū)域建議算法(Selective Search)生成的框經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)網(wǎng)絡(luò)提取特征后的特征圖上的區(qū)域,每一個ROI對應(yīng)了原圖的一個區(qū)域建議框定罢,只有大小變化了笤虫,相對位置沒有發(fā)生改變旁瘫。這個過程可以用下圖表示:
ROI Pooling的具體操作
- 根據(jù)輸入圖片翎苫,將ROI映射到特征圖對應(yīng)位置(映射規(guī)則就是直接把各個坐標除以“輸入圖片和特征圖大小的比值”)
- 將映射后的區(qū)域劃分為相同大小的sections权埠,其中sections代表輸出維度,例如7煎谍。
- 對每個sections進行最大池化操作攘蔽。
最后上傳一張經(jīng)典動態(tài)圖片,更好的表示這個過程:
源碼
Fast-RCNN的作者rgbirshick依然給出了源碼呐粘,有興趣可以讀一下:
https://github.com/rbgirshick/fast-rcnn
歡迎關(guān)注我的微信公眾號GiantPadaCV满俗,期待和你一起交流機器學(xué)習(xí),深度學(xué)習(xí)作岖,圖像算法唆垃,優(yōu)化技術(shù),比賽及日常生活等痘儡。