Caffe - MNSIT - Как использовать сеть на одном изображении?

Я использую 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"
}

person MortenGR    schedule 10.10.2016    source источник


Ответы (2)


Если я правильно понимаю вопрос, у вас есть обученная модель, и вы хотите протестировать модель, используя свои собственные входные изображения. Есть много способов сделать это.

Один из методов, который я обычно использую, — запустить скрипт Python, аналогичный тому, что у меня есть здесь.

Просто имейте в виду, что вам нужно собрать python в кафе, используя make pycaffe, и указать папку, отредактировав строку sys.path.append('../../../python')

Также отредактируйте следующие строки в именах файлов вашей модели.

NET_FILE = 'deploy.prototxt'
MODEL_FILE = 'fcn8s-heavy-pascal.caffemodel'

Отредактируйте следующую строку. Вместо оценки вы должны использовать последний слой вашей сети, чтобы получить результат.

out = net.blobs['score'].data
person malreddysid    schedule 10.10.2016
comment
Спасибо. У меня включен python, и он, кажется, работает. Завтра проверю ваш подход :) - person MortenGR; 10.10.2016
comment
Смотрите обновление, у вас есть идеи, почему оно не работает? - person MortenGR; 14.10.2016

Вам нужно создать файл deploy.prototxt из исходного файла network.prototxt. Слой данных должен выглядеть так:

input: "data"
input_shape {
  dim: 1
  dim: [channles]
  dim: [width]
  dim: [height]
}

где вы заменяете [каналы], [ширину] и [высоту] правильными значениями вашего изображения.

Вам также необходимо удалить все слои, которые получают «метку» в качестве нижнего входа (обычно это будет только ваш слой потерь).

Затем вы можете использовать этот файл deploy.prototxt для проверки ваших входных данных с помощью MATLAB или PYTHON.

person AHA    schedule 11.10.2016
comment
Смотрите обновление, у вас есть идеи, почему оно не работает? - person MortenGR; 14.10.2016
comment
Прочитайте изображение с помощью caffe.io.load_image. Я считаю, что caffe транспонирует изображение при его загрузке. Или попробуйте транспонировать свое изображение перед отправкой в ​​​​сеть. - person AHA; 14.10.2016