pixelClassificationLayer

Создайте слой классификации пикселей для семантической сегментации

Описание

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

Создание

Описание

пример

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

пример

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

Для примера, pixelClassificationLayer('Name','pixclass') создает слой классификации пикселей с именем 'pixclass'.

Свойства

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

Классы выходного слоя, заданные как категориальный вектор, строковые массивы, массив ячеек из векторов символов или 'auto'. Если Classes является 'auto', затем программное обеспечение автоматически устанавливает классы во время обучения. Если вы задаете строковые массивы или массив ячеек векторов символов str, затем программное обеспечение устанавливает классы выходного слоя на categorical(str,str).

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

Веса классов, заданные как 'none' или как вектор действительного скаляра. Элементы вектора соответствуют классам в Classes. Если вы задаете ClassWeights, затем необходимо указать Classes.

Используйте взвешивание классов для балансировки классов, когда в обучающих данных есть недостаточно представленные классы.

Это свойство доступно только для чтения.

Выход сигнала слоя. Значение 'auto' перед обучением и задается как число значения во время обучения.

Это свойство доступно только для чтения.

Функция потерь, используемая для обучения, задается как 'crossentropyex'.

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

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

Количество входов слоя. Этот слой принимает только один вход.

Типы данных: double

Входные имена слоя. Этот слой принимает только один вход.

Типы данных: cell

Примеры

свернуть все

Спрогнозируйте категориальную метку каждого пикселя в вход изображении.

layers = [
         imageInputLayer([32 32 3])
         convolution2dLayer(3,16,'Stride',2,'Padding',1)
         reluLayer
         transposedConv2dLayer(3,1,'Stride',2,'Cropping',1)
         softmaxLayer
         pixelClassificationLayer
      ]
layers = 
  6x1 Layer array with layers:

     1   ''   Image Input                  32x32x3 images with 'zerocenter' normalization
     2   ''   Convolution                  16 3x3 convolutions with stride [2  2] and padding [1  1  1  1]
     3   ''   ReLU                         ReLU
     4   ''   Transposed Convolution       1 3x3 transposed convolutions with stride [2  2] and cropping [1  1  1  1]
     5   ''   Softmax                      softmax
     6   ''   Pixel Classification Layer   Cross-entropy loss 

Балансировка классов с использованием обратного взвешивания частот классов, когда некоторые классы недостаточно представлены в обучающих данных. Во-первых, подсчитайте частоты классов по обучающим данным с помощью pixelLabelImageDatastore. Затем установите значение 'ClassWeights' в pixelClassificationLayer на вычисленные частоты обратного класса.

Установите местоположение изображения и данных о пиксельных метках.

  dataDir = fullfile(toolboxdir('vision'),'visiondata');
  imDir = fullfile(dataDir,'building');
  pxDir = fullfile(dataDir,'buildingPixelLabels');

Создайте pixel метки image datastore с помощью основной истины изображений в imds и пиксельные маркированные изображения в pxds.

  imds = imageDatastore(imDir);
  classNames = ["sky" "grass" "building" "sidewalk"];
  pixelLabelID = [1 2 3 4];
  pxds = pixelLabelDatastore(pxDir,classNames,pixelLabelID);     
  pximds = pixelLabelImageDatastore(imds,pxds);

Табличное распределение классов в наборе данных.

  tbl = countEachLabel(pximds)
tbl=4×3 table
        Name        PixelCount    ImagePixelCount
    ____________    __________    _______________

    {'sky'     }    3.1485e+05       1.536e+06   
    {'grass'   }    1.5979e+05       1.536e+06   
    {'building'}    1.0312e+06       1.536e+06   
    {'sidewalk'}         25313       9.216e+05   

Вычислите веса обратных классов частот.

  totalNumberOfPixels = sum(tbl.PixelCount);
  frequency = tbl.PixelCount / totalNumberOfPixels;
  inverseFrequency = 1./frequency
inverseFrequency = 4×1

    4.8632
    9.5827
    1.4848
   60.4900

Установите 'ClassWeights' на частоты обратного класса.

  layer = pixelClassificationLayer(...
      'Classes',tbl.Name,'ClassWeights',inverseFrequency)
layer = 
  PixelClassificationLayer with properties:

            Name: ''
         Classes: [sky    grass    building    sidewalk]
    ClassWeights: [4x1 double]
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

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

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