caffe Tutoriel
Commencer avec caffe
Recherche…
Remarques
Caffe est une bibliothèque écrite en C ++, pour faciliter l’expérimentation et l’utilisation des réseaux de neurones à convolution (CNN). Caffe a été développé par Berkeley Vision and Learning Center (BVLC).
Caffe est en fait une abréviation faisant référence à "Architectures convolutionnelles pour l'extraction rapide de caractéristiques". Cet acronyme englobe une partie importante de la bibliothèque. Caffe sous la forme d'une bibliothèque offre un cadre / une architecture de programmation générale qui peut être utilisé pour effectuer une formation et des tests efficaces des CNN. "Efficiency" est une caractéristique majeure de caffe, et constitue un objectif de design majeur de Caffe.
Caffe est une bibliothèque open source publiée sous licence BSD 2 Clause.
Caffe est maintenu sur GitHub
Caffe peut être utilisé pour:
- Entraînez et testez efficacement plusieurs architectures CNN, en particulier toute architecture pouvant être représentée sous forme de graphe acyclique dirigé (DAG).
- Utilisez plusieurs GPU (jusqu'à 4) pour la formation et les tests. Il est recommandé que tous les GPU soient du même type. Sinon, les performances sont limitées par les limites du processeur graphique le plus lent du système. Par exemple, dans le cas de TitanX et GTX 980, les performances seront limitées par ce dernier. Le mélange de plusieurs architectures n'est pas pris en charge, par exemple Kepler et Fermi 3 .
Caffe a été écrit selon des principes efficaces de programmation orientée objet (OOP).
Un bon point de départ pour commencer une introduction au café consiste à avoir une vue d'ensemble de la façon dont la café fonctionne à travers ses objets fondamentaux.
Versions
| Version | Date de sortie |
|---|---|
| 1.0 | 2017-04-19 |
Installation et configuration
Ubuntu
Vous trouverez ci-dessous des instructions détaillées pour installer Caffe, pycaffe ainsi que ses dépendances, sur Ubuntu 14.04 x64 ou 14.10 x64.
Exécutez le script suivant, par exemple "bash compile_caffe_ubuntu_14.sh" (~ 30 à 60 minutes sur un nouvel 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
A la fin, vous devez lancer "source ~ / .bash_profile" manuellement ou démarrer un nouveau shell pour pouvoir faire "python import caffe".
Activer le multithreading avec Caffe
Caffe peut fonctionner sur plusieurs cœurs. L'une des méthodes consiste à permettre au multithreading d'utiliser Caffe pour utiliser OpenBLAS au lieu de l'ATLAS par défaut. Pour ce faire, vous pouvez suivre ces trois étapes:
-
sudo apt-get install -y libopenblas-dev - Avant de compiler Caffe, éditez
Makefile.config, remplacezBLAS := atlasparBLAS := open - Après la compilation de Caffe, l'exécution de l'
export OPENBLAS_NUM_THREADS=4entraînera l'utilisation de 4 cœurs par Caffe.
Perte de régularisation (perte de poids) chez Caffe
Dans le fichier du solveur , nous pouvons définir une perte de régularisation globale à l'aide des options weight_decay et regularization_type .
Dans de nombreux cas, nous souhaitons des taux de décroissance du poids différents pour différentes couches. Cela peut être fait en réglant la decay_mult option pour chaque couche dans le fichier de définition du réseau, où decay_mult est le multiplicateur sur le taux de décroissance globale de poids, de sorte que le taux de décroissance du poids réel appliqué pour une couche est decay_mult*weight_decay .
Par exemple, ce qui suit définit une couche de convolution sans perte de poids, quelles que soient les options du fichier de résolution.
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"
}
}
}
Voir ce fil pour plus d'informations.