Est-ce que quelqu'un sait s'il existe une feuille de triche pour toutes les commandes pycaffe importantes? Jusqu'à présent, j'utilisais caffe uniquement via l'interface Matlab et les scripts terminal + bash.
Je voulais passer à l'utilisation d'ipython et passer en revue les exemples de bloc-notes ipython. Cependant, j'ai du mal à obtenir un aperçu de toutes les fonctions qui sont à l'intérieur du module caffe pour python. (Je suis également assez nouveau sur python).
Les tests pycaffe et ce fichier sont la principale passerelle vers l'interface de codage python).
Tout d'abord, vous souhaitez choisir d'utiliser Caffe avec CPU ou GPU. Il suffit d'appeler caffe.set_mode_cpu()
ou caffe.set_mode_gpu()
, respectivement.
La classe principale exposée par l'interface pycaffe est le Net
. Il a deux constructeurs:
net = caffe.Net('/path/prototxt/descriptor/file', caffe.TRAIN)
qui crée simplement un Net
(dans ce cas en utilisant le Data Layer spécifié pour la formation), ou
net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)
qui crée un Net
et charge automatiquement les poids tels qu'ils sont enregistrés dans le fichier caffemodel fourni - dans ce cas en utilisant le Data Layer spécifié pour les tests .
Un objet Net
possède plusieurs attributs et méthodes. Ils peuvent être trouvés ici . Je ne citerai que ceux que j'utilise le plus souvent.
Vous pouvez accéder aux objets blob du réseau au moyen de Net.blobs
. Par exemple.
data = net.blobs['data'].data
net.blobs['data'].data[...] = my_image
fc7_activations = net.blobs['fc7'].data
Vous pouvez également accéder aux paramètres (poids) de la même manière. Par exemple.
Nice_Edge_detectors = net.params['conv1'].data
higher_level_filter = net.params['fc7'].data
Ok, il est maintenant temps d'alimenter le net avec quelques données. Ainsi, vous utiliserez les méthodes backward()
et forward()
. Donc, si vous voulez classer une seule image
net.blobs['data'].data[...] = my_image
net.forward() # equivalent to net.forward_all()
softmax_probabilities = net.blobs['prob'].data
La méthode backward()
est équivalente, si l'on s'intéresse au calcul des gradients.
Vous pouvez enregistrer les poids nets pour les réutiliser ultérieurement. C'est juste une question de
net.save('/path/to/new/caffemodel/file')
L'autre composant principal exposé par pycaffe est le Solver
. Il existe plusieurs types de solveurs, mais je vais utiliser uniquement SGDSolver
par souci de clarté. Il est nécessaire pour former un modèle Caffe. Vous pouvez instancier le solveur avec
solver = caffe.SGDSolver('/path/to/solver/prototxt/file')
Solver
encapsulera le réseau que vous formez et, s'il est présent, le réseau utilisé pour les tests. Notez qu'il s'agit généralement du même réseau, uniquement avec un autre Data Layer. Les réseaux sont accessibles avec
training_net = solver.net
test_net = solver.test_nets[0] # more than one test net is supported
Ensuite, vous pouvez effectuer une itération du solveur, c'est-à-dire une passe avant/arrière avec mise à jour du poids, en tapant simplement
solver.step(1)
ou exécutez le solveur jusqu'à la dernière itération, avec
solver.solve()
Notez que pycaffe vous permet de faire plus de choses, telles que en spécifiant l'architecture du réseau via une classe Python ou en créant un nouveau Layer type . Ces fonctionnalités sont moins souvent utilisées, mais elles sont assez faciles à comprendre en lisant les cas de test.
Veuillez noter que la réponse de Flavio Ferrara a un petit problème qui peut vous faire perdre beaucoup de temps:
net.blobs['data'].data[...] = my_image
net.forward()
Le code ci-dessus n'est pas efficace si votre première couche est une couche de type de données, car lorsque net.forward()
est appelée, elle commencera à partir de la première couche, puis vos données insérées my_image
Seront couvertes. Il ne montrera donc aucune erreur mais vous donnera une sortie totalement hors de propos. La bonne façon consiste à affecter les couches de début et de fin, par exemple:
net.forward(start='conv1', end='fc')
Voici un référentiel Github de Face Verification Experiment sur LFW Dataset, utilisant pycaffe et du code matlab. Je suppose que cela pourrait aider beaucoup, en particulier le fichier caffe_ftr.py
.
https://github.com/AlfredXiangWu/face_verification_experiment
En outre, voici quelques exemples de code d'utilisation de pycaffe pour la classification d'images:
http://codrspace.com/Jaleyhd/caffe-python-tutorial/http://prog3.com/sbdm/blog/u011762313/article/details/48342495