Aujourd’hui nous allons découvrir ensemble le framework de deep learning « Caffe« , développé par l’Université de Berkeley et dédié à l’analyse d’image.

Nous verrons en particulier comment l’installer sous Windows 10 avec Python 3, puisqu’à l’origine il ne fonctionnait que sous Linux avec Python 2. Vous aurez alors le choix, entre compiler vous-même toute la librairie (pour la rendre compatible avec votre ordinateur) ou utiliser l’une des deux versions qu’on vous propose (CPU ou CUDA)…

Dans tous les cas, suivez le guide !

Qu’est-ce que « CAFFE » ?

caffe logo
(crédit : sarangibPixabay License)

Caffe est un framework de Deep Learning, à l’image de Tensorflow, Keras ou encore PyTorch développé à l’origine par l’Université de Berkeley (équipe BVLC : Berkeley Vision and Learning Center).

Signifiant « Convolutional Architecture for Fast Feature Embedding » l’objectif est clairement annoncé : fournir un outil rapide (codé en C++ avec une interface Python) et efficace d’analyse d’image, que ce soit pour de la reconnaissance ou de la classification !

Pendant un certain temps, Caffe n’était disponible que sous Linux, avec une très large préférence pour Python 2, mais suite à plusieurs développements, il est aujourd’hui possible de l’avoir sous Windows avec Python 3 : il faut simplement le compiler pour son environnement si cela n’a pas déjà été fait par quelqu’un d’autre !

Remarque : une version 2 de caffe nommée caffe2 a brièvement existée avant d’être absorbée dans PyTorch, le framework de Deep Learning de NVIDIA. Cependant, la version 1 est toujours maintenue, même si je vous conseille d’utiliser Tensorflow / PyTorch / Keras pour tout nouveau projet de Deep Learning.

Caffe Windows 10 + Python 3 : comment l’installer très rapidement

Caffe est une librairie Python tout à fait classique, que nous allons devoir ajouter à la main à notre environnement pour pouvoir l’importer. Lorsque ce sera fait, il suffit d’écrire dans votre code Python :

import caffe

Cependant, pour en arriver là, il va falloir remplir un certain nombre de pré-requis.

Comme expliqué précédemment, la librairie Caffe n’est PAS disponible de base sur Windows : la seule solution est que « quelqu’un » télécharge les sources de Caffe et les compile pour l’environnement voulu, car le code est en C++ et dépend donc de la plateforme utilisée.

Sur notre GitHub, vous trouverez donc deux versions déjà compilées de Caffe pour l’environnement suivant. Si vous n’avez PAS cet environnement, il vous faudra aller compiler Caffe (cf section suivante) ou trouver une version déjà compilée quelque part…

Lien vers notre GitHub contenant Caffe déjà compilé pour Windows 10 avec Python 3

ATTENTION : les fichiers étant trop volumineux, ils ont été compressés. Il faudra donc en dézipper le contenu ! De plus, cela a été fait grâce à Git LFS. Vous ne pouvez donc PAS téléchargez le zip du Github et êtes obligés de saisir la commande (après avoir installé Git Bash) :

git clone https://github.com/penseeartificielle/caffe-windows-installation-tutorial.git
  • Windows 10
  • Python 3.5 (la version de Python est très importante : Caffe ne marche pas sous Python 3.6, ou alors il faudra construire des binaries en plus)
  • Microsoft Visual C++ 14 (= la version de 2015 = MSC v.1900 : visible lorsque vous démarrez Python) : si vous ne l’avez pas, installez-le absolument.
  • faculatitf : CUDA 8 si vous n’utilisez pas la version CPU proposée

Si vous n’avez pas Python 3.5 mais une autre version, je vous propose l’astuce suivante pour avoir la double installation.

Remarque : n’importe quelle sous-version de Python 3.5 fonctionnera. Par exemple, la librairie a été testée avec Python 3.5.4 et 3.5.5 avec succès !

Caffe Windows installation
Comment avoir caffe windows opérationnel (en résumé) (crédit : Lambert Rosique)

Astuce pour avoir deux versions de Python en même temps !

anaconda prompt env
Création d’un environnement virtuel sous Python 3.5 avec Anaconda (crédit : Lambert Rosique)

Première technique (recommandée) : utiliser Anaconda. Il s’agit d’un logiciel de gestion de vos environnements Python (entre autre), qu’il vous suffira d’installer sur votre ordinateur.

Ensuite, vous aurez accès dans le menu démarrer à « Anaconda Prompt » que vous devrez ouvrir. Saisissez alors la commande suivante pour créer un environnement virtuel (c’est-à-dire que tout ce que vous y ferez n’impactera pas votre ordinateur) nommé « envcaffe » (vous pouvez changer le nom) en forçant Python à être en version 3.5 :

conda create -n envcaffe python=3.5 anaconda

Par défaut, vous êtes dans l’environnement « base » pour changer il suffit d’écrire

activate envcaffe

et pour revenir

deactivate

Si vous voulez tester votre version de Python, activez l’environnement virtuel envcaffe et écrivez « python » : la version apparaîtra (3.5.5 ici).

Seconde technique : utiliser Python directement (ce qui est un peu plus complexe).

Commençons par installer « virtualenv » et son wrapper windows qui nous donnera accès à plus de fonctionnalités. Dans une invite de commande, tapez :

pip install virtualenv
pip install virtualenvwrapper-win

Ensuite, installez dans un répertoire Python 3.5 (par exemple 3.5.5). Attention à ne pas l’ajouter au PATH, sinon il deviendra votre version par défaut (ce que nous voulons éviter).

Enfin, pour créer l’environnement virtuel, notez le chemin d’installation de votre nouveau Python et saisissez la commande suivante en le changeant :

mkvirtualenv -p C:\Python\Python35\python.exe envcaffe

ATTENTION : cette commande ne fonctionne PAS dans la console PowerShell, il faut impérativement utiliser la console cmd !!!

Il ne vous restera plus qu’à faire :

workon envcaffe

pour activer l’environnement.

Installation des librairies complémentaires à Caffe

Pour que Caffe fonctionne nous allons devoir installer quelques librairies Python.

ATTENTION : scikit-image, que nous allons installer, contient un bug qui le rend incompatible avec Numpy 1.16.0. Pour cette raison, nous allons être forcés de prendre Numpy 1.15.0, mais je ne doute pas que le bug soit « rapidement » corrigé (il s’agit d’un problème avec _validate_lengths).

Dans votre console cmd classique OU depuis votre environnement virtuel activé (si vous l’avez fait : soit anaconda prompt avec activate soit cmd classique avec workon) :

pip install numpy==1.15.0
pip install scikit-image
pip install protobuf

Installation de Caffe

Sur notre github, vous trouverez deux fichiers dossiers distincts : le premier a été compilé pour utiliser le CPU (processeur) de votre ordinateur, tandis que le second est fait pour s’appuyer sur CUDA 8 et donc votre GPU (carte graphique). Passer par la carte graphique permet de diviser les temps de calculs par 10 en moyenne, ce qui n’est pas négligeable mais… requiert une installation particulière (et, surtout, une carte graphique compatible). Pour plus de détails, n’hésitez pas à consulter notre tutoriel dédié.

Dans le répertoire de votre choix (pour ma part, D:\workspaces\caffe), placez l’un des deux dossiers python inclus dans la version voulue de sorte à avoir D:\workspaces\caffe\python. C’est ce chemin que nous allons devoir référencer.

En effet, pour que l’import dans Python de caffe puisse fonctionner, il suffit d’ajouter ce répertoire au PYTHONPATH du Python utilisé ! La variable d’environnement peut être écrite de plusieurs manière, soit depuis les variables d’environnement système (attention alors, car caffe sera accessible pour tous vos environnements Python, même les non-compatibles) ou de la manière suivante pour un environnement virtuel :

  • activez l’environnement virtuel
  • écrivez alors (en changeant le chemin) :
set "PYTHONPATH=D:\workspaces\caffe\python;%PYTHONPATH%"
  • puis « python » et dedans :
import caffe
import caffe réussit
Caffe a correctement été importé dans la console Python 3.5 (crédit : Lambert Rosique)

Normalement vous ne devriez avoir aucune erreur ni même message particulier, vous passerez simplement à la ligne suivante.

Voilà ! Vous avez Caffe sur votre ordinateur !

Sinon, il vous faudra essayer de comprendre d’où vient le problème, voire de recompiler une nouvelle version si celles proposées ne sont pas compatibles avec votre ordinateur.

ATTENTION : si vous fermez la console, votre « set PYTHONPATH » est automatiquement oublié. Il existe cependant plusieurs manières de le rendre définitif. Vous pouvez, par exemple, le faire au début de vos codes Python, avant l’import de caffe (déconseillé car laborieux). Ou vous pouvez modifier le script activate.bat afin de faire le « set PYTHONPATH » lorsque vous démarrez l’environnement « envcaffe » (nommé « caffe » dans la screenshot précédente).

Pour cette dernière solution, allez dans le répertoire d’installation d’Anaconda et ouvrez le répertoire « Scripts » puis éditez le fichier activate.bat en ajoutant ces lignes par exemple

@if "%1"=="envcaffe" (
    set "PYTHONPATH=D:\workspaces\caffe\python"
)

Comment compiler soi-même Caffe pour sa propre configuration…

On arrive dans la partie compliquée, pour laquelle je ne peux pas vous garantir d’être exhaustif sur tous les bugs tant il peut y en avoir ! Ceci étant, nous allons faire de notre mieux pour y arriver, ne vous inquiétez pas…

Le tutoriel de compilation de Berkeley est disponible, et même s’il ne « marche pas en l’état » (en tout cas pas chez moi), il devrait vous aider à avancer.

Veuillez noter dès à présent que pour pouvoir compiler Caffe pour notre environnement, il y aura besoin de « prebuilt binaries ». Dans ce tutoriel, je n’expliquerai pas comment les créer soi-même, ce qui sera indispensable si vous voulez avoir caffe sur un environnement différent de ceux-ci :

  • Visual Studio 2015 + CPU ou CUDA 8 + Python 3.5
  • Visual Studio 2015 + CPU ou CUDA 8 + Python 2.7
  • Visual Studio 2013 + CPU + Python 2.7

Nous allons maintenant voir comment compiler Caffe pour Visual Studio 2015 + CPU ou CUDA 8 + Python 3.5.

  1. Installez Microsoft Visual Studio C++ 2015 si ce n’est pas déjà fait
  2. Installez CUDA 8 si vous souhaitez construire Caffe pour CUDA (s’appuyant sur votre carte graphique). Un tutoriel d’installation de CUDA 8 est déjà disponible sur Pensée Artificielle.
  3. Installez CMake dans sa dernière version

Remarque : n’installez pas Ninja comme indiqué sur Github, car (chez moi en tout cas) ça ne marchera pas, seul MVSC 2015 permettra de construire Caffe…

Remarque 2 : CMake sera également utilisé par « Boost« , une librairie que nous installerons par la suite. Cependant, Boost nécessite une version suffisamment récente de CMake, donc soyez sûrs de prendre la dernière. Voici un lien avec la correspondance entre les versions nécessaires.

4. Installez les librairies suivantes dans votre environnement Python 3.5. Si vous avez Anaconda, il suffit d’activer l’environnement « envcaffe » et de saisir les lignes suivantes (sinon il faudra faire pip install) :

conda config --add channels conda-forge
conda config --add channels willyd
conda install --yes cmake ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz

Lorsque vous allez compiler Caffe, il faudra également que l’interface Python soit créée. Ces différents packages permettront justement à cette interface d’être écrite et valide : ils sont donc indispensables.

5. Enfin, téléchargez l’intégralité du projet caffe de Berkeley de la manière suivante :

  • Soit vous téléchargez le zip de cette adresse
  • Soit vous saisissez les commandes suivantes dans une invite :
git clone https://github.com/BVLC/caffe.git
cd caffe
git checkout windows

Modification du script de compilation

Maintenant que vous avez tout ce qu’il faut, nous allons éditer le script de compilation de Caffe afin de le rendre opérationnel.

Tout d’abord, allez dans le répertoire Scripts du dossier caffe téléchargé, et éditez le fichier « build_win.cmd ».

En ligne 160, vous devriez avoir la commande CMake qui va compiler toute la librairie. Si vous souhaitez forcer la version CPU, il vous suffit de remplacer -DCPU_ONLY:BOOL=%CPU_ONLY% ^ par -DCPU_ONLY:BOOL=1 ^

build win caffe
Ajoutez la ligne 172 pour référencer votre Python 3.5 (crédit : Lambert Rosique)

Dans tous les cas, après CUDA, vous devrez impérativement ajouter une nouvelle ligne (172) qui contiendra le chemin vers Python 3.5 (si ce n’est pas votre Python par défaut), sans quoi rien ne marchera. Ajoutez donc : -DPYTHON_EXECUTABLE:FILEPATH=D:\Programmes\Anaconda3\envs\caffe\python.exe ^

Remarque : n’hésitez pas à modifier le script, par exemple j’ai dû mettre WITH_NINJA = 0 pour éviter d’utiliser Ninja (qui est installé sur mon ordinateur mais ne marche pas pour compiler Caffe : faîtes-le également !).

Compilation de Caffe !

On y est, nous allons enfin compiler Caffe pour votre ordinateur ! Ouvrez une invite de commande dans le répertoire caffe téléchargé, puis saisissez la commande suivante :

scripts\build_win.cmd

Remarque : si la compilation échoue, vous pouvez supprimer le répertoire « build » qui s’est créé pour tout reprendre de zéro.

Remarque 2 : si la compilation réussit (elle prend un certain temps), votre librairie caffe sera le répertoire « python ». En l’ouvrant, vous verrez d’ailleurs que des fichiers ont été mis à jour ou ajoutés. Ce sera ce répertoire qu’il faudra référencer, comme indiqué dans la section précédente.

Des erreurs, plein d’erreurs, mais surtout des solutions

Voici quelques unes des erreurs rencontrées. Veuillez noter que les solutions proposées pourraient ne pas marcher sur votre ordinateur, car parfois la cause ne sera pas la même.

De plus, très souvent, l’erreur est cachée dans plusieurs lignes d’erreurs. Je vous recommande donc de bien lire, surtout dans les erreurs de layers Python : si un obj n’est pas construit, les sous-objets seront aussi en erreur, mais la cause viendra du premier…

Remarque : dans un premier temps, je vous conseille de construire la version CPU ONLY pour limiter les erreurs potentielles liées à CUDA.

Could not find url for MSVC version = 1900 and Python version = 3.5.

1ère cause : Python 3.5 n’est pas trouvé. Pour ce problème, il suffit d’ajouter DPYTHON_EXECUTABLE:FILEPATH=D:\Programmes\Anaconda3\envs\caffe\python.exe ^ dans le fichier build_win.cmd en ligne 172 (cf partie précédente).

2ème cause : MSVC n’est pas trouvé. Ouvrez la console Python 3.5 : est-ce que MSC v.1900 apparaît bien ? Si oui, l’erreur ne vient probablement pas de là.

3ème cause : vous utilisez Ninja (on vous avait prévenu) ! Supprimez le répertoire build, et modifiez le script build_win.cmd pour qu’il n’utilise plus du tout Ninja. Au démarrage de la compilation, il faudra avoir WITH_NINJA = 0.

Autres aides potentielles : ici et .

The dependency target « pycaffe » of target « pytest » does not exist.

Ma version de Numpy n’était pas à jour, il a fallut saisir :

python -m pip install numpy

ATTENTION : pour que Caffe fonctionne dans une application, il faut que numpy soit en version 1.15.0 à cause du bug de scikit-image (pour l’instant en tout cas). Vous pouvez donc faire à la place :

python -m pip install numpy==1.15.0

Autre aide potentielle : ici.

nvcc.hpp(22): fatal error C1017: invalid integer constant expression

Un bout de code du fichier nvcc.hpp n’est pas valide, il suffit de le commenter. Pour cela, aller dans « C:\Users\lrosique\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include\boost-1_61\boost\config\compiler » (le chemin est indiqué dans l’erreur).

A noter que si vous n’avez pas la version 1.61 de boost, vous pouvez l’ajouter à la main (je la laisse dans le github).

Editez le fichier nvcc.hpp : supprimez/commentez les lignes 22 à 24

//#if !defined(__CUDACC_VER__) || (__CUDACC_VER__ < 70500)
//#   define BOOST_NO_CXX11_VARIADIC_TEMPLATES
//#endif

Autre aide potentielle : ici.

Imported targets not available for Boost version

Cette erreur vient de l’absence de Boost compatible avec votre version de CMake. Si vous avez la dernière version de CMake et que votre répertoire « C:\Users\lrosique\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include » ne contient pas « boost-1_61 », placez simplement celui fournit sur notre github à cet emplacement (le correctif nvcc.hpp est effectif).

Autre aide potentielle : ici.

[159/212] Building CXX object tools\CMakeFiles\upgrade_net_proto_text.dir\upgrade_net_proto_text.cpp.obj FAILED: tools/CMakeFiles/upgrade_net_proto_text.dir/upgrade_net_proto_text.cpp.obj

Le problème venait simplement du fait que je n’avais pas installé toutes les librairies Python nécessaires. Utilisant Anaconda pour gérer Python 3.5, j’ai simplement saisit les commandes suivantes une fois l’environnement activé :

conda config --add channels conda-forge
conda config --add channels willyd
conda install --yes cmake ninja numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz

Autre aide potentielle : ici.

C1083: Cannot open include file: ‘caffe/include_symbols.hpp’: No such file or directory

1ère cause : vous utiliser Powershell au lieu de l’invite de commande Windows. Fermez le powershell, et ouvrez l’invite cmd classique puis relancez le script de build.

2ème cause : vous utilisez ninja. Mettez WITH_NINJA = 0 partout dans le script de build.

Autres aides potentielles : ici et .

Conclusion sur Caffe Windows 10

Dans ce tutoriel nous avons vu comment importer caffe dans vos projets Python, et même comment créer la librairie caffe de toutes pièces (non sans difficulté).

Si vous rencontrez d’autres erreurs que celles listées et en trouvez une solution, n’hésitez pas à le dire en commentaire, ça aidera le reste de la communauté ! Et probablement moi-même lors d’une prochaine compilation… Merci !

Crédit de l’image de couverture : sarangibPixabay License