pixelClassificationLayer

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

Описание

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

Создание

Синтаксис

layer = pixelClassificationLayer
layer = pixelClassificationLayer(Name,Value)

Описание

пример

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

пример

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

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

Свойства

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

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

Типы данных: 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