Как добавить данные о возрасте и поле к изображениям для сверточной нейронной сети?

#python #image-processing #keras #conv-neural-network

#python #обработка изображений #keras #conv-neural-network

Вопрос:

В настоящее время я работаю над классификацией изображений меланомы через Keras CNN. Изображения поставляются с метаданными — возраст, пол и местоположение поражения.

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

Как именно я могу добавить данные о возрасте, поле и т.д. к изображениям?

Вот скриншот экспортированного фрейма данных — красным цветом то, что я использую для CNN, и я хотел бы добавить зеленый раздел: https://i.imgur.com/O75LpBx.jpg

Если есть стандартный метод для этого, я был бы очень признателен, если бы вы могли поделиться им. Спасибо

Я пытался в Google «добавить демографические данные в CNN» или «добавить пол в CNN» и т.д. И не могу найти никакой информации.

Моя текущая структура модели:

 model = Sequential()

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(BatchNormalization())
    
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(BatchNormalization())
    

    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(BatchNormalization())
    
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
    model.add(BatchNormalization())
    
    model.add(Conv2D(32, kernel_size=(3, 3), activation='relu'))
    model.add(BatchNormalization())
    model.add(MaxPool2D(pool_size=(2, 2)))
        
    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(BatchNormalization())
    
    model.add(Conv2D(32, (3, 3), activation='relu'))
    model.add(BatchNormalization())
    
    model.add(MaxPool2D(pool_size=(2, 2)))
    
    model.add(Flatten())
    
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.2))
    
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    
    model.add(Dense(num_classes, activation='sigmoid'))
    
    adam = Adam(lr=0.001)
    
    model.compile(loss='binary_crossentropy',
                  optimizer=adam,
                  metrics=[km.binary_precision(), km.binary_recall(),km.binary_f1_score()])
  

Ответ №1:

То, что вы описываете, на самом деле является моделью с несколькими входами. В этом случае вы могли бы рассмотреть возможность подачи изображения в CNN и метаданных в полностью подключенные сети, а затем объединить выходные данные этих двух подсетей, чтобы получить свой прогноз.

Ознакомьтесь с документом Keras об этом:https://keras.io/guides/functional_api/#models-with-multiple-inputs-and-outputs