Проблема с сегментацией по нескольким классам

#tensorflow #unity3d-unet #semantic-segmentation

Вопрос:

Я работаю над сегментированием данных МРТ на несколько классов. Когда у меня изначально было два класса (плюс фон, всего 3), алгоритм работал очень и очень хорошо. Я ввел третий класс, и результаты были очень плохими. Третий класс является подклассом второго, поэтому, по общему признанию, его очень трудно отличить от второго класса. Но даже показатели первого класса были заметно хуже! Мне интересно, сталкивался ли кто-нибудь с подобной проблемой раньше, или это обычная проблема? Я использую пакет segmentation_models, в котором используется keras. Я использую веса классов и сумму коэффициента кубиков и категориальной потери фокуса. Вот объявление, в котором я определяю модель:

 jaccard_loss = sm.losses.JaccardLoss(class_weights=class_weights)
focal_loss = sm.losses.CategoricalFocalLoss()
total_loss = jaccard_loss   (1 * focal_loss)
metrics = [sm.metrics.IOUScore()]
model = sm.Unet(BACKBONE1, encoder_weights=None,classes=n_classes, activation='softmax',input_shape=(None, None, num_channels))
model.compile(opt, total_loss, metrics=metrics)
 

У кого-нибудь есть какие-либо идеи о том, как я мог бы улучшить ситуацию?