Как реализовать модель скользящего окна в TF / Keras для сегментации изображения? - PullRequest
2 голосов
/ 24 февраля 2020

Я работаю над семантикой c сегментации изображения с моделями на основе U- net. Входные изображения имеют разные размеры (между 300-600 пикселей на каждой оси). До сих пор мой подход состоял в том, чтобы масштабировать изображения в стандартные затемнения и работать оттуда.

Теперь я хочу попробовать подход с скользящим окном, извлекая, например, 64x64 патчи из исходных изображений (без масштабирования), и обучать модель на этом. Я не уверен в том, как реализовать это эффективно.

Для фазы обучения у меня уже есть объект онлайн-дополнения (последовательность Кераса) для случайных преобразований. Должен ли я добавить процесс извлечения патча там? Если я сделаю это, я нарежу numpy массивы и получу их, и это звучит не очень эффективно. Есть ли лучший способ сделать это?

И для фазы прогнозирования, опять же - я должен извлечь патчи из изображений в numpy и передать их в модель? Если я выберу перекрывающийся windows (например, патч тускнеет 64x64 и шагает 32x32), должен ли я вручную (в numpy) взвешивать / усреднять / согласовывать необработанные прогнозы патчей из модели, чтобы вывести полномасштабную сегментацию? Или есть лучший способ справиться с этим?

Я использую TF 2.1 кстати. Любая помощь приветствуется.

1 Ответ

1 голос
/ 25 февраля 2020

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

Чтобы эффективно разбить изображение на небольшие участки, вы можете использовать:

skimage.util.view_as_windows(arr_in, window_shape, step=1)

Вы можете определить форму окна и шаг скользящего окна. Например:

>>> import numpy as np
>>> from skimage.util.shape import view_as_windows
>>> A = np.arange(4*4).reshape(4,4)
>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> window_shape = (2, 2)
>>> B = view_as_windows(A, window_shape)
>>> B[0, 0]
array([[0, 1],
       [4, 5]])
>>> B[0, 1]
array([[1, 2],
       [5, 6]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...