Как добавить функции не-изображения вдоль боковых изображений в качестве входных данных CNN

14

Я тренирую сверточную нейронную сеть для классификации изображений в условиях тумана (3 класса). Однако для каждого из 150 000 изображений у меня также есть четыре метеорологические переменные, которые могут помочь в прогнозировании классов изображений. Мне было интересно, как я могу добавить метеорологические переменные (например, температуру, скорость ветра) к существующей структуре CNN, чтобы она могла помочь в классификации.

Один из способов, который я уже могу придумать, - это создание другой (небольшой) нейронной сети с прямой связью вдоль CNN, а затем объединение выходов слоев CNN и скрытых слоев нейронной сети без изображения друг с другом в плотном слое.

Второй способ, который я мог придумать, это просто связать эти элементы с плотным слоем. Однако в этом случае переменные, не относящиеся к изображению, будут (я думаю) способны только делать линейные предсказания.

Существуют ли другие (более совершенные) способы включения в модель функций, не связанных с изображениями? И какой метод рекомендуется, учитывая количество данных, которые у меня есть?

Другой вопрос, который у меня есть, заключается в том, должен ли я размораживать сверточные слои во время тренировки с этими не-образными функциями? Эти слои Resnet-18 (которые были инициализированы как предварительно обученные в ImageNet) уже были настроены с использованием изображений. Я предполагаю, что я должен держать их в замороженном состоянии и только разморозить плотный слой, поскольку только здесь элементы, не относящиеся к изображению, вступают в «контакт» с элементами изображения (не ранее в CNN). Если я ошибаюсь, скажите, пожалуйста!

Тим
источник
Вы можете смоделировать распределение соединений между Additional_features и изображениями с помощью некоторой генеративной модели, такой как GAN, VAE. тогда вы можете получить скрытые переменные и использовать их с контролируемым критерием
Фади Бакура,
Я в подобной ситуации сам. Я использую стопку изображений неба в течение последних 15 минут, чтобы попытаться предсказать выход солнечных панелей вблизи камеры через 15 минут в будущем. Недавно я решил включить несколько погодных функций (по одной для каждого изображения, как в вашем случае). Ваше первое предложение сработало намного лучше, чем второе (о прямом добавлении неграфических объектов в плотный слой). Чтобы быть точным, второе предложение привело к проблемам с нормализацией. Я обнаружил, что по какой-то причине я пока не могу объяснить, слой Батчнорма не смог нормализовать графическое изображение
Vignesh Venugopal
@VigneshVenugopal, пожалуйста, укажите меня в комментариях, в противном случае я не могу быть уведомлен. Каков твой вопрос? :)
СМИ
Как я могу объединить скорость, газ и угол поворота руля с моими сетями? Не могли бы вы объяснить, сколько плотных добавить? Что от этого зависит?
Nasrinzaghari

Ответы:

10

Мое решение похоже на вашу первую рекомендацию, но с небольшими изменениями.

  1. Создайте свои сверточные слои и сложите их до слоя сглаживания. Эта сеть должна быть снабжена данными изображения.
  2. Оставьте свои карты активации
  3. Построить полностью подключенную сеть с нужным количеством нейронов и слоев.
  4. Объедините выходы сплющенного слоя сверточной сети и полностью связанной сети.
  5. добавьте несколько плотных слоев и соедините их с последним слоем, представляющим ваши классы.

Вы можете использовать обычные функции стоимости для этой архитектуры.

СМИ
источник
В Керасе, вы можете сделать это со Concatenate()слоями?
Leevo
Да. Вы должны объединить их, чтобы поместить их рядом друг с другом.
СМИ
Должен ли я использовать Concatenate()или concatenate()слои? Я не могу сказать разницу
Леево
Это зависит от того, как вы хотите создать свою сеть. Кстати, вы можете увидеть список аргументов каждого. Они отличаются. Вы также можете посмотреть здесь .
Медиа