focalLossLayer

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

Описание

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

Создание

Описание

пример

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

пример

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

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

Свойства

развернуть все

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

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

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

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

Имя слоя в виде вектора символов или строкового скаляра. Для Layer вход массивов, trainNetwork, assembleNetwork, layerGraph, и dlnetwork функции автоматически присваивают имена к слоям с 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 это использует потерю перекрестной энтропии, чтобы предсказать категориальную метку для каждого пикселя во входе 2D изображение.

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 object. The axes object 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] Лин, Цзун-И, Priya Goyal, Росс Джиршик, Kaiming он и доллар Петра. "Фокальная потеря для плотного обнаружения объектов". В 2 017 IEEE® Международная конференция по вопросам Компьютерного зрения (ICCV), 2999–3007. Венеция: IEEE, 2017. https://doi.org/10.1109/ICCV.2017.324.

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

Введенный в R2020a