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');

Создайте пиксельный 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