Как протянуть нейронную сеть через изображение с тензорным потоком? - PullRequest
0 голосов
/ 21 ноября 2018

Мой вопрос касается поиска эффективного (в основном с точки зрения подсчета параметров) способа реализации скользящего окна в тензорном потоке (1.4) для применения нейронной сети через изображение и создания двумерной карты с каждым пикселем (или регион), представляющий сетевой вывод для соответствующего восприимчивого поля (которое в данном случае является самим скользящим окном).

На практике я пытаюсь реализовать либо MTANN , либо PatchGAN с использованием тензорного потока, но я не могу понять реализацию, которую я нашел.

Две архитектуры можно кратко описать как:

  • MTANN: линейныйнейронная сеть с входным размером [1, N, N, 1] и выходным размером [] применяется к изображению размером [1, M, M, 1] для создания карты размера [1, G, G, 1], в котором каждый пиксель сгенерированной карты соответствует вероятности того, что соответствующий патч NxN будет принадлежать определенному классу.

  • PatchGAN Discriminator: Более общая архитектура, как я могу пристоять сеть, которая проходит через изображение выводит саму карту вместо одного значения, которое затем объединяется со смежными картами для получения окончательной карты.

Хотя я не могу найти тензор потокаПри реализации MTANN я обнаружил реализацию PatchGAN , которая рассматривается как сверточная сеть , но я не мог понять, как реализовать это на практике.

Допустим, я получил предварительно обученную сеть, из которой получил выходной тензор.Я понимаю, что свертка - это путь, поскольку сверточный слой работает над локальной областью ввода, и то, что я пытаюсь сделать, может быть четко представлено как сверточная сеть.Однако что, если у меня уже есть сеть, которая генерирует подкарты из заданного окна фиксированного размера?

Например, я получил тензор

sub_map = network(input_patch)

, который возвращает [1,2,2,1] карты из изображения [1,8,8,3] (соответствует 3-х слойному FCN с размером входа 8, размером фильтра 3x3).Как можно развернуть эту сеть на [1,64,64,3] изображениях, чтобы получить карту [1,64,64,1], составленную из каждого пространственного вклада, как это происходит в свертке?

Я рассмотрел следующие решения:

  • Использование tf.image.extract_image_patches, которое явно извлекает все патчи и каналы изображения в измерении глубины, но я думаю, что это потребует слишком много ресурсов, так какЯ переключаюсь на PatchGAN Discriminator из полностью сверточной сети из-за ограничений памяти - также состав финальной карты не так прост.

  • Добавление сверточного слоя перед сетью, которую я получил, но я не могу понять, каким должен быть фильтр (и его размер) в этом случае, чтобы сохранить работу предварительно подготовленной модели на 8x8изображения при интеграции его в модель, которая работает с большими изображениями.Для того, что я могу получить, это должно быть что-то вроде whole_map = tf.nn.convolution(input=x64_images, filter=sub_map, ...), но я не думаю, что это сработает, поскольку фильтр является оператором, который зависит от самого рецептивного поля.

ОкончательныйЦель состоит в том, чтобы эффективно применить эту маленькую сеть к большим изображениям (например, 1024x1024), поскольку моя текущая модель постепенно уменьшает изображения и не помещается в памяти из-за огромного количества параметров.

Может кто-нибудь помочь мне лучше понять, чего мне не хватает?

Спасибо

1 Ответ

0 голосов
/ 28 ноября 2018

Я нашел интересное видео Эндрю Нга, в котором рассказывается, как реализовать скользящее окно с использованием сверточного слоя.Проблема заключалась в том, что я думал о количестве слоев как о переменной, которая зависит от фиксированной формы ввода / вывода, хотя она должна быть противоположной.

В принципе, сохраненная модель должна содержать толькоизученные фильтры для каждого уровня и до тех пор, пока формы фильтров совместимы с глубиной ввода / вывода слоев.Таким образом, применение другого (т. Е. Большего) пространственного разрешения к сетевому входу приводит к другой форме вывода, что можно рассматривать как применение нейронной сети к скользящим окнам, проходящим по входному изображению.

...