接上一个,这个坑不算多,也比较容易找到相应的 issue(非常感谢 py-faster-rcnn 的开发者),建议配合上一篇 caffe 的安装配置 阅读~

基本配置

👉 Clone 一下项目源码,记得加上 recursive 模式(项目中引用了 caffe-fast-rcnn 子模块)

1
git clone --recursive https://github.com/rbgirshick/fast-rcnn.git

👉 进行一些 cpu-only 相关的代码修改

  1. 在文件 ./lib/fast_rcnn/config.py 中将 USE_GPU_NMS 设为 False

  2. 在文件 ./tools/test_net.py./tools/train_net.py 中将 caffe.set_mode_gpu() 替换为 caffe.set_mode_cpu()

  3. 在文件 ./lib/setup.py 中注释掉一些代码(总共三处)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # CUDA = locate_cuda()

    # self.set_executable('compiler_so', CUDA['nvcc'])

    # 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']]
    # ),
  4. 在文件 ./lib/fast_rcnn/nms_wrapper.py 中注释掉 gpu 相关的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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=False):
    """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)
  5. 将项目中的 caffe-fast-rcnn 编译为 cpu-only 模式(下面会讲到,并参考 caffe 的安装配置

👉 编译项目的依赖库(Cython)

1
2
cd $FRCN_ROOT/lib
make

👉 编译 caffe 和 pycaffe

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

👉 在 Makefile.config 配置文件中取消这些注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CPU_ONLY := 1

BLAS := open
# If you install openblas via Homebrew
BLAS_INCLUDE := $(shell brew --prefix openblas)/include
BLAS_LIB := $(shell brew --prefix openblas)/lib

# If you use anaconda python
ANACONDA_HOME := $(HOME)/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python2.7 \
$(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \
PYTHON_LIB := $(ANACONDA_HOME)/lib

WITH_PYTHON_LAYER := 1

USE_PKG_CONFIG := 1

👉 编译

1
make -j8 && make pycaffe

可能会出现 Library not loaded: libcaffe.so.1.0.0-rc3 或类似的问题,是因为 libcaffe.so 没有在 DYLD_LIBRARY_PATH 里面,可以手动将 ./caffe-fast-rcnn/build/lib/ export 到 DYLD_LIBRARY_PATH 中,但更方便的做法是把 ./caffe-fast-rcnn/build/lib/libcaffe.so.1.0.0-rc3 复制到 /usr/local/lib 文件夹里面去。

👉 下载模型(为了跑 demo)

1
2
cd $FRCN_ROOT
./data/scripts/fetch_fast_rcnn_models.sh

然后会发现这个几百MB的文件下载得很慢,还可能最终会 Giving up,可以在脚本里面看它的下载位置,用 Chrome 或其他下载工具下载后将 faster_rcnn_models.tgz 复制到 ./data 文件夹里面并用 tar zxvf faster_rcnn_models.tgz 将其解压;其它脚本中的文件同理,这时候也可以一并下载下来了。

👉 跑 demo

1
2
cd $FRCN_ROOT/tools
./demo.py --cpu

然后就开心地发现跑通 demo 啦~ 结果大概是这样的

后续将会更新训练模型的其他过程和注意点~

其他相关资料

如果以上仍不足够解决大家的问题,欢迎在留言区评论,另外大家也可以项目的 issue 或参考以下这些材料,很可能你问题的答案能在里面找到👇

mac上跑仅cpu模式的fast-rcnn

mac下编译cpu only caffe并用xCode建caffe工程

Issue - How to setup with CPU ONLY mode

Issue - I got the error when running demo.py

Issue - libcaffe.so.1.0.0-rc3 problem