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