Probar una red de regresión en caffe

Estoy tratando de contar objetos en una imagen usando Alexnet.

Actualmente tengo imágenes que contienen 1, 2, 3 o 4 objetos por imagen. Para el chequeo inicial, tengo 10 imágenes por clase. Por ejemplo, en el conjunto de entrenamiento tengo:

image  label
image1  1
image2  1
image3  1
...
image39 4
image40 4

Utilicé el script de creación de imagenet para crear un archivo lmdb para este conjunto de datos. Que convirtió con éxito mi conjunto de imágenes a lmdb. Alexnet, como ejemplo, se convierte en un modelo de regresión para aprender la cantidad de objetos en la imagen al introducir EucledeanLosslayer en lugar de Softmax Layer. Según lo sugerido por muchos. El resto de la red es igual.

Sin embargo, a pesar de hacer todo lo anterior, cuando ejecuté el modelo, recibí solo ceros como salida durante la fase de prueba (que se muestra a continuación). No aprendió nada. Sin embargo, la pérdida de entrenamiento disminuyó continuamente en cada iteración.

No entiendo qué errores he cometido. ¿Alguien puede guiarme por qué los valores predichos son siempre 0? ¿Y cómo puedo verificar los valores regresados en la fase de prueba, para verificar cuántas muestras son correctas y cuál es el valor de cada una de mis imágenes?

La etiqueta pronosticada y real del conjunto de datos de prueba se proporciona como:

I0928 17:52:45.585160 18302 solver.cpp:243] Iteration 1880, loss = 0.60498
I0928 17:52:45.585212 18302 solver.cpp:259]     Train net output #0: loss = 0.60498 (* 1 = 0.60498 loss)
I0928 17:52:45.585225 18302 solver.cpp:592] Iteration 1880, lr = 1e-06
I0928 17:52:48.397922 18302 solver.cpp:347] Iteration 1900, Testing net (#0)
I0928 17:52:48.499543 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 1
I0928 17:52:48.499641 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 2
I0928 17:52:48.499660 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 3
I0928 17:52:48.499681 18302 accuracy_layer.cpp:88] Predicted_Value: 0 Actual Label: 4
...

Nota: También creé archivos en formato hdf5 para tener etiquetas flotantes, es decir, 1.0, 2.0, 3.0 y 4.0. Sin embargo, cuando cambié la capa de datos al tipo HDF5, no puedo recortar la imagen para el aumento de datos como se hace en alexnet con la capa lmdb, así como la normalización. Usé el script dado en "https://github.com/nikogamulin/caffe-utils/blob/master/hdf5/demo.m"para los datos hdf5 y seguí sus pasos para usarlos en mi modelo.

He actualizado las últimas capas como tal:

layer {
   name: "fc8reg"
   type: "InnerProduct"
   bottom: "fc7"
   top: "fc8reg"
   param {
    lr_mult: 1
    decay_mult: 1
   }
   param {
     lr_mult: 2
     decay_mult: 0
   }
   inner_product_param {
   num_output: 1
   weight_filler {
       type: "gaussian"
       std: 0.01
   }
   bias_filler {
       type: "constant"
       value: 0
   }
   }
 }
 layer {
   name: "accuracy"
   type: "Accuracy"
   bottom: "fc8reg"
   bottom: "label"
   top: "accuracy"
   include {
     phase: TEST
   }
 }
 layer {
   name: "loss"
   type: "EuclideanLoss"
   bottom: "fc8reg"
   bottom: "label"
   top: "loss"
 }

Respuestas a la pregunta(2)

Su respuesta a la pregunta