Для чего предназначен метод tf.extract_image_patches?
Я хочу разделить мои изображения на меньшие окна, которые будут отправлены в нейронную сеть для обучения (например, для обучения детекторов лица). я нашел tf.extract_image_patches
метод в Tensorflow, который показался мне именно тем, что мне нужно. Этот вопрос объясняет, что он делает.
Пример там показывает ввод (1x10x10x1)
(номера 1
через 100
по порядку) учитывая ksize
является (1, 3, 3, 1)
(а также strides
(1, 5, 5, 1)
). Выход такой:
[[[[ 1 2 3 11 12 13 21 22 23]
[ 6 7 8 16 17 18 26 27 28]]
[[51 52 53 61 62 63 71 72 73]
[56 57 58 66 67 68 76 77 78]]]]
Но я ожидаю, что окна, как это (по форме (Nx3x3x1)
так что это N
патчи / окна размера 3x3
):
[[[1, 2, 3]
[11, 12, 13]
[21, 22, 23]]
...
Так почему же все значения патчей хранятся в 1D? Означает ли это, что этот метод не предназначен для целей, которые я описал выше, и я не могу использовать его для подготовки партий к обучению? Я также нашел другой метод для извлечения патчей, sklearn.feature_extraction.image.extract_patches_2d
и этот действительно делает то, что я ожидал. Так я должен понимать, что эти два метода не делают одно и то же?
1 ответ
Правильно, эти функции возвращают разные тензоры (многомерные массивы).
Первый, tf.extract_image_patches
Документация гласит:
Возвращает:
Тензор. Имеет тот же тип, что и изображения. 4-D Тензор с формой
[batch, out_rows, out_cols, ksize_rows * ksize_cols * depth]
содержащие изображения патчи с размеромksize_rows x ksize_cols x depth
векторизация в измерении "глубина". Заметкаout_rows
а такжеout_cols
Размеры выходных патчей.
В основном это говорит о том, что [1, 2, 3]
, [11, 12, 13]
, [21, 22, 23]
окна сплющены или векторизованы в измерении "глубина". out_rows
а также out_cols
рассчитываются из strides
аргумент, который в этом случае strides=[1, 5, 5, 1]
и padding
, который 'VALID'
, В результате выходная форма (1, 2, 2, 9)
,
Другими словами:
strides
меняет пространственные размерыksizes
меняет глубину
Обратите внимание, что тензор вывода содержит все отдельные окна, поэтому вы можете получить к ним доступ через выбор.
С другой стороны, sklearn.feature_extraction.image.extract_patches_2d
:
Возвращает:
patches
: массив, форма =(n_patches, patch_height, patch_width)
или же(n_patches, patch_height, patch_width, n_channels)
Коллекция патчей извлечена из изображения, гдеn_patches
либоmax_patches
или общее количество исправлений, которые можно извлечь.
Это именно то, что вы описываете: каждое окно принимает все пространственные измерения patch_height, patch_width
, Здесь форма результата зависит от patch_size
Разметка и отступы не поддерживаются, и первое измерение вычисляется как общее количество исправлений.