exponenta event banner

pixelClassificationLayer

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

Описание

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

Создание

Описание

пример

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

пример

layer = pixelClassificationLayer(Name,Value) возвращает выходной слой классификации пикселей с использованием аргументов пары 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 в pixelClassedLayer вычисленные частоты обратного класса.

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

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

Создание хранилища данных изображения метки пикселя с использованием изображений истинности земли в 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