2016-12-01 2 views
0

У меня есть и изображение как входное и изображение как ground_truth. Мой последний слой - это EuclideanLoss, где последний слой convolutional имеет num_output = 1, чтобы рассчитать потерю между этими двумя изображениями.caffe: Как интерпретировать EuclideanLoss (пиксельная регрессия)

При тестировании сети с моим deploy.prototxt я опуская EuclideanLoss слойный, что означает, что мои последние слои являются Convolutional слой с последующим Relu слоем. Как я должен интерпретировать значения, когда я получить их с помощью Python, как:

pred = net.forward() 

output_blob = pred['result'] 

output_blob имеет Шап 1xheightxwidth, но значения не находятся в определенном диапазоне. Они могут быть даже отрицательными. Как получить правильные значения для создания изображения? Или как мне интерпретировать эти ценности? Должен ли я извлекать их из входного изображения или как я должен их обрабатывать?

+1

Как значения output_blob могут быть отрицательными, так как это результат уровня ReLU? – Dale

+0

Из-за этого: 'relu_param {negative_slope: 0.01}'. @Dale – thigi

+0

Какова ваша цель? Что вы пытаетесь реализовать? – malreddysid

ответ

1

Если вы знаете, что ваш вывод должен быть не отрицательным, зачем использовать ReLU с отрицательным наклоном ?, я бы изменил его для обычного слоя ReLU. Затем, после того, как с помощью вперед(), вы должны получить выходные данные, как это:

output_data=output_blob.data[...] 

, что выход может иметь форму как Batch, nchannels, H, W. Вы можете использовать output_data=np.squeeze (output_data) , чтобы иметь выход в виде 2D-матрицы.

EDIT: Способ интерпретации последних значений слоя будет состоять в том, что именно изображение является самым близким (с точки зрения расстояния L2) к оценкам глубины, наблюдаемым во время обучения для данного входа.

+0

Хорошо, у меня есть несколько слоев ReLU. Достаточно ли просто изменить последний слой ReLU или мне нужно изменить все из них? И другой вопрос: почему это проблема, что значения отрицательны? Я имею в виду, даже когда у меня есть 2D-матрица Я все еще не знаю, как интерпретировать ценности? – thigi

+0

Должно быть хорошо сменить только последний слой. После обучения, когда вы тестируете новое входное изображение, для которого вы не указываете метку (глубина), последний уровень - это фактически оценка глубины, то есть каждое значение в матрице 2d будет представлять глубину соответствующего пикселя. Вот почему наличие отрицательных глубин не имеет смысла. Кроме того, если все ваши оценки глубины должны быть в диапазоне [0,1], вы можете использовать сигмоид вместо ReLU для обеспечения правильного диапазона. –

+0

Хорошо, да, я меняю значения с [0, 255] в начале, так как это значения из png в [0, 1], а затем я снова конвертирую их в [0, 255]. Я попытаюсь использовать слой «Sigmoid», а затем 2D-матрицу следует умножить на 255, а reuslt должен быть оцененными значениями глубины? – thigi