pixelClassificationLayer

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

Описание

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

Создание

Описание

пример

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'

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

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

Введенный в R2017b