Tensorflow Keras: теперь слои `Conv2d` могут принимать многоспектральные изображения, то есть полосы больше 3 - PullRequest
0 голосов
/ 21 марта 2019

У меня есть несколько 8-полосных спутниковых снимков, и я хотел бы выполнить некоторую сегментацию изображений с помощью Tensorflow и Keras.Я пытался сделать это пару лет назад, но увидел, что TF и Keras не могут обрабатывать изображения с полосами больше 3. Однако я вижу больше постов в блоге о глубоком обучении с многоканальными изображениями.

При просмотре документации Keras в ней не указано конкретно никаких проблем с приемом многополосных изображений.И я нашел этот код , который, кажется, заставляет его работать:

def unet_model(n_classes=5, im_sz=320, n_channels=8, n_filters_start=32, growth_factor=2, upconv=True,
               class_weights=[0.2, 0.3, 0.1, 0.1, 0.3]):
    droprate=0.25
    n_filters = n_filters_start
    inputs = Input((im_sz, im_sz, n_channels))
    #inputs = BatchNormalization()(inputs)
    conv1 = Conv2D(n_filters, (3, 3), activation='relu', padding='same')(inputs)
    conv1 = Conv2D(n_filters, (3, 3), activation='relu', padding='same')(conv1)
    pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
pool1 = Dropout(droprate)(pool1)

Итак, просто хотел уточнить, могут ли слои tf.keras.Conv2d и другие слои принимать 8 или более полосных изображений сейчас?Существуют ли подводные камни при использовании многополосных изображений - например, необходимы некоторые преобразования данных перед обработкой.Существуют ли какие-либо ограничения на использование многоспектральных изображений?

1 Ответ

1 голос
/ 21 марта 2019

Да, можно принять более 8 каналов. Оба слоя - Keras и TensorFlow. Основная проблема с изображениями, имеющими более 3 каналов, заключается в том, что большинство легкодоступных предварительно обученных моделей были обучены по стандартным измерениям imagenet, например [299,299,3]. В этом случае для точной настройки такой модели потребуется значительный объем работы. ваши данные. В качестве решения этой проблемы вы можете вставить специальный сверточный слой с изменением размера, который изменит его на 3 слоя.

inputs = tf.keras.layers.Input(shape=(320,320,8)) 
resize = tf.keras.layers.Conv2D(filters=3, kernel_size)(inputs)

Это, однако, может привести к некоторой потере данных, поэтому следует использовать с осторожностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...