I am trying to count objects in an image using Alexnet.
I have images containing 1, 2, 3 or 4 objects per image. For initial verification, I have 10 images for each class. For example, in a training set, I have:
image label image1 1 image2 1 image3 1 ... image39 4 image40 4
I used imagenet to create a script file to create an lmdb file for this dataset. Which successfully converted my image set to lmdb. As an example, Alexnet is converted to a regression model to examine the number of objects in an image by introducing EucledeanLosslayer instead of Softmax Layer. As many believe. The rest of the network is the same.
However, despite all of the above, when I run the model, I received only zeros as the result at the testing stage (shown below). He did not know anything. However, learning loss was constantly decreasing at each iteration.
I donβt understand what mistakes I made. Can someone explain to me why the predicted values ββare always 0? And how can I check the regressed values ββat the testing stage to check how many samples are correct and what is the value for each of my images?
The predicted and actual label of the test data set is specified as:
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
Note. I also created hdf5 files to have floating labels, i.e. 1.0, 2.0, 3.0 and 4.0. However, when I changed the data level to type HDF5, I can not crop the image to increase data as performed in alexnet with the lmdb level, as well as normalization. I used the script specified at https://github.com/nikogamulin/caffe-utils/blob/master/hdf5/demo.m "for hdf5 data and followed its steps to use it in my model.
I updated the last layers as such:
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" }