У меня есть CNN, который я построил в TF, который занимает Input(shape = (1000,1000,5))
. Это потому, что изображение представляет собой стопку из 5 черно-белых изображений. Все мои образцы - аэрофотоснимки разных регионов, поэтому исходные изображения имеют разные размеры (и намного больше, чем 1000, 1000). Однако TF требует, чтобы все входные данные были одного и того же заранее определенного размера, поэтому мы решили вырезать 1000, 1000 из всех изображений.
Это, очевидно, теряет много полезной информации. Я ищу способы создания сети с динамической c формой ввода, которая могла бы принять все исходные изображения. Я нашел несколько предложений в Интернете, но я нахожу проблемы с каждым из них.
- Создание отдельного
Input()
для каждого размера изображения (скажем, у меня есть 2 типа размеров), которое затем можно свернуть в один и тот же тензор формы , Проблема в том, что это означает, что на один сверточный слой не повлияет половина наблюдений, что плохо (если я не пойму, как работает слой ниже). Например:
# a and b are fixed, different, image shapes
for image in inputs:
if image.shape == a:
x = Input(shape = a)
x = conv2d_transpose(output_shape = (1000, 1000, 5))
else:
y = Input(shape = b)
y = conv2d_transpose(output_shape = (1000, 1000, 5))
Использование Eager Execution. Здесь все примеры, которые я нахожу, все еще предназначены для фиксированной формы ввода, поэтому я не могу придумать, как использовать ее для перебора образцов и создания разных входных данных. Я нашел
эту тему , но ответивший сам ответил, и я не могу сказать, что понимаю, какое решение мне нужно. Изменение размеров изображений перед вводом. Это особенно плохая идея, потому что изменение размера искажает изображение и приводит к потере большого количества пространственных элементов, которые жизненно необходимы.
Любой вход (извините) приветствуется.