Я использую Caffe (http://caffe.berkeleyvision.org/) для классификации изображений. Я использую его в Windows, и все, кажется, компилируется просто отлично.
Чтобы начать обучение, я следовал руководству MNIST (http://caffe.berkeleyvision.org/gathered/examples/mnist.html). Я загрузил данные и запустил ..\caffe.exe train --solver=...examples\mnist\lenet_solver.prototxt. Он выполнил 10 000 итераций, вывел точность 98,5 и сгенерировал два файла: lenet_iter_10000.solverstate и lenet_iter_10000.caffemodel.
Итак, я подумал, что было бы забавно попытаться классифицировать собственное изображение, но это должно быть легко, верно?
Я могу найти такие ресурсы как: https://software.intel.com/en-us/articles/training-and-deploying-deep-learning-networks-with-caffe-optimized-for-intel-архитектура#Примеры, рассказывающие, как подготовить, обучить и рассчитать время моей модели. Но каждый раз, когда в учебнике/статье речь идет о размещении одного экземпляра в CNN, они переходят к следующему пункту и предлагают загрузить какую-то новую модель. Некоторые ресурсы советуют использовать classifier.bin/.exe, но этот файл использует imagenet_mean.binaryproto или аналогичный для mnist. Я понятия не имею, где найти или сгенерировать этот файл.
Итак, вкратце: когда я обучил CNN с помощью Caffe, как мне ввести одно изображение и получить результат, используя уже имеющиеся у меня файлы?
Обновление: основываясь на справке, я заставил сеть распознавать изображение, но распознавание было неправильным, даже если сеть имела точность 99,0%. Я использовал следующий код Python для распознавания изображения:
NET_FILE = 'deploy.prototxt'
MODEL_FILE = 'lenet_iter_10000.caffemodel'
net = caffe.Net(NET_FILE, MODEL_FILE, caffe.TEST)
im = Image.open("img4.jpg")
in_ = np.array(im, dtype=np.float32)
net.blobs['data'].data[...] = in_
out = net.forward() # Run the network for the given input image
print out;
Я не уверен, правильно ли я отформатировал изображение для примера MNIST. Изображение представляет собой изображение в градациях серого 28x28 с базовым значением 4. Нужно ли мне выполнять дополнительные преобразования изображения?
Сеть (развертывание) выглядит так (начало и конец):
input: "data"
input_shape {
dim: 1 # batchsize
dim: 1 # number of colour channels - rgb
dim: 28 # width
dim: 28 # height
}
....
layer {
name: "loss"
type: "Softmax"
bottom: "ip2"
top: "loss"
}