Мультиклассовая семантическая сегментация - активация вывода?

Я пробую мультиклассовую семантическую сегментацию в Keras. Прямо сейчас я использую архитектуру Unet, и у меня есть модель, похожая на эту (но более глубокую):

inputs = Input(shape=(512,512,3))
# 128

down1 = Conv2D(32, (3, 3), activation='relu', padding='same')(inputs)
down1 = BatchNormalization()(down1)
down1 = Dropout(0.1)(down1)
down1 = Conv2D(32, (3, 3), padding='same', activation='relu')(down1)
down1 = BatchNormalization()(down1)
down1_pool = MaxPooling2D((2, 2))(down1)

center = Conv2D(64, (3, 3), padding='same', activation='relu')(down1_pool)
center = BatchNormalization()(center)
center = Dropout(0.1)(center)
center = Conv2D(64, (3, 3), padding='same', activation='relu')(center)
center = BatchNormalization()(center)
# center
up1 = concatenate([Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same')(center), down1], axis=3)
up1 = Conv2D(32, (3, 3), padding='same', activation='relu')(up1)
up1 = BatchNormalization()(up1)
up1 = Dropout(0.1)(up1)
up1 = Conv2D(32, (3, 3), padding='same', activation='relu')(up1)
up1 = BatchNormalization()(up1)
# 128

classify = Conv2D(3, (1, 1), activation='softmax')(up1)

model = Model(inputs=inputs, outputs=classify]
model.compile(optimizer=Adam(lr=lr), loss='categorical_crossentropy, metrics=[losses.dice_coeff])

Мой набор данных состоит из 680 тыс. Изображений (512, 512, 3) и 680 тыс. Соответствующих меток. Этикетки имеют горячую кодировку и имеют форму (512, 512, 3), то есть 3 класса.

И затем мой вопрос (ы): это правильный способ настроить мою модель? Или я должен использовать активацию «сигмоид» и «двоичную кроссентропию»?


person Kay Raymond Oskal    schedule 20.03.2018    source источник


Ответы (2)


если ваша метка является двоичной, используйте сигмовидную активацию, и если это наоборот, через один горячий код, то есть способ, который вы реализуете, тогда softmax следует использовать в качестве активации

person thefifthjack005    schedule 29.03.2018

У меня точно такая же проблема. Я не нашел функции потерь, которая заставила бы мою модель сходиться. Поэтому я использовал 3 отдельные модели для каждой этикетки. с функцией потери кубиков у меня были хорошие результаты для каждой метки. Сейчас я ищу способы объединить прогнозы всех трех моделей. В вашей модели softmax - это правильная активация, а двоичная и категориальная перекрестная энтропия одинаковы, поскольку ваши данные являются двоичными.

person Naomi Fridman    schedule 20.07.2018