ipython-notebook caffe pycaffe

ipython notebook - Hoja de trucos para caffe/pycaffe?



ipython-notebook (2)

¿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 Matlab y los scripts terminal + bash.

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


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

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

Red

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

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

que simplemente crea una Net (en este caso usando la capa de datos especificada para el entrenamiento), o

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

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

Un objeto Net tiene varios atributos y métodos. Ellos pueden ser encontrados here . Citaré solo los que uso más a menudo.

Puede acceder a los blobs de red mediante Net.blobs . P.ej

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 forma similar. P.ej

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

Bien, ahora es el momento de alimentar la red con algunos datos. Por lo tanto, usará métodos backward() y forward() . Entonces, si quieres 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'')

Solver

El otro componente central expuesto por pycaffe es el Solver . Hay varios tipos de solucionador, pero solo voy a usar SGDSolver por motivos de claridad. Es necesario para entrenar un modelo de 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

Luego, puede realizar una iteración de solucionador, es decir, un pase adelante / atrás 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 de Python o crear un nuevo tipo de capa . Estas características se utilizan con menos frecuencia, pero son bastante fáciles de entender al leer los casos de prueba.


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 a net.forward() , comenzará desde la primera capa, y luego se my_image datos insertados my_image . Por lo tanto, no mostrará ningún error, pero le dará un resultado totalmente irrelevante. La forma correcta es asignar la capa de inicio y final, por ejemplo:

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

Aquí hay un repositorio de Github del Experimento de Verificación Facial en LFW Dataset, usando pycaffe y algún código de 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 breve código de ejemplo 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