Hoja de trucos para caffe / pycaffe?


¿Alguien sabe si hay una hoja de trucos para todos los comandos importantes de pycaffe? Hasta ahora estaba usando caffe solo a través de la interfaz de Matlab y los scripts de terminal + bash.

Quería cambiar hacia el uso de ipython y trabajar a través de los ejemplos de notebook de ipython. Sin embargo, me resulta difícil obtener una visión general de todas las funciones que están dentro del módulo caffe para python. (También soy bastante nuevo en python).

Author: mcExchange, 2015-09-03

2 answers

Las pruebas de pycaffe y este archivo son la puerta de enlace principal a la interfaz de codificación de python.

En primer lugar, le gustaría elegir si desea usar Caffe con CPU o GPU. Basta con llamar a caffe.set_mode_cpu() o caffe.set_mode_gpu(), respectivamente.

Net

La clase principal que expone la interfaz pycaffe es la Net. Tiene dos constructores:

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

Que simplemente crea un Net (en este caso utilizando la Capa de datos especificada para formación), o

net = caffe.Net('/path/prototxt/descriptor/file', '/path/caffemodel/weights/file', caffe.TEST)

Que crea un Net y carga automáticamente los pesos guardados en el archivo caffemodel proporcionado, en este caso utilizando la capa de datos especificada para la prueba.

Un objeto Net tiene varios atributos y métodos. Se pueden encontrar aquí. Citaré solo los que uso más a menudo.

Puedes acceder a los blobs de red mediante Net.blobs. Por ejemplo,

data = net.blobs['data'].data
net.blobs['data'].data[...] = my_image
fc7_activations = net.blobs['fc7'].data

También puede acceder a los parámetros (pesos) , de una manera similar. Por ejemplo,

nice_edge_detectors = net.params['conv1'].data
higher_level_filter = net.params['fc7'].data

Ok, ahora es el momento de alimentar la red con algunos datos. Entonces, usarás backward() y forward() métodos. Por lo tanto, si desea clasificar una sola imagen

net.blobs['data'].data[...] = my_image
net.forward() # equivalent to net.forward_all()
softmax_probabilities = net.blobs['prob'].data

El método backward() es equivalente, si uno está interesado en calcular gradientes.

Puede guardar los pesos netos para reutilizarlos posteriormente. Es solo una cuestión de

 net.save('/path/to/new/caffemodel/file')

Solucionador

El otro componente central expuesto por pycaffe es el Solver. Hay varios tipos de solucionador, pero voy a usar solo SGDSolver en aras de la claridad. Es necesario para entrenar un modelo caffe. Puede instanciar el solucionador con

solver = caffe.SGDSolver('/path/to/solver/prototxt/file')

El Solver encapsulará la red que está entrenando y, si está presente, la red utilizada para las pruebas. Tenga en cuenta que generalmente son la misma red, solo que con una Capa de datos diferente. Las redes son accesibles con

 training_net = solver.net
 test_net = solver.test_nets[0] # more than one test net is supported

Entonces, puede realizar una iteración del solucionador, es decir, un avance / retroceso pase con actualización de peso, escribiendo solo

 solver.step(1)

O ejecute el solucionador hasta la última iteración, con

 solver.solve()

Otras características

Tenga en cuenta que pycaffe le permite hacer más cosas, como especificar la arquitectura de red a través de una clase Python o crear una nueva capa tipo. Estas características se utilizan con menos frecuencia, pero son bastante fáciles de entender al leer los casos de prueba.

 95
Author: Flavio Ferrara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 18:16:05

Tenga en cuenta que la respuesta de Flavio Ferrara tiene un pequeño problema que puede hacer que pierda mucho tiempo:

net.blobs['data'].data[...] = my_image
net.forward()

El código anterior no es efectivo si su primera capa es una capa de tipo de datos, porque cuando se llama net.forward(), comenzará desde la primera capa, y luego se cubrirán sus datos insertados my_image. Por lo tanto, no mostrará ningún error, pero le dará una salida totalmente irrelevante. La forma correcta es asignar la capa inicial y final, por ejemplo:

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

Aquí hay un Github repositorio del Experimento de Verificación de rostros en el conjunto de datos LFW, utilizando pycaffe y algún código matlab. Supongo que podría ayudar mucho, especialmente el archivo caffe_ftr.py.

Https://github.com/AlfredXiangWu/face_verification_experiment

Además, aquí hay un código de ejemplo corto de uso de pycaffe para la clasificación de imágenes:

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

 10
Author: yi-ji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-18 04:50:41