Faster R-CNN之将GPU下的setup.py改为CPU下的格式

https://github.com/rbgirshick/py-faster-rcnn
在自己的笔记本上配置上述链接,因为没有GPU,希望对./lib下的setup.py取消对GPU的依赖,改为CPU(暂时只是想直接使用模型),因为还不是很熟悉,老是改错<_>。
已邀请:

李扬 - 密码六个一

赞同来自: 孙琳钧 诗大人

光改 setup.py 不行。下面是我改的步骤,在 OSX 10.11.2 上测试成功,可以在 CPU 模式下跑 faster_rcnn,在 Ubuntu 下应该也没问题。
--------------------------------------
1)首先,我的 python 版本是 anaconda ,这决定了后面修改代码的方式。原版 python 我平时不用,所以没法测试。

2)修改 lib/fast_rcnn/config.py
找到 196 行 `__C.USE_GPU_NMS = True`。将 `True` 改为 `False`,  关闭 gpu nms 代码。

3)修改 lib/fast_rcnn/nms_wrapper.py 
将第 9 行 `from nms.gpu_nms import gpu_nms` 注释掉。其余不用改。虽然 nms_wrapper.py 下面也包含了些 gpu_nms 代码。但是因为第 2)步已将 `USE_GPU_NMS` 改成 `False` 了,所以下方的代码保持原样就行。

4)修改 lib/setup.py  
1. 将 `def locate_cuda()` 整个函数定义都注释掉;
2. 注释 57 行 `CUDA = locate_cuda()` ;
3. 注释 77 行 `self.src_extensions.append('.cu')`;  
4. 注释 87 行` if os.path.splitext(src)[1] == '.cu':` 到 94 行 `else:`,只保留 `postargs = extra_postargs['gcc']`, 注意注释后的代码缩进;
5. 注释 125 行 `Extension('nms.gpu_nms',` 到 141 行 之间的代码。

5)修改 tools/demo.py 
1. 删除第 1 行 `#!/usr/bin/env python` ,如果不删除这一行,则在运行 demo.py 时会使用原版的 python 而不是 anaconda python。一旦如此,跑 demo 的时候会直接显示 segmentation fault !;
2. 注释 116 行 `parser.add_argument.......` 这一段; 
3. 143 行到 148 行之间的代码 只保留一个 `caffe.set_mode_cpu()`
4. 注释 153 到 158 行 之间的 `# Warmup on a dummy image` 一段代码。如果不注释,会在运行到  lib/faster_rcnn/test.py 下 的 net.forward(**forward_kwargs) 函数时直接出现 segmentation fault !

6) 下面是 编译 caffe,填写 Makefile 文件时,注意使用 CPU 模式,使用 anaconda 库,打开 WITH_PYTHON_LAYER。

7) 到 lib 下 make;然后回到 faster_rcnn 根目录下输入 python tools/demo.py 
 
上述步骤或许可以做简化,但我没那么多时间测试,题主可以自己试试。

libai

赞同来自: caffe

编译Caffe的时候:
在Makefile.config里
# CPU-only switch (uncomment to build without GPU support). 
 CPU_ONLY := 1
 

薛云峰 - 工程问题找我

赞同来自:

编译的时候将CPU_ONLY的选项置为1,在Makefile.config里面

要回复问题请先登录注册