Feuille de sortingche pour caffe / pycaffe?

Est-ce que quelqu’un sait s’il existe un aide-mémoire pour toutes les commandes importantes de pycafé? J’étais jusqu’ici en utilisant caffe uniquement via l’interface Matlab et les scripts terminal + bash.

Je voulais passer à l’utilisation d’ipython et travailler sur les exemples de cahiers ipython. Cependant, j’ai du mal à avoir un aperçu de toutes les fonctions qui se trouvent dans le module caffe pour python. (Je suis aussi assez nouveau en python).

    Les tests de pycaffe et ce fichier constituent 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 respectivement caffe.set_mode_cpu() ou caffe.set_mode_gpu() .

    Net

    La principale classe que l’interface pycaffe expose est le Net . Il a deux constructeurs:

     net = caffe.Net('/path/prototxt/descriptor/file', caffe.TRAIN) 

    qui créent simplement un Net (dans ce cas, en utilisant la couche de données spécifiée 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 enregistrés dans le fichier caffemodel fourni – dans ce cas, en utilisant le calque de données spécifié pour le test.

    Un object Net possède plusieurs atsortingbuts et méthodes. Ils peuvent être trouvés ici . Je citerai seulement ceux que j’utilise plus souvent.

    Vous pouvez accéder aux blobs 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 parameters (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 de nourrir le net avec quelques données. Vous utiliserez donc backward() 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') 

    Solveur

    L’autre composante de base exposée par la pycafé 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') 

    Le Solver encapsulera le réseau que vous formez et, le cas échéant, le réseau utilisé pour les tests. Notez qu’ils sont généralement le même réseau, uniquement avec une couche de données différente. 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 de 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() 

    Autres caractéristiques

    Notez que pycaffe vous permet de faire plus de choses, par exemple en spécifiant l’architecture réseau via une classe Python ou en créant un nouveau type de couche . Ces fonctionnalités sont moins souvent utilisées, mais elles sont assez faciles à comprendre en lisant les scénarios de test.

    S’il vous plaît 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 premier calque est un calque de type Data, car lorsque net.forward() est appelé, il commence à partir du premier calque, puis vos données insérées my_image sont couvertes. Donc, il ne montrera aucune erreur mais vous donnera une sortie totalement inutile. La manière correcte consiste à affecter les calques de début et de fin, par exemple:

    net.forward(start='conv1', end='fc')

    Voici un repository Github de l’expérience de vérification du visage sur le jeu de données LFW, utilisant de la 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 la pycaffe pour la classification des images:

    http://codrspace.com/Jaleyhd/caffe-python-tutorial/ http://prog3.com/sbdm/blog/u011762313/article/details/48342495