exponenta event banner

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

Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и 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);

Создайте 3D сеть 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