Я думаю, что вы можете успешно использовать механизм объединения, например функцию, предоставляемую tensorflow
(в моем случае версия 2.1), посмотрите на tf
функцию пула . Таким образом, в окне размером (4,4,4)
вы можете взять максимум или среднее значение.
Пример (обратите внимание, что вам следует изменить форму входной матрицы, добавив размер по оси 0):
@tf.function
def get_local_maxima(X):
#X has shape (1, 256,256,256)
out = tf.nn.pool(X, window_shape=(4,4,4), pooling_type='MAX', padding='VALID')
return out
Обратите внимание, что вы можете изменить pooling_type
на 'AVG'
, чтобы применить среднее значение в пределах окна. Результат будет иметь форму (1, 64,64,64)
, поэтому вам нужно снова преобразовать форму в 3D-матрицу, вы можете просто использовать:
out = tf.squeeze(out)