前言
本人之前上課模式分類(Pattern Classification)讀過一篇論文(Region-Based Convolutional Networks for
Accurate Object Detection and Segmentation),我個(gè)人覺得RCNN很有意思想嘗試運(yùn)行當(dāng)中的代碼揖赴。但由于之前一直忙與項(xiàng)目和課程,所以沒時(shí)間去找RCNN相關(guān)的代碼并且運(yùn)行它。現(xiàn)在終于有時(shí)間實(shí)現(xiàn)我自己的心愿匪蝙。這里我使用的是Caffe的faster-rcnn,使用的語言是python3庆尘。(我這里使用的CPU運(yùn)行鳄梅,我真的很窮啊。所以大家有空施舍一下我吧)
編譯
這里可以參考里面的README.md或者我之前寫的Caffe[窮人版]——Ubuntu 16.04 CPU版本安裝衩匣。因?yàn)閮?nèi)容很相似
1. 下載py-faster-rcnn的代碼
在github上拉下相應(yīng)的代碼
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
假如說你想用matlab寫的話蕾总,可以在這里下載
git clone --recursive https://github.com/ShaoqingRen/faster_rcnn.git
我們把這個(gè)py-faster-rcnn的目錄記作:$FRCN_ROOT
,方便我們后面說明琅捏。
2. 下載相關(guān)的python模塊
進(jìn)入caffe-fast-rcnn/python
生百,然后按照requirements.txt
里面的要求內(nèi)容安裝相關(guān)的python模塊。
cd $FRCN_ROOT/caffe-fast-rcnn/python
for req in $(cat requirements.txt); do sudo pip3 install $req; done
3. 修改Makefile.config
我們進(jìn)入caffe-fast-rcnn/python
柄延,并復(fù)制Makefile.config.example
為Makefile.config
蚀浆。
cd $FRCN_ROOT/caffe-fast-rcnn
cp Makefile.config.example Makefile.config
接著修改Makefile.config
文件。我這里就不復(fù)述一次啦搜吧,因?yàn)槲以?a href="http://www.reibang.com/p/36badc9fbcc2" target="_blank">Caffe[窮人版]——Ubuntu 16.04 CPU版本安裝寫的很清楚了市俊。因?yàn)檫@里使用Python調(diào)用caffe的庫(kù)。所以我們必須編譯caffe赎败。你也可以看README.md的內(nèi)容。
4. 編譯lib
進(jìn)入$FRCN_ROOT/lib
蠢甲,修改setup.py
的內(nèi)容(因?yàn)槲疫@里使用CPU僵刮,假如使用GPU的話可以忽略),編譯faster-rcnn的相關(guān)函數(shù)庫(kù)鹦牛。
cd $FRCN_ROOT/lib
vim setup.py
(使用CPU)修改setup.py內(nèi)容搞糕,將# ONLY CPU
下一行的代碼注釋。
...
# ONLY CPU
# CUDA = locate_cuda()
...
def _compile(obj, src, ext, cc_args, extra_postargs, pp_opts):
...
# ONLY CPU
# self.set_executable('compiler_so', CUDA['nvcc'])
...
ext_modules = [
....
# ONLY CPU
# Extension('nms.gpu_nms',
# ['nms/nms_kernel.cu', 'nms/gpu_nms.pyx'],
# library_dirs=[CUDA['lib64']],
# libraries=['cudart'],
# language='c++',
# runtime_library_dirs=[CUDA['lib64']],
# # this syntax is specific to this build system
# # we're only going to use certain compiler args with nvcc and not with
# # gcc the implementation of this trick is in customize_compiler() below
# extra_compile_args={'gcc': ["-Wno-unused-function"],
# 'nvcc': ['-arch=sm_35',
# '--ptxas-options=-v',
# '-c',
# '--compiler-options',
# "'-fPIC'"]},
# include_dirs = [numpy_include, CUDA['include']]
# ),
....
然后編譯lib
的內(nèi)容
make
5. 編譯caffe
進(jìn)入$FRCN_ROOT/caffe-fast-rcnn
曼追,并且編譯代碼
cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe
假如沒什么報(bào)錯(cuò)窍仰,應(yīng)該是沒問題的了。
運(yùn)行demo
在運(yùn)行demo前礼殊,我們還差重要的模型還沒有驹吮。假如你想自己通過train來獲得也行,但我只是用CPU跑代碼計(jì)算資源有限晶伦,所以就暫時(shí)不做training碟狞,直接下載模型就運(yùn)行啦。假如想自己做的話婚陪,可以看看Beyond the demo: installation for training and testing models族沃。
我們?cè)谶M(jìn)入$FRCN_ROOT/caffe-fast-rcnn
后,執(zhí)行下載腳本:
cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh
腳本會(huì)自動(dòng)下載和解壓到data目錄下。你會(huì)看到有一個(gè)faster_rcnn_models
的目錄脆淹,里面有兩個(gè)模型文件VGG16_faster_rcnn_final.caffemodel
和ZF_faster_rcnn_final.caffemodel
常空。要注意的是,我們身處與天朝當(dāng)中盖溺,而模型壓縮包在dropbox漓糙,所以....你懂得。
運(yùn)行代碼前咐柜,我們要修改lib里面的一些地方兼蜈,主要是因?yàn)槲沂怯肅PU跑的,所以要注釋一些使用gpu的代碼拙友,不然代碼會(huì)報(bào)錯(cuò):
在$FRCN_ROOT/lib/fast_rcnn/nms_wrapper.py
里面修改:
from fast_rcnn.config import cfg
# from nms.gpu_nms import gpu_nms
from nms.cpu_nms import cpu_nms
def nms(dets, thresh, force_cpu=True):
"""Dispatch to either CPU or GPU NMS implementations."""
if dets.shape[0] == 0:
return []
# if cfg.USE_GPU_NMS and not force_cpu:
# return gpu_nms(dets, thresh, device_id=cfg.GPU_ID)
else:
return cpu_nms(dets, thresh)
另外为狸,我現(xiàn)在使用的python3運(yùn)行,而代碼是Py2.7寫的遗契,所以我們需要將部分語法變?yōu)镻y3辐棒。這里我就不多講哪些地方做修改了,因?yàn)槎蓟A(chǔ)語法而已牍蜂。
最后運(yùn)行
cd $FRCN_ROOT/
python3 ./tools/demo.py --cpu
因?yàn)槔锩嬗?code>nms將score比較低的目標(biāo)過濾掉漾根,我這里設(shè)置的0.7的thresh。然后我們就只會(huì)看到0.7以上的目標(biāo)鲫竞。顯然作者訓(xùn)練的模型還是有所欠缺的辐怕,作者在README.md里面也寫到了,我們可以通過其他的數(shù)據(jù)集做進(jìn)一步的優(yōu)化从绘。
相關(guān)參考
- http://blog.csdn.net/yiweibian/article/details/54018142
- https://github.com/rbgirshick/py-faster-rcnn/blob/master/README.md
- http://blog.sina.com.cn/s/blog_679f93560102wpyf.html
- https://github.com/rbgirshick/py-faster-rcnn/issues/8
- https://github.com/rbgirshick/py-faster-rcnn/issues/8#issuecomment-226997357
感謝閱讀寄疏,差不多要睡覺啦!早唞僵井!好夢(mèng)陕截!