Хобрук: Ваш путь к мастерству в программировании

Tensorflow Keras: могут ли слои Conv2d теперь принимать мультиспектральные изображения, что означает полосы больше 3

У меня есть несколько 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 или более изображений полос? Существуют ли какие-либо подводные камни при использовании многоканальных изображений, например необходимость некоторых преобразований данных перед обработкой? Существуют ли какие-либо ограничения на использование мультиспектральных изображений?


  • Вы ошибаетесь, слои Keras Conv2D всегда могли обрабатывать многоканальные данные, это основное свойство CNN. 21.03.2019
  • @MatiasValdenegro О, это здорово. По какой-то причине у меня было в голове, что Керас не может этого сделать, но спасибо, что поставили меня на место. Знаете ли вы какие-либо хорошие примеры или документацию по использованию мультиспектральных данных? Нужно ли мне делать что-то отличное от обычного? Я предполагаю, что если форма тензора изображения будет правильной, она должна работать правильно. 21.03.2019

Ответы:


1

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

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

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

21.03.2019
  • Хорошо, так что это имеет гораздо больше смысла. Я изучал его пару лет назад, и то, что вы говорите, звучит знакомо. Часть трансферного обучения была проблемой. Фу, большое спасибо. Итак, пока я правильно помещаю тензор изображения в слой, он должен работать. 21.03.2019
  • Кроме того, если я обучаю мультиспектральные данные, мне не нужно помещать изображения в обычный целочисленный диапазон PNG между [0,255] справа, тем более что я все равно не могу использовать предварительно обученные данные imagenet. Или я мог бы использовать веса imagenet для начала и в то же время сохранить больший целочисленный диапазон (u16) файлов TIFF и т. д. 21.03.2019
  • Нормализация в любом случае полезна, кроме того, вы можете использовать предварительно обученные модели, вам просто нужно сделать размеры равными. Другой подход заключается в создании отдельных сетей для разных каналов ваших данных или параллельном объединении нескольких предварительно обученных слоев преобразования. Попробуйте разные подходы и посмотрите, что работает. И не забывайте об увеличении данных. Если у вас есть как минимум 10К изображений и нет большого дисбаланса классов, вы можете попробовать тренироваться с нуля, просто выбрав правильную сетевую архитектуру. 21.03.2019
  • Спасибо большое. @Акула. Да, я обязательно попробую варианты, которые вы предложили. Я действительно просто пытался понять, что возможно под капотом keras и tensorflow. Я все еще только привыкаю к ​​кодированию тензорного потока, и в некоторых случаях трудно сказать, связаны ли сообщения об ошибках с неправильным форматированием чего-либо (например, порядок строк x столбцов x полос тензора изображения) по сравнению с попыткой сделать что-то, что несовместимо с tensorflow или keras. Спасибо еще раз. 21.03.2019
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..