Looking for caffe Answers? Try Ask4KnowledgeBase
Looking for caffe Keywords? Try Ask4Keywords

caffeErste Schritte mit Caffe


Bemerkungen

Caffe ist eine in C ++ geschriebene Bibliothek, um das Experimentieren mit und die Verwendung von Convolutional Neural Networks (CNN) zu erleichtern. Caffe wurde vom Berkeley Vision and Learning Center (BVLC) entwickelt.

Caffe ist eigentlich eine Abkürzung, die sich auf "Convolutional Architectures for Fast Feature Extraction" bezieht. Dieses Akronym umfasst einen wichtigen Bereich der Bibliothek. Caffe in Form einer Bibliothek bietet eine allgemeine Programmierumgebung / -architektur, mit der effizientes Training und Testen von CNNs durchgeführt werden kann. "Effizienz" ist ein wichtiges Markenzeichen von Caffe und steht als wichtiges Designziel von Caffe.

Caffe ist eine Open-Source-Bibliothek, die unter der BSD 2-Klausel-Lizenz veröffentlicht wurde.

Caffe wird auf GitHub gepflegt

Caffe kann verwendet werden um:

  • Trainieren und testen Sie effizient mehrere CNN-Architekturen, insbesondere jede Architektur, die als gerichteter azyklischer Graph (DAG) dargestellt werden kann.
  • Nutzen Sie mehrere GPUs (bis zu 4) für Training und Tests. Es wird empfohlen, dass alle GPUs vom selben Typ sind. Ansonsten ist die Leistung durch die Grenzen der langsamsten GPU im System begrenzt. Im Falle der TitanX und der GTX 980 wird die Leistung zum Beispiel durch die letztere eingeschränkt. Das Mischen mehrerer Architekturen wird nicht unterstützt, z. B. Kepler und Fermi 3 .

Caffe wurde nach den Prinzipien der objektorientierten Programmierung (OOP) geschrieben.

Ein guter Ausgangspunkt für eine Einführung in caffe ist der Blick auf die Funktionsweise von caffe durch seine grundlegenden Objekte.

Versionen

Ausführung Veröffentlichungsdatum
1,0 2017-04-19

Aktivieren Sie Multithreading mit Caffe

Caffe kann auf mehreren Kernen laufen. Eine Möglichkeit ist, Multithreading mit Caffe zu aktivieren, um OpenBLAS anstelle des Standard-ATLAS zu verwenden. Dazu können Sie die folgenden drei Schritte ausführen:

  1. sudo apt-get install -y libopenblas-dev
  2. Bevor Sie Caffe kompilieren, bearbeiten Sie Makefile.config , ersetzen Sie BLAS := atlas durch BLAS := open
  3. Nach dem Kompilieren von Caffe führt der export OPENBLAS_NUM_THREADS=4 dazu, dass Caffe 4 Kerne verwendet.

Installation und Einrichtung

Ubuntu

Nachfolgend finden Sie detaillierte Anweisungen zum Installieren von Caffe, pycaffe sowie seiner Abhängigkeiten unter Ubuntu 14.04 x64 oder 14.10 x64.

Führen Sie das folgende Skript aus, z. B. "bash compile_caffe_ubuntu_14.sh" (~ 30 bis 60 Minuten bei einem neuen Ubuntu).

# 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
 

Am Ende müssen Sie "source ~ / .bash_profile" manuell ausführen oder eine neue Shell starten, um "python import caffe" ausführen zu können.

Regularisierungsverlust (Gewichtsabnahme) in Caffe

In der Solver- Datei können wir einen globalen Regularisierungsverlust mit den Optionen weight_decay und regularization_type weight_decay .

In vielen Fällen wünschen wir unterschiedliche Gewichtsabnahmeraten für verschiedene Schichten. Dies kann durch Einstellen der Option decay_mult für jede Schicht in der Netzwerkdefinitionsdatei erfolgen, wobei decay_mult der Multiplikator der globalen Abklingrate für das Gewicht ist. Die tatsächliche Abklingrate für eine Schicht ist daher decay_mult*weight_decay .

Im Folgenden wird beispielsweise eine Faltungsschicht mit NO-Gewichtsabnahme definiert, unabhängig von den Optionen in der Lösungsdatei.

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"
    }
  }
}
 

Weitere Informationen finden Sie in diesem Thread .