Spec-Zone.ru › TensorFlow

tf.image.extract_patches

Извлекает patches из images.

tf.image.extract_patches(
    images, sizes, strides, rates, padding, name=None
)

Эта операция собирает фрагменты из входного изображения, как при применении свёртки. Все извлечённые фрагменты объединяются в глубине (последнем измерении) выходного тензора.

В частности, операция извлекает фрагменты формы sizes, расположенные на расстоянии strides друг от друга во входном изображении. Выходной тензор прореживается с использованием аргумента rates, как при применении свёрток с пропусками («атрусных» или дилатированных свёрток).

Результат — это 4D-тензор, индексируемый по пакету, строке и столбцу. output[i, x, y] содержит развёрнутый фрагмент размера sizes[1], sizes[2], взятый из входных данных начиная с images[i, x*strides[1], y*strides[2]].

Каждый выходной фрагмент можно преобразовать в форму sizes[1], sizes[2], depth, где depth — это images.shape[3].

Элементы выходных данных берутся из входных данных с интервалами, заданными аргументом rate, как и в дилатированных свёртках.

Аргумент padding не влияет на размер каждого фрагмента, а определяет, сколько фрагментов будет извлечено. Если VALID, включаются только фрагменты, целиком расположенные внутри входного изображения. Если SAME, включаются все фрагменты, начальная точка которых находится внутри входных данных, а области за их пределами заполняются нулями.

Пример:

n = 10
# images is a 1 x 10 x 10 x 1 array that contains the numbers 1 through 100
images = [[[[x * n + y + 1] for y in range(n)] for x in range(n)]]

# We generate two outputs as follows:
# 1. 3x3 patches with stride length 5
# 2. Same as above, but the rate is increased to 2
tf.image.extract_patches(images=images,
                         sizes=[1, 3, 3, 1],
                         strides=[1, 5, 5, 1],
                         rates=[1, 1, 1, 1],
                         padding='VALID')

# Yields:
[[[[ 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]]]]

Если отметить пиксели входного изображения, используемые для выходных данных, символом *, получится следующий рисунок:

 *  *  *  4  5  *  *  *  9 10
 *  *  * 14 15  *  *  * 19 20
 *  *  * 24 25  *  *  * 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
 *  *  * 54 55  *  *  * 59 60
 *  *  * 64 65  *  *  * 69 70
 *  *  * 74 75  *  *  * 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
tf.image.extract_patches(images=images,
                         sizes=[1, 3, 3, 1],
                         strides=[1, 5, 5, 1],
                         rates=[1, 2, 2, 1],
                         padding='VALID')

# Yields:
[[[[  1   3   5  21  23  25  41  43  45]
   [  6   8  10  26  28  30  46  48  50]]

  [[ 51  53  55  71  73  75  91  93  95]
   [ 56  58  60  76  78  80  96  98 100]]]]

Эффект можно изобразить ещё раз, на этот раз используя символы *, x, + и o, чтобы различать фрагменты:

 *  2  *  4  *  x  7  x  9  x
11 12 13 14 15 16 17 18 19 20
 * 22  * 24  *  x 27  x 29  x
31 32 33 34 35 36 37 38 39 40
 * 42  * 44  *  x 47  x 49  x
 + 52  + 54  +  o 57  o 59  o
61 62 63 64 65 66 67 68 69 70
 + 72  + 74  +  o 77  o 79  o
81 82 83 84 85 86 87 88 89 90
 + 92  + 94  +  o 97  o 99  o
Аргументы
images 4D-тензор формы [batch, in_rows, in_cols, depth].
sizes Размер извлекаемых фрагментов. Должен быть [1, size_rows, size_cols, 1].
strides 1D-тензор длины 4. Расстояние между центрами двух последовательных фрагментов в изображениях. Должен быть: [1, stride_rows, stride_cols, 1].
rates 1D-тензор длины 4. Должен быть: [1, rate_rows, rate_cols, 1]. Это шаг во входных данных, задающий расстояние между двумя последовательными точками выборки фрагмента во входных данных. Эквивалентно извлечению фрагментов с помощью patch_sizes_eff = patch_sizes + (patch_sizes - 1) * (rates - 1) с последующим пространственным прореживанием с коэффициентом rates. Это соответствует rate в дилатированных (также называемых атрусными) свёртках.
padding Алгоритм заполнения отступов.
name Имя операции (необязательно).
Возвращаемое значение
4D-тензор того же типа, что и входной тензор.

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/image/extract_patches

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API