Caffe——py-faster-rcnn使用和搭建[Ubuntu——CPU]

前言

本人之前上课模式分类(Pattern Classification)读过一篇论文(Region-Based Convolutional Networks for
Accurate Object Detection and Segmentation),我个人觉得RCNN很有意思想尝试运行当中的代码。但由于之前一直忙与项目和课程,所以没时间去找RCNN相关的代码并且运行它。现在终于有时间实现我自己的心愿。这里我使用的是Caffe的faster-rcnn,使用的语言是python3。(我这里使用的CPU运行,我真的很穷啊。所以大家有空施舍一下我吧)

编译

这里可以参考里面的README.md或者我之前写的Caffe[穷人版]——Ubuntu 16.04 CPU版本安装。因为内容很相似


1. 下载py-faster-rcnn的代码

在github上拉下相应的代码

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

假如说你想用matlab写的话,可以在这里下载

git clone --recursive https://github.com/ShaoqingRen/faster_rcnn.git

我们把这个py-faster-rcnn的目录记作:$FRCN_ROOT,方便我们后面说明。


2. 下载相关的python模块

进入caffe-fast-rcnn/python,然后按照requirements.txt里面的要求内容安装相关的python模块。

cd $FRCN_ROOT/caffe-fast-rcnn/python
for req in $(cat requirements.txt); do sudo pip3 install $req; done

3. 修改Makefile.config

我们进入caffe-fast-rcnn/python,并复制Makefile.config.exampleMakefile.config

cd $FRCN_ROOT/caffe-fast-rcnn
cp Makefile.config.example Makefile.config

接着修改Makefile.config文件。我这里就不复述一次啦,因为我在Caffe[穷人版]——Ubuntu 16.04 CPU版本安装写的很清楚了。因为这里使用Python调用caffe的库。所以我们必须编译caffe。你也可以看README.md的内容。


4. 编译lib

进入$FRCN_ROOT/lib,修改setup.py的内容(因为我这里使用CPU,假如使用GPU的话可以忽略),编译faster-rcnn的相关函数库。

cd $FRCN_ROOT/lib
vim setup.py

(使用CPU)修改setup.py内容,将# 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的内容

make

5. 编译caffe

进入$FRCN_ROOT/caffe-fast-rcnn,并且编译代码

cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

假如没什么报错,应该是没问题的了。

运行demo

在运行demo前,我们还差重要的模型还没有。假如你想自己通过train来获得也行,但我只是用CPU跑代码计算资源有限,所以就暂时不做training,直接下载模型就运行啦。假如想自己做的话,可以看看Beyond the demo: installation for training and testing models
我们在进入$FRCN_ROOT/caffe-fast-rcnn后,执行下载脚本:

cd $FRCN_ROOT
./data/scripts/fetch_faster_rcnn_models.sh

脚本会自动下载和解压到data目录下。你会看到有一个faster_rcnn_models的目录,里面有两个模型文件VGG16_faster_rcnn_final.caffemodelZF_faster_rcnn_final.caffemodel。要注意的是,我们身处与天朝当中,而模型压缩包在dropbox,所以....你懂得。

运行代码前,我们要修改lib里面的一些地方,主要是因为我是用CPU跑的,所以要注释一些使用gpu的代码,不然代码会报错:
$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)

另外,我现在使用的python3运行,而代码是Py2.7写的,所以我们需要将部分语法变为Py3。这里我就不多讲哪些地方做修改了,因为都基础语法而已。

最后运行

cd $FRCN_ROOT/
python3 ./tools/demo.py --cpu
今天午饭在饭堂门口拍
这是作者给出的demo做展示

因为里面用nms将score比较低的目标过滤掉,我这里设置的0.7的thresh。然后我们就只会看到0.7以上的目标。显然作者训练的模型还是有所欠缺的,作者在README.md里面也写到了,我们可以通过其他的数据集做进一步的优化。

相关参考

感谢阅读,差不多要睡觉啦!早唞!好梦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容