caffe开始使用caffe


备注

Caffe是一个用C ++编写的库,用于促进卷积神经网络(CNN)的实验和使用。 Caffe由Berkeley Vision and Learning Center(BVLC)开发。

Caffe实际上是一个缩写,指的是“用于快速特征提取的卷积架构”。这个首字母缩略词封装了库的一个重要范围。库的形式的Caffe提供了一般编程框架/体系结构,可用于执行CNN的有效训练和测试。 “效率”是caffe的主要标志,并且是Caffe的主要设计目标。

Caffe是一个根据BSD 2条款许可发布的开源库

Caffe在GitHub上维护

Caffe可用于:

  • 有效地训练和测试多个CNN架构,特别是可以表示为有向无环图(DAG)的任何架构。
  • 利用多个GPU(最多4个)进行培训和测试。建议所有GPU应为相同类型。否则,性能受到系统中最慢GPU限制的限制。例如,对于TitanX和GTX 980,性能将受到后者的限制。不支持混合多种体系结构,例如Kepler和Fermi 3

Caffe遵循高效的面向对象编程(OOP)原则编写。

开始介绍caffe的一个很好的起点是鸟瞰一下caffe如何通过其基本物体发挥作用。

版本

发布日期
1.0 2017年4月19日

使用Caffe启用多线程

Caffe可以在多个核心上运行。一种方法是使用Caffe启用多线程来使用OpenBLAS而不是默认的ATLAS。为此,您可以按照以下三个步骤操作:

  1. sudo apt-get install -y libopenblas-dev
  2. 在编译Caffe之前,编辑Makefile.config ,用BLAS := atlas 代替BLAS := atlas BLAS := open
  3. 编译Caffe后,运行export OPENBLAS_NUM_THREADS=4 将导致Caffe使用4个核心。

安装和设置

Ubuntu的

下面是在Ubuntu 14.04 x64或14.10 x64上安装Caffe,pycaffe及其依赖项的详细说明。

执行以下脚本,例如“bash compile_caffe_ubuntu_14.sh”(在新的Ubuntu上大约30到60分钟)。

# This script installs Caffe and pycaffe. 
# CPU only, multi-threaded Caffe.

# Usage: 
# 0. Set up here how many cores you want to use during the installation:
# By default Caffe will use all these cores.
NUMBER_OF_CORES=4

sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev 
sudo apt-get install -y libopencv-dev libhdf5-serial-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libatlas-base-dev 
sudo apt-get install -y python-dev 
sudo apt-get install -y python-pip git

# For Ubuntu 14.04
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler 

# Install LMDB
git clone https://github.com/LMDB/lmdb.git 
cd lmdb/libraries/liblmdb
sudo make 
sudo make install

# More pre-requisites 
sudo apt-get install -y cmake unzip doxygen
sudo apt-get install -y protobuf-compiler
sudo apt-get install -y libffi-dev python-pip python-dev build-essential
sudo pip install lmdb
sudo pip install numpy
sudo apt-get install -y python-numpy
sudo apt-get install -y gfortran # required by scipy
sudo pip install scipy # required by scikit-image
sudo apt-get install -y python-scipy # in case pip failed
sudo apt-get install -y python-nose
sudo pip install scikit-image # to fix https://github.com/BVLC/caffe/issues/50


# Get caffe (http://caffe.berkeleyvision.org/installation.html#compilation)
cd
mkdir caffe
cd caffe
wget https://github.com/BVLC/caffe/archive/master.zip
unzip -o master.zip
cd caffe-master

# Prepare Python binding (pycaffe)
cd python
for req in $(cat requirements.txt); do sudo pip install $req; done

# to be able to call "import caffe" from Python after reboot:
echo "export PYTHONPATH=$(pwd):$PYTHONPATH " >> ~/.bash_profile 
source ~/.bash_profile # Update shell 
cd ..

# Compile caffe and pycaffe
cp Makefile.config.example Makefile.config
sed -i '8s/.*/CPU_ONLY := 1/' Makefile.config # Line 8: CPU only
sudo apt-get install -y libopenblas-dev
sed -i '33s/.*/BLAS := open/' Makefile.config # Line 33: to use OpenBLAS
# Note that if one day the Makefile.config changes and these line numbers may change
echo "export OPENBLAS_NUM_THREADS=($NUMBER_OF_CORES)" >> ~/.bash_profile 
mkdir build
cd build
cmake ..
cd ..
make all -j$NUMBER_OF_CORES # 4 is the number of parallel threads for compilation: typically equal to number of physical cores
make pycaffe -j$NUMBER_OF_CORES
make test
make runtest
#make matcaffe
make distribute

# Afew few more dependencies for pycaffe
sudo pip install pydot
sudo apt-get install -y graphviz
sudo pip install scikit-learn
 

最后,你需要手动运行“source~ / .bash_profile”或者启动一个新的shell来做'python import caffe'。

Caffe中的正则化损失(重量衰减)

求解器文件中,我们可以使用weight_decayregularization_type 选项设置全局正则化损失。

在许多情况下,我们需要不同层的不同重量衰减率。这可以通过为网络定义文件中的每个层设置decay_mult 选项来完成,其中decay_mult 是全局权重衰减率的乘数,因此应用于一个层的实际权重衰减率为decay_mult*weight_decay

例如,以下定义了卷积层,无论解算器文件中的选项如何都没有权重衰减。

layer {
  name: "Convolution1"
  type: "Convolution"
  bottom: "data"
  top: "Convolution1"
  param {
    decay_mult: 0
  }
  convolution_param {
    num_output: 32
    pad: 0
    kernel_size: 3
    stride: 1
    weight_filler {
      type: "xavier"
    }
  }
}
 

有关更多信息,请参阅此主题