Caffe Network配置从零开始

本文面向有一定机器学习基础,但是对Caffe/Deep Learning零操作基础.

Deep Learning 在图像, 声音, 视频, 文字等几乎全部的智能识别领域, 打破最新记录(或平最新记录), 近期其识别的准确度开始超越普通人类, 正在打破机器和人类的屏障. Deep Learning的创始元老被Facebook, Google, Baidu 等巨头瓜分. 这类算法开始成为智能市场的未来兵家必争之地. 

Deep Learning的原则是以加重训练时间为代价, 提升应用速度的原则, 又在传统的神经网络上做出关键改进.

CNN是Deep Learning 在图像处理上一个重要分支. 

Caffe 是Deep Learning一个重要的库. 

Caffe 的训练时间动辄几天, 几周. 还要加上大量的GPU优化, HPC优化等. 给人感觉像是庞然大物,遥不可及. 但实际上, 只是做一些fine tuning, 甚至只是做feature extraction的话, 只要一台Ubuntu电脑, 或者只要一个虚拟机就够了. 特征提取速度在ms级别. 

本文介绍Caffe (BVLC版本)在一个近乎裸体的虚拟机上的配置和运行.

  • 一个Ubuntu14.4 (64位)以上的虚拟机/真机. 
  • 机器配置: 

     

    • 显卡: 没必要
    • CPU: 2.4G单核或多核,  或者其他类似家用级别. 
    • Memory: 2-4G, 不够再加呗
    • 硬盘: 几个G. (实际上安装完也就1G不到, 主要是有几个model动辄几百M)
  • matlab 2014或者以上(2014以下未测试过)
  • python 2.7 (其他版本没测试过, 不过应该3.0不行)
  • 一颗准备好面对摧残的心

任何模型, 库,版本的选择, 不提为什么, 总体原则是消灭选择困难症. 以后有空再回味有什么更好的选择. 


STEP1:  CUDA, dependencies, environments


STEP2:  caffe-future install and make

#Edit makefile.config:

#If using CPU, uncomment/Add:
CPU_ONLY := 1 

#add reference to hdf5
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

#Compile Caffe:
 


STEP3: Testing

安装以后肯定心里不踏实, 到底完成了没有. 请见文章末尾, 拓展阅读


Questions/Problems & Answers Section

Problem: cannot find cublas_v2.h 
Answer: find the file:
    sudo find / -name cublas_v2.h
if you get: 
    /usr/local/cuda-7.0/targets/x86_64-linux/include/cublas_v2.h
then edit Makefile.config:
    CUDA_DIR := /usr/local/cuda-7.0
OR make a symbolic link:
    ln -s /usr/local/cuda-7.0 /usr/local/cuda

Problem
make: /usr/local/cuda-7.0/bin/nvcc: Command not found
Answer:
    http://askubuntu.com/questions/451672/installing-and-testing-cuda-in-ubuntu-14-04 extract nvidia_installer and install
        Sub-Problem: linux-headers-3.13.0-63-generic missing
        Answer:    sudo apt-get linux-headers-3.13.0-63-generic
        Sub-Problem: problem:  Unable to load the kernel module.
        Answer: (cannot remember)

Problem:
“src/caffe/util/math_functions.cu(140): error: calling a host function("std::signbit ") from a globalfunction("caffe::sgnbit_kernel ") is not allowed”
Answer
Edit:  ./include/caffe/util/math_functions.hpp line224
    uncomment:using std::signbit;
    change: DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = signbit(x[i]));
    to:DEFINE_CAFFE_CPU_UNARY_FUNC(sgnbit, y[i] = std::signbit(x[i]));

Problem: cannot find any file, but can be found by 'find' and the file is related to python:
Answer:: Add the folder containing the file in Makefile.conf
eg: cannot find <patchlevel.h>, and it is in /usr/include/python2.7/patchlevel.h
then:
PYTHON_INCLUDE := /usr/local/include/python2.7 \
                /usr/local/lib/python2.7/dist-packages/numpy/core/include \
                /usr/include/python2.7/


拓展阅读

如何测试系统安装完全, 如何开始下一步, 下一步的简单例程: caffe 的简单范例 (预留链接坑位)

如果选择其他版本的caffe, caffe下的model又该选择什么呢: caffe 版本选择, 和model选择. (预留链接坑位)