focalLossLayer

Создайте слой фокальных потерь с помощью функции фокальных потерь

Описание

Слой очаговых потерь предсказывает классы объектов, используя очаговые потери. Добавьте слой потерь фокуса, чтобы обучить обнаружение объектов, семантическую сегментацию или классификационную сеть, когда существует дисбаланс между передним и фоновым классам планами. Чтобы компенсировать классу дисбаланс, функция фокусных потерь умножает функцию перекрестной энтропии с модуляционным фактором, который увеличивает чувствительность сети к неправильно классифицированным наблюдениям.

Создание

Описание

пример

layer = focalLossLayer создает слой фокальных потерь для нейронных сетей для глубокого обучения. Для получения информации о том, как использовать слой фокусных потерь в сети обнаружения объектов, смотрите, Создают сеть обнаружения объектов SSD.

пример

layer = focalLossLayer(Name,Value) устанавливает свойства слоя потерь фокуса с помощью одного или нескольких аргументов пары "имя-значение". Заключайте каждое имя свойства в кавычки.

Для примера, focalLossLayer('Name','focalloss') создает слой фокальных потерь с именем 'focalloss' и заданные параметры балансировки и фокусировки.

Свойства

расширить все

Параметр балансировки функции фокальных потерь, заданный как положительное вещественное число. The Alpha значение линейно масштабирует функцию потерь и обычно устанавливается на 0.25. Если вы уменьшаетесь Alpha, увеличение Gamma.

Параметр фокусировки функции фокусных потерь, заданный как положительное вещественное число. Увеличение значения Gamma увеличивает чувствительность сети к неправильно классифицированным наблюдениям.

Классы объектов, которые обучена сеть для обнаружения, заданные как строка, категориальный вектор, массив ячеек из векторов символов или 'auto'. Когда вы задаете Classes на 'auto', классы автоматически устанавливаются во время обучения. Когда вы задаете вектор строка или массив ячеек из векторов символов, то элементы Classes сортируются в соответствии с выходами categories функция.

Типы данных: string | categorical | cell | char

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

Типы данных: char | string

Примеры

свернуть все

Задайте имена классов.

classes = ["Vehicle","Background"];

Задайте параметр балансировки и параметр фокусировки функции фокусных потерь. Создайте слой очаговых потерь с именем «focallosslayer» для этих двух классов, отобразив результаты.

layer = focalLossLayer('Classes',classes,'Name','focallosslayer')
layer = 
  FocalLossLayer with properties:

            Name: 'focallosslayer'

   Hyperparameters
           Gamma: 2
           Alpha: 0.2500
         Classes: [2x1 categorical]
    LossFunction: 'focalLoss'

Создайте сеть DeepLab v3 + на основе ResNet-18.

imageSize = [480 640 3];
numClasses = 5;
network = 'resnet18';
lgraph = deeplabv3plusLayers(imageSize,numClasses,network,'DownsamplingFactor',16)
lgraph = 
  LayerGraph with properties:

         Layers: [100x1 nnet.cnn.layer.Layer]
    Connections: [113x2 table]
     InputNames: {'data'}
    OutputNames: {'classification'}

Отображение выходного слоя сети. Выходным слоем сети DeepLab v3 + является Pixel Classification Layer который использует кросс-энтропийную потерю, чтобы предсказать категориальную метку для каждого пикселя в вход 2-D изображении.

lgraph.Layers(end)
ans = 
  PixelClassificationLayer with properties:

            Name: 'classification'
         Classes: 'auto'
    ClassWeights: 'none'
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

Замените выход Pixel Classification Layer с Focal Loss Layer для обработки несбалансированных классов данных.

layer = focalLossLayer("Name","focalloss");
lgraph = replaceLayer(lgraph,"classification",layer);

Отображение сети.

analyzeNetwork(lgraph);

Создайте 3-D сеть U-Net для семантической сегментации при помощи unet3dLayers функция. Установите глубину кодера-декодера равную 2 и укажите количество выхода каналов для первого слоя свертки равное 16.

imageSize = [128 128 128 3];
numClasses = 5;
lgraph = unet3dLayers(imageSize,numClasses,'EncoderDepth',2,...
                     'NumFirstEncoderFilters',16);
figure
plot(lgraph)

Figure contains an axes. The axes contains an object of type graphplot.

Создайте слой фокальных потерь и замените Segmentation-Layer в сети с слоем фокусных потерь. Слой предсказывает категориальную метку для каждой воксели в вход 3-D томе.

layer = focalLossLayer("Name","focalloss");
lgraph = replaceLayer(lgraph,"Segmentation-Layer",layer)
lgraph = 
  LayerGraph with properties:

         Layers: [40x1 nnet.cnn.layer.Layer]
    Connections: [41x2 table]
     InputNames: {'ImageInputLayer'}
    OutputNames: {'focalloss'}

Отображение сети.

analyzeNetwork(lgraph);

Подробнее о

расширить все

Ссылки

[1] Лин, Цунг-И, Прия Гоял, Росс Гиршик, Кайминг Хэ и Пётр Доллар. «Очаговые потери для плотных Обнаружений объектов». В 2017 году IEEE® Международная конференция по компьютерному зрению (ICCV), 2999-3007. Венеция: IEEE, 2017. https://doi.org/10.1109/ICCV.2017.324.

Расширенные возможности

.
Введенный в R2020a