Многомерные данные этикетки в Caffe

Я планирую внедрить CNN, которая может оценивать глубину по отдельным изображениям, используя набор данных NYU depth v2. Прохождение учебника показало мне, что легко реализовать CNN, которая решает проблему классификации в Caffe. Мне любопытно, подходит ли Caffe для задачи, которая включает в себя многомерные основные истины (например, изображение глубины) и регрессию (оценка глубины).

Чего я хочу добиться, так это использовать изображения глубины в качестве наземных истин для обучения CNN, которая может оценивать изображения глубины. Мне нужно загрузить метки как данные одноканального изображения.

Я смог найти только этот ответ Шелхамера, который связан с моей проблемой https://groups.google.com/d/msg/caffe-users/JXmZrz4cCMU/mBTU1__ohg4J

Я понимаю, что я должен определить два верхних слоя, один для ввода, а другой для данных о глубине, как наземную правду. Затем я могу использовать слой потерь (например, EucledianLoss) для расчета потерь. Я добавил модель ниже.

Будет ли эта модель работать так, как задумано? Если нет, есть ли другой способ сделать это в Caffe?

layer {
  name: "data"
  type: "ImageData"
  top: "data" 
  image_data_param {
    source: "input_set.txt"
    batch_size: 50
  }
}

layer {
  name: "label"
  type: "ImageData"
  top: "label"
  image_data_param {
    source: "depth_set.txt"
    batch_size: 50
  }
  is_color: false
}

layer {
 name: "loss"
 type: "EuclideanLoss"
 bottom: "some_output_layer_name"
 bottom: "label"
 top: "loss"
}

person Yuqu    schedule 26.04.2016    source источник
comment
Вы добились своих результатов? Я пробовал то же самое. Но я не мог придумать сеть, которая решает мою проблему.   -  person    schedule 11.01.2017


Ответы (2)


Да, приведенная выше модель должна работать так, как вы ожидали. Просто убедитесь, что размеры some_output_layer_name BLOB-объекта такие же, как у label BLOB-объекта.

person Anoop K. Prabhu    schedule 27.04.2016

По-видимому, моя вышеуказанная модель была правильным способом запуска, но имеет некоторые проблемы. Если у вас есть метки в виде изображений, вы можете использовать слой ImageData, предоставленный в caffe. ImageData имеет 2 верхних слоя: первый — это фактические данные изображения, а второй — его «метка», которая представляет собой число (используется для простых задач классификации). В вашем исходном файле вы можете указать путь к данным вашей метки и поместить несколько произвольных «меток» и просто игнорировать их. ignored1 и ignored2 ниже соответствуют этим игнорируемым меткам.

layer {
  name: "data"
  type: "ImageData"
  top: "data"
  top: "ignored1"
  image_data_param {
    source: "path/to/data/data.txt"
    batch_size: 32
    new_height: 228
    new_width: 304
  }
}

# Label data
layer {
  name: "depth"
  type: "ImageData"
  top: "depth"
  top: "ignored2"
  image_data_param {
    is_color: false
    source: "path/to/data/labels.txt"
    batch_size: 32
    new_height: 55
    new_width: 74
  }
}

образец data.txt:

/path/to/your/data/1.png 0
/path/to/your/data/2.png 0
/path/to/your/data/3.png 0
...

Образец файла labels.txt:

/path/to/your/labels/1.png 0
/path/to/your/labels/2.png 0
/path/to/your/labels/3.png 0
...

В качестве альтернативы вы можете написать свой собственный слой Python для чтения данных изображения и метки. Вот пример слоя для чтения данных NYUDv2.

person Yuqu    schedule 28.11.2016