Повышение дискретизации в семантической сегментации с использованием расширенной свертки

Я работаю над проектом семантической сегментации с использованием расширенной (агрессивной) сверточной сети. Я использую caffe framework. Мои входные данные и размеры этикеток:

data (1 3 1158 1544 )
label (1 1 1158 1544)

Я использую softmax с потерями для оценки.

Сеть работает нормально, пока слой Softmax не потребует, чтобы оба входных блоба имели одинаковые размеры. Обычно в этой сети размер данных становится меньше, и мне нужно изменить их размер, прежде чем передавать их на уровень Softmax.

Мне нужны некоторые идеи, как изменить размер данных перед их подачей на слой softmax. Я знаю, что могу использовать деконволюцию с билинейной интерполяцией и сделать некоторую обрезку, но я не понимаю, как действовать дальше.

Любая помощь будет действительно оценена.

Последняя часть журналов приведена ниже:

I0413 11:44:45.734990 18455 net.cpp:84] Creating Layer ct_final
I0413 11:44:45.734992 18455 net.cpp:406] ct_final <- ct_fc1
I0413 11:44:45.734997 18455 net.cpp:380] ct_final -> score_fc1
I0413 11:44:45.736572 18455 net.cpp:122] Setting up ct_final
I0413 11:44:45.736582 18455 net.cpp:129] Top shape: 1 32 33 81 (85536)
I0413 11:44:45.736583 18455 net.cpp:137] Memory required for data: 5731224640
I0413 11:44:45.736588 18455 layer_factory.hpp:77] Creating layer deconv1_bilinear
I0413 11:44:45.736598 18455 net.cpp:84] Creating Layer deconv1_bilinear
I0413 11:44:45.736599 18455 net.cpp:406] deconv1_bilinear <- score_fc1
I0413 11:44:45.736604 18455 net.cpp:380] deconv1_bilinear -> score_deconv1
I0413 11:44:45.740128 18455 net.cpp:122] Setting up deconv1_bilinear
I0413 11:44:45.740137 18455 net.cpp:129] Top shape: 1 32 136 328 (1427456)
I0413 11:44:45.740139 18455 net.cpp:137] Memory required for data: 5736934464
I0413 11:44:45.740144 18455 layer_factory.hpp:77] Creating layer deconv2_bilinear
I0413 11:44:45.740151 18455 net.cpp:84] Creating Layer deconv2_bilinear
I0413 11:44:45.740154 18455 net.cpp:406] deconv2_bilinear <- score_deconv1
I0413 11:44:45.740160 18455 net.cpp:380] deconv2_bilinear -> score
I0413 11:44:45.743669 18455 net.cpp:122] Setting up deconv2_bilinear
I0413 11:44:45.743695 18455 net.cpp:129] Top shape: 1 32 548 1316 (23077376)
I0413 11:44:45.743697 18455 net.cpp:137] Memory required for data: 5829243968
I0413 11:44:45.743700 18455 layer_factory.hpp:77] Creating layer loss
I0413 11:44:45.743721 18455 net.cpp:84] Creating Layer loss
I0413 11:44:45.743723 18455 net.cpp:406] loss <- score
I0413 11:44:45.743727 18455 net.cpp:406] loss <- label
I0413 11:44:45.743731 18455 net.cpp:380] loss -> loss
I0413 11:44:45.743762 18455 layer_factory.hpp:77] Creating layer loss
F0413 11:44:45.778823 18455 softmax_loss_layer.cpp:47] Check failed:outer_num_ * inner_num_ == bottom[1]->count() (721168 vs. 1787952) Number of labels must match number of predictions; e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), label count (number of labels) must be N*H*W, with integer values in {0, 1, ..., C-1}.
*** Check failure stack trace: ***
    @     0x7f4ecd1215cd  google::LogMessage::Fail()
    @     0x7f4ecd123433  google::LogMessage::SendToLog()
    @     0x7f4ecd12115b  google::LogMessage::Flush()
    @     0x7f4ecd123e1e  google::LogMessageFatal::~LogMessageFatal()
    @     0x7f4ecd7bceb8  caffe::SoftmaxWithLossLayer<>::Reshape()
    @     0x7f4ecd7b10d7  caffe::Net<>::Init()
    @     0x7f4ecd7b380e  caffe::Net<>::Net()
    @     0x7f4ecd7414da  caffe::Solver<>::InitTrainNet()
    @     0x7f4ecd7429a5  caffe::Solver<>::Init()
    @     0x7f4ecd742cbf  caffe::Solver<>::Solver()
    @     0x7f4ecd786f11  caffe::Creator_AdamSolver<>()
    @           0x40a7d8  train()
    @           0x407568  main
    @     0x7f4ecb8b7830  __libc_start_main
    @           0x407e39  _start
    @              (nil)  (unknown)

Если вам, ребята, нужен train.prototxt, просто дайте мне знать.

Спасибо!!


person Kangkan Bharadwaj    schedule 13.04.2018    source источник


Ответы (1)


Деконволюция — это действительно обычный способ вернуться к исходному размеру входных данных после шагов свертки: это базовая архитектура нейронных сетей семантической сегментации: полностью сверточные сети (FCN).

Если вам нужны примеры того, как его использовать, загляните в этот репозиторий: он содержит много примеров FCN в Caffe, и они используют Deconvolution слоев Caffe. Кроме того, вы можете прочитать соответствующую статью для более подробных объяснений. деконволюции.

Обратите внимание, что Deconvolution не всегда является билинейной интерполяцией. Обычно он инициализируется интерполяцией, но затем изучается во время обучения (обратное распространение).

person MeanStreet    schedule 25.04.2018