Изменение формы входного слоя на один канал и несколько изображений - PullRequest
0 голосов
/ 05 июля 2018

В некотором коде, который я взял, есть:

net_->input_blobs()[0]->Reshape(1, 3, height, width);

Мой prototxt имеет:

input_shape {
    dim: 1
    dim: 3
    dim: 260
    dim: 347
}

Мне косвенно сообщили, что предоставленная модель была настроена для оттенков серого (у нас есть и цвет, и шкала серого prototxt), и используемый в настоящее время код Python использует ввод в оттенках серого с тремя одинаковыми каналами.

Теперь я хочу выполнить обе или по отдельности обработку 4 изображений за один вызов net_->Forward(); и передать эти четыре изображения как одноканальную шкалу серого. Итак, сначала выбираем один канал:

net_->input_blobs()[0]->Reshape(1, 1, height, width);

Каковы последствия изменения количества каналов? Как реагируют все мои слои? Это будет работать? Если это работает, будет ли одноканальная сеть быстрее?

Во-вторых, выбирая четыре изображения:

net_->input_blobs()[0]->Reshape(4, 3, height, width);

У меня такое чувство, что оно не сработает, и я должен смотреть на увеличение числа input_blobs, но как это сделать? Или каков правильный подход?

1 Ответ

0 голосов
/ 05 июля 2018
  1. работа с одним каналом, а не с тремя идентичными, должна выполняться быстрее (меньше операций сложения-умножения). Так как это делается в наилучшем масштабе, это может даже оказать заметное влияние на время выполнения.

  2. Подача 4 изображений в виде одного пакета обычно выполняется быстрее, чем обработка каждого изображения в отдельности в виде пакета с одним изображением (из-за внутренней оптимизации вычислений для работы с пакетами).

Итог: вы должны улучшить время выполнения, запустив один пакет из четырех изображений. Если на входе три одинаковых канала - лучше модифицировать модель для работы только с одним.

...