Семантическая сегментация изображений с помощью глубокого обучения
возвращает семантическую сегментацию для набора изображений в pxds
= semanticseg(ds
,network
)ds
, объект datastore.
Функция поддерживает параллельные вычисления с использованием нескольких MATLAB® рабочие. Можно включить параллельные вычисления с помощью диалогового окна Computer Vision Toolbox Preferences.
[___] = semanticseg(___,
возвращает семантическую сегментацию с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".Name,Value
)
Наложите результаты сегментации на изображение и отобразите результаты.
Загрузка предварительно обученной сети.
data = load('triangleSegmentationNetwork');
net = data.net
net = SeriesNetwork with properties: Layers: [10x1 nnet.cnn.layer.Layer] InputNames: {'imageinput'} OutputNames: {'classoutput'}
Список слоев сети.
net.Layers
ans = 10x1 Layer array with layers: 1 'imageinput' Image Input 32x32x1 images with 'zerocenter' normalization 2 'conv_1' Convolution 64 3x3x1 convolutions with stride [1 1] and padding [1 1 1 1] 3 'relu_1' ReLU ReLU 4 'maxpool' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 'conv_2' Convolution 64 3x3x64 convolutions with stride [1 1] and padding [1 1 1 1] 6 'relu_2' ReLU ReLU 7 'transposed-conv' Transposed Convolution 64 4x4x64 transposed convolutions with stride [2 2] and cropping [1 1 1 1] 8 'conv_3' Convolution 2 1x1x64 convolutions with stride [1 1] and padding [0 0 0 0] 9 'softmax' Softmax softmax 10 'classoutput' Pixel Classification Layer Class weighted cross-entropy loss with classes 'triangle' and 'background'
Чтение и отображение тестового изображения.
I = imread('triangleTest.jpg');
figure
imshow(I)
Выполните семантическую сегментацию изображения.
[C,scores] = semanticseg(I,net,'MiniBatchSize',32);
Наложите результаты сегментации на изображение и отобразите результаты.
B = labeloverlay(I, C); figure imshow(B)
Отобразите классификационные оценки.
figure
imagesc(scores)
axis square
colorbar
Создайте двоичную маску только с треугольниками.
BW = C == 'triangle';
figure
imshow(BW)
Запустите семантическую сегментацию на тестовом наборе изображений и сравните результаты с достоверными данными.
Загрузка предварительно обученной сети.
data = load('triangleSegmentationNetwork');
net = data.net;
Загрузите тестовые изображения с помощью imageDatastore
.
dataDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages'); testImageDir = fullfile(dataDir,'testImages'); imds = imageDatastore(testImageDir)
imds = ImageDatastore with properties: Files: { ' .../toolbox/vision/visiondata/triangleImages/testImages/image_001.jpg'; ' .../toolbox/vision/visiondata/triangleImages/testImages/image_002.jpg'; ' .../toolbox/vision/visiondata/triangleImages/testImages/image_003.jpg' ... and 97 more } Folders: { ' .../build/matlab/toolbox/vision/visiondata/triangleImages/testImages' } AlternateFileSystemRoots: {} ReadSize: 1 Labels: {} SupportedOutputFormats: ["png" "jpg" "jpeg" "tif" "tiff"] DefaultOutputFormat: "png" ReadFcn: @readDatastoreImage
Загрузите метки наземного теста основной истины.
testLabelDir = fullfile(dataDir,'testLabels'); classNames = ["triangle" "background"]; pixelLabelID = [255 0]; pxdsTruth = pixelLabelDatastore(testLabelDir,classNames,pixelLabelID);
Запустите семантическую сегментацию на всех тестовых изображениях с размером пакета 4. Можно увеличить размер пакета, чтобы увеличить пропускную способность на основе ресурсов памяти систем.
pxdsResults = semanticseg(imds,net,'MiniBatchSize',4,'WriteLocation',tempdir);
Running semantic segmentation network ------------------------------------- * Processed 100 images.
Сравните результаты с основной истиной.
metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth)
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 100 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.90624 0.95085 0.61588 0.87529 0.40652
metrics = semanticSegmentationMetrics with properties: ConfusionMatrix: [2x2 table] NormalizedConfusionMatrix: [2x2 table] DataSetMetrics: [1x5 table] ClassMetrics: [2x3 table] ImageMetrics: [100x5 table]
Этот пример использует:
В этом примере показано, как определить и создать пользовательский слой классификации пикселей, который использует потери Тверского.
Этот слой может использоваться для обучения сетей семантической сегментации. Дополнительные сведения о создании пользовательских слоев глубокого обучения см. в разделе «Определение пользовательских слоев глубокого обучения» (Deep Learning Toolbox).
Тверская потеря
Тверская потеря основана на индексе Тверского для измерения перекрытия между двумя сегментированными изображениями [1]. Индекс Тверского между одним изображением и соответствующая основная истина дается
соответствует классу и соответствует отсутствию в классе .
количество элементов по первым двум размерностям .
и являются весовыми факторами, которые контролируют вклад, который ложные срабатывания и ложные срабатывания для каждого класса вносят в потерю.
Потеря по количеству классов дается
Шаблон классификационного слоя
Скопируйте шаблон слоя классификации в новый файл в MATLAB ®. Этот шаблон описывает структуру слоя классификации и включает функции, которые определяют поведение слоя. В остальном примере показано, как выполнить tverskyPixelClassificationLayer
.
classdef tverskyPixelClassificationLayer < nnet.layer.ClassificationLayer properties % Optional properties end methods function loss = forwardLoss(layer, Y, T) % Layer forward loss function goes here end end end
Объявление свойств слоя
По умолчанию пользовательские выходные слои имеют следующие свойства:
Name
- Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить этот слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с этим слоем и Name
установлено в ''
затем программа автоматически присваивает имя во время обучения.
Description
- Однострочное описание слоя, заданное как вектор символов или строковый скаляр. Это описание появляется, когда слой отображается в Layer
массив. Если вы не задаете описание слоя, то программа отображает имя класса слоя.
Type
- Тип слоя, заданный как вектор символов или строковый скаляр. Значение Type
появляется, когда слой отображается в Layer
массив. Если тип слоя не задан, отобразится программное обеспечение 'Classification layer'
или 'Regression layer'
.
Пользовательские слои классификации также имеют следующее свойство:
Classes
- Классы выходного слоя, заданные как категориальный вектор, строковые массивы, массив ячеек из векторов символов или 'auto'
. Если Classes
является 'auto'
, затем программное обеспечение автоматически устанавливает классы во время обучения. Если вы задаете строковые массивы или массив ячеек векторов символов str
, затем программное обеспечение устанавливает классы выходного слоя на categorical(str,str)
. Значение по умолчанию 'auto'
.
Если слой не имеет других свойств, можно опустить properties
раздел.
Тверская потеря требует небольшого постоянного значения, чтобы предотвратить деление на нули. Задайте свойство, Epsilon
, чтобы удержать это значение. Это также требует двух свойств переменной A lpha
и Beta
которые контролируют взвешивание ложных срабатываний и ложных срабатываний, соответственно.
classdef tverskyPixelClassificationLayer < nnet.layer.ClassificationLayer properties(Constant) % Small constant to prevent division by zero. Epsilon = 1e-8; end properties % Default weighting coefficients for false positives and false negatives Alpha = 0.5; Beta = 0.5; end ... end
Создайте функцию конструктора
Создайте функцию, которая создает слой и инициализирует свойства слоя. Задайте любые переменные, необходимые для создания слоя в качестве входов для функции конструктора.
Задайте необязательное имя входного параметра для присвоения Name
свойство при создании.
function layer = tverskyPixelClassificationLayer(name, alpha, beta) % layer = tverskyPixelClassificationLayer(name) creates a Tversky % pixel classification layer with the specified name. % Set layer name layer.Name = name; % Set layer properties layer.Alpha = alpha; layer.Beta = beta; % Set layer description layer.Description = 'Tversky loss'; end
Создайте функцию Forward Loss
Создайте функцию с именем forwardLoss
это возвращает взвешенные потери перекрестной энтропии между предсказаниями, сделанными сетью, и целями обучения. Синтаксис для forwardLoss
является loss = forwardLoss(layer,Y,T)
, где Y
- выход предыдущего слоя и T
представляет цели обучения.
Для семантических задач сегментации, размерности T
соответствовать размерности Y
, где Y
- 4-D массив размера H
-by- W
-by- K
-by- N
, где K
количество классов и N
- размер мини-пакета.
Размер Y
зависит от выхода предыдущего слоя. Чтобы гарантировать, что Y
- тот же размер, что и T
необходимо включить слой, который выводит правильный размер перед слоем выхода. Для примера, чтобы гарантировать, что Y
является 4-D массивом счетов предсказания для K
классы, можно включать полносвязный слой размера K
или сверточный слой с K
фильтры, за которыми следует слой softmax перед слоем выхода.
function loss = forwardLoss(layer, Y, T) % loss = forwardLoss(layer, Y, T) returns the Tversky loss between % the predictions Y and the training targets T. Pcnot = 1-Y; Gcnot = 1-T; TP = sum(sum(Y.*T,1),2); FP = sum(sum(Y.*Gcnot,1),2); FN = sum(sum(Pcnot.*T,1),2); numer = TP + layer.Epsilon; denom = TP + layer.Alpha*FP + layer.Beta*FN + layer.Epsilon; % Compute Tversky index lossTIc = 1 - numer./denom; lossTI = sum(lossTIc,3); % Return average Tversky index loss N = size(Y,4); loss = sum(lossTI)/N; end
Функция обратных потерь
Как forwardLoss
функция полностью поддерживает автоматическую дифференциацию, нет необходимости создавать функцию для обратных потерь.
Список функций, поддерживающих автоматическую дифференциацию, см. в Списке функций с поддержкой dlarray (Deep Learning Toolbox).
Завершенный слой
Завершенный слой обеспечен в tverskyPixelClassificationLayer.m
.
classdef tverskyPixelClassificationLayer < nnet.layer.ClassificationLayer % This layer implements the Tversky loss function for training % semantic segmentation networks. % References % Salehi, Seyed Sadegh Mohseni, Deniz Erdogmus, and Ali Gholipour. % "Tversky loss function for image segmentation using 3D fully % convolutional deep networks." International Workshop on Machine % Learning in Medical Imaging. Springer, Cham, 2017. % ---------- properties(Constant) % Small constant to prevent division by zero. Epsilon = 1e-8; end properties % Default weighting coefficients for False Positives and False % Negatives Alpha = 0.5; Beta = 0.5; end methods function layer = tverskyPixelClassificationLayer(name, alpha, beta) % layer = tverskyPixelClassificationLayer(name, alpha, beta) creates a Tversky % pixel classification layer with the specified name and properties alpha and beta. % Set layer name. layer.Name = name; layer.Alpha = alpha; layer.Beta = beta; % Set layer description. layer.Description = 'Tversky loss'; end function loss = forwardLoss(layer, Y, T) % loss = forwardLoss(layer, Y, T) returns the Tversky loss between % the predictions Y and the training targets T. Pcnot = 1-Y; Gcnot = 1-T; TP = sum(sum(Y.*T,1),2); FP = sum(sum(Y.*Gcnot,1),2); FN = sum(sum(Pcnot.*T,1),2); numer = TP + layer.Epsilon; denom = TP + layer.Alpha*FP + layer.Beta*FN + layer.Epsilon; % Compute tversky index lossTIc = 1 - numer./denom; lossTI = sum(lossTIc,3); % Return average tversky index loss. N = size(Y,4); loss = sum(lossTI)/N; end end end
Совместимость с GPU
Функции MATLAB, используемые в forwardLoss
в tverskyPixelClassificationLayer
все gpuArray поддержки
вводит, поэтому слой совместим с графическим процессором.
Проверяйте валидность выходного слоя
Создайте образец слоя.
layer = tverskyPixelClassificationLayer('tversky',0.7,0.3);
Проверьте валидность слоя при помощи checkLayer
(Deep Learning Toolbox). Задайте допустимый размер входного сигнала, чтобы быть размером одного наблюдения типового входа для слоя. Слой ожидает H
-by- W
-by- K
-by- N
входы массива, где K
количество классов и N
количество наблюдений в мини-пакете.
numClasses = 2;
validInputSize = [4 4 numClasses];
checkLayer(layer,validInputSize, 'ObservationDimension',4)
Skipping GPU tests. No compatible GPU device found. Skipping code generation compatibility tests. To check validity of the layer for code generation, specify the 'CheckCodegenCompatibility' and 'ObservationDimension' options. Running nnet.checklayer.TestOutputLayerWithoutBackward ........ Done nnet.checklayer.TestOutputLayerWithoutBackward __________ Test Summary: 8 Passed, 0 Failed, 0 Incomplete, 2 Skipped. Time elapsed: 1.083 seconds.
В сводных данных тестов указывается количество пройденных, неудачных, неполных и пропущенных тестов.
Использование пользовательского слоя в семантической сети сегментации
Создайте семантическую сеть сегментации, которая использует tverskyPixelClassificationLayer
.
layers = [ imageInputLayer([32 32 1]) convolution2dLayer(3,64,'Padding',1) batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,64,'Padding',1) reluLayer transposedConv2dLayer(4,64,'Stride',2,'Cropping',1) convolution2dLayer(1,2) softmaxLayer tverskyPixelClassificationLayer('tversky',0.3,0.7)]
layers = 11x1 Layer array with layers: 1 '' Image Input 32x32x1 images with 'zerocenter' normalization 2 '' Convolution 64 3x3 convolutions with stride [1 1] and padding [1 1 1 1] 3 '' Batch Normalization Batch normalization 4 '' ReLU ReLU 5 '' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 6 '' Convolution 64 3x3 convolutions with stride [1 1] and padding [1 1 1 1] 7 '' ReLU ReLU 8 '' Transposed Convolution 64 4x4 transposed convolutions with stride [2 2] and cropping [1 1 1 1] 9 '' Convolution 2 1x1 convolutions with stride [1 1] and padding [0 0 0 0] 10 '' Softmax softmax 11 'tversky' Classification Output Tversky loss
Загрузите обучающие данные для семантической сегментации с помощью imageDatastore
и pixelLabelDatastore
.
dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages'); imageDir = fullfile(dataSetDir,'trainingImages'); labelDir = fullfile(dataSetDir,'trainingLabels'); imds = imageDatastore(imageDir); classNames = ["triangle" "background"]; labelIDs = [255 0]; pxds = pixelLabelDatastore(labelDir, classNames, labelIDs);
Связать изображение и данные о пиксельных метках можно используя pixelLabelImageDatastore
.
ds = pixelLabelImageDatastore(imds,pxds);
Установите опции обучения и обучите сеть.
options = trainingOptions('adam', ... 'InitialLearnRate',1e-3, ... 'MaxEpochs',100, ... 'LearnRateDropFactor',5e-1, ... 'LearnRateDropPeriod',20, ... 'LearnRateSchedule','piecewise', ... 'MiniBatchSize',50); net = trainNetwork(ds,layers,options);
Training on single CPU. Initializing input data normalization. |========================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:00 | 50.32% | 1.2933 | 0.0010 | | 13 | 50 | 00:00:08 | 98.83% | 0.0988 | 0.0010 | | 25 | 100 | 00:00:15 | 99.33% | 0.0547 | 0.0005 | | 38 | 150 | 00:00:21 | 99.37% | 0.0473 | 0.0005 | | 50 | 200 | 00:00:28 | 99.48% | 0.0400 | 0.0003 | | 63 | 250 | 00:00:36 | 99.48% | 0.0383 | 0.0001 | | 75 | 300 | 00:00:43 | 99.54% | 0.0348 | 0.0001 | | 88 | 350 | 00:00:50 | 99.51% | 0.0353 | 6.2500e-05 | | 100 | 400 | 00:00:57 | 99.56% | 0.0331 | 6.2500e-05 | |========================================================================================|
Оцените обученную сеть, сегментировав тестовое изображение и отобразив результат сегментации.
I = imread('triangleTest.jpg');
[C,scores] = semanticseg(I,net);
B = labeloverlay(I,C);
montage({I,B})
Ссылки
[1] Салехи, Сейед Садег Мохсени, Дениз Эрдогмус и Али Голипур. «Функция потерь Тверского для сегментации изображений 3D используя полностью сверточные глубокие сети». Международный семинар по машинному обучению в медицинской визуализации. Спрингер, Чэм, 2017.
Обучите сеть семантической сегментации с помощью расширенных сверток.
Семантическая сеть сегментации классифицирует каждый пиксель в изображении, получая к изображение, которое сегментировано по классам. Приложения для семантической сегментации включают сегментацию дорог для автономного управления автомобилем и сегментацию раковых камер для медицинского диагностирования. Дополнительные сведения см. в разделе Начало работы с семантической сегментацией с использованием глубокого обучения.
Семантические сети сегментации, такие как DeepLab [1], широко используют расширенные свертки (также известные как атронные свертки), потому что они могут увеличить восприимчивое поле слоя (площадь входа, который могут видеть слои), не увеличивая количество параметров или расчетов.
Загрузка обучающих данных
Пример использует простой набор данных из изображений треугольника 32 на 32 в целях рисунка. Набор данных включает в себя сопровождающие пиксельные достоверные данные. Загрузите обучающие данные с помощью imageDatastore
и a pixelLabelDatastore
.
dataFolder = fullfile(toolboxdir('vision'),'visiondata','triangleImages'); imageFolderTrain = fullfile(dataFolder,'trainingImages'); labelFolderTrain = fullfile(dataFolder,'trainingLabels');
Создайте imageDatastore
для изображений.
imdsTrain = imageDatastore(imageFolderTrain);
Создайте pixelLabelDatastore
для меток основной истины пикселей.
classNames = ["triangle" "background"]; labels = [255 0]; pxdsTrain = pixelLabelDatastore(labelFolderTrain,classNames,labels)
pxdsTrain = PixelLabelDatastore with properties: Files: {200x1 cell} ClassNames: {2x1 cell} ReadSize: 1 ReadFcn: @readDatastoreImage AlternateFileSystemRoots: {}
Создайте сеть семантической сегментации
Этот пример использует простую сеть семантической сегментации, основанную на расширенных сверточках.
Создайте источник данных для обучающих данных и получите количество пикселей для каждой метки.
pximdsTrain = pixelLabelImageDatastore(imdsTrain,pxdsTrain); tbl = countEachLabel(pxdsTrain)
tbl=2×3 table
Name PixelCount ImagePixelCount
______________ __________ _______________
{'triangle' } 10326 2.048e+05
{'background'} 1.9447e+05 2.048e+05
Большинство меток пикселей предназначены для фона. Этот классовый дисбаланс смещает процесс обучения в пользу доминирующего класса. Чтобы исправить это, используйте взвешивание классов для балансировки классов. Для вычисления весов классов можно использовать несколько методов. Одним из распространенных методов является обратное взвешивание частот, где веса классов являются обратными частотам классов. Этот метод увеличивает вес, придаваемый недостаточно представленным классам. Вычислите веса классов, используя обратное взвешивание частот.
numberPixels = sum(tbl.PixelCount); frequency = tbl.PixelCount / numberPixels; classWeights = 1 ./ frequency;
Создайте сеть для классификации пикселей с помощью входного слоя изображения с размером входа, соответствующим размеру входных изображений. Затем задайте три блока свертки, нормализации партии . и слоев ReLU. Для каждого сверточного слоя задайте 32 фильтра 3 на 3 с увеличением коэффициентов расширения и заполните входы так, чтобы они были такими же размерами, как выходы путем установки 'Padding'
опция для 'same'
. Чтобы классифицировать пиксели, включите сверточный слой со свертками K 1 на 1, где K - количество классов, далее слой softmax и pixelClassificationLayer
с обратными весами классов.
inputSize = [32 32 1]; filterSize = 3; numFilters = 32; numClasses = numel(classNames); layers = [ imageInputLayer(inputSize) convolution2dLayer(filterSize,numFilters,'DilationFactor',1,'Padding','same') batchNormalizationLayer reluLayer convolution2dLayer(filterSize,numFilters,'DilationFactor',2,'Padding','same') batchNormalizationLayer reluLayer convolution2dLayer(filterSize,numFilters,'DilationFactor',4,'Padding','same') batchNormalizationLayer reluLayer convolution2dLayer(1,numClasses) softmaxLayer pixelClassificationLayer('Classes',classNames,'ClassWeights',classWeights)];
Обучите сеть
Задайте опции обучения.
options = trainingOptions('sgdm', ... 'MaxEpochs', 100, ... 'MiniBatchSize', 64, ... 'InitialLearnRate', 1e-3);
Обучите сеть с помощью trainNetwork
.
net = trainNetwork(pximdsTrain,layers,options);
Training on single CPU. Initializing input data normalization. |========================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 1 | 1 | 00:00:00 | 91.62% | 1.6825 | 0.0010 | | 17 | 50 | 00:00:08 | 88.56% | 0.2393 | 0.0010 | | 34 | 100 | 00:00:15 | 92.08% | 0.1672 | 0.0010 | | 50 | 150 | 00:00:23 | 93.17% | 0.1472 | 0.0010 | | 67 | 200 | 00:00:31 | 94.15% | 0.1313 | 0.0010 | | 84 | 250 | 00:00:38 | 94.47% | 0.1167 | 0.0010 | | 100 | 300 | 00:00:46 | 95.04% | 0.1100 | 0.0010 | |========================================================================================|
Тестирование сети
Загрузите тестовые данные. Создайте imageDatastore
для изображений. Создайте pixelLabelDatastore
для меток основной истины пикселей.
imageFolderTest = fullfile(dataFolder,'testImages'); imdsTest = imageDatastore(imageFolderTest); labelFolderTest = fullfile(dataFolder,'testLabels'); pxdsTest = pixelLabelDatastore(labelFolderTest,classNames,labels);
Делайте предсказания с помощью тестовых данных и обученной сети.
pxdsPred = semanticseg(imdsTest,net,'MiniBatchSize',32,'WriteLocation',tempdir);
Running semantic segmentation network ------------------------------------- * Processed 100 images.
Оцените точность предсказания с помощью evaluateSemanticSegmentation
.
metrics = evaluateSemanticSegmentation(pxdsPred,pxdsTest);
Evaluating semantic segmentation results ---------------------------------------- * Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score. * Processed 100 images. * Finalizing... Done. * Data set metrics: GlobalAccuracy MeanAccuracy MeanIoU WeightedIoU MeanBFScore ______________ ____________ _______ ___________ ___________ 0.95237 0.97352 0.72081 0.92889 0.46416
Для получения дополнительной информации об оценке семантических сетей сегментации смотрите evaluateSemanticSegmentation
.
Сегментация нового изображения
Чтение и отображение тестового изображения triangleTest.jpg
.
imgTest = imread('triangleTest.jpg');
figure
imshow(imgTest)
Сегментируйте тестовое изображение с помощью semanticseg
и отобразите результаты с помощью labeloverlay
.
C = semanticseg(imgTest,net); B = labeloverlay(imgTest,C); figure imshow(B)
I
- Входное изображениеВходное изображение, заданное как одно из следующего.
Тип изображения | Формат данных |
---|---|
Одно 2-D полутонового изображения | 2-D матрица размера H -by- W |
Одно 2-D цветное изображение или 2-D мультиспектральное изображение | Трехмерный массив размера H -by- W -by- C. Количество цветовых каналов C составляет 3 для цветных изображений. |
Серия P 2-D изображений | 4-D массив размера H -by- W -by- C -by- P. Количество цветовых каналов C 1 для полутоновых изображений и 3 для цветных изображений. |
Одно 3-D полутоновое изображение с D глубины | Трехмерный массив размера H -by- W -by- D |
Одно 3-D цветное изображение или 3-D мультиспектральное изображение | 4-D массив размера H -by- W -by- D -by- C. Количество цветовых каналов C составляет 3 для цветных изображений. |
Серия P 3-D изображений | Массив 5-D размера <reservedrangesplaceholder4>-by-<reservedrangesplaceholder3>-by-<reservedrangesplaceholder2>-by-<reservedrangesplaceholder1>-by-<reservedrangesplaceholder0> |
Изображение входа может также быть gpuArray
(Parallel Computing Toolbox), содержащий один из предыдущих типов изображений (требует Parallel Computing Toolbox™).
Типы данных: uint8
| uint16
| int16
| double
| single
| logical
network
- СетьSeriesNetwork
| объекта DAGNetwork
| объекта dlnetwork
объектСеть, заданная как SeriesNetwork
(Deep Learning Toolbox), DAGNetwork
(Deep Learning Toolbox), или dlnetwork
(Deep Learning Toolbox) объект.
roi
- Необходимая областьНеобходимая область, указанная как одно из следующего.
Тип изображения | Информация только для чтения |
---|---|
2-D изображение | 4-элементный вектор вида [x, y, width, height] |
3-D изображение | Вектор с 6 элементами формы [x, y, z, width, height, depth] |
Вектор задает прямоугольную или кубоидальную необходимую область, полностью содержащееся в входе изображении. Пикселям изображений за пределами необходимой области присваивается < undefined
> категориальная метка. Если вход изображение состоит из ряда изображений, то semanticseg
применяет то же roi
ко всем изображениям в серии.
ds
- Набор изображенийНабор изображений, заданный как datastore. read
функция datastore должна возвращать числовой массив, массив ячеек или таблицу. Для массивов ячеек или таблиц с несколькими столбцами функция обрабатывает только первый столбец.
Для получения дополнительной информации смотрите Datastores for Глубокое Обучение (Deep Learning Toolbox).
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'ExecutionEnvironment'
, 'gpu'
'OutputType'
- Возвращенный тип сегментации'categorical'
(по умолчанию) | 'double'
| 'uint8'
Возвращенный тип сегментации, заданный как 'categorical'
, 'double'
, или 'uint8'
. Когда вы задаете 'double'
или 'uint8'
функция возвращает результаты сегментации в виде массива меток, содержащего идентификаторы меток. Идентификаторы являются целочисленными значениями, которые соответствуют именам классов, заданным в слое классификации, используемом во входной сети.
Вы не можете использовать OutputType
свойство с ImageDatastore
входной параметр объекта.
'MiniBatchSize'
- Группа изображений128
(по умолчанию) | целое числоГруппа изображений, заданная в виде целого числа. Изображения сгруппированы и обрабатываются вместе как пакет. Пакеты используются для обработки большого набора изображений, и они улучшают вычислительную эффективность. Увеличение 'MiniBatchSize
'значение повышает эффективность, но также занимает больше памяти.
'ExecutionEnvironment'
- Аппаратный ресурс'auto'
(по умолчанию) | 'gpu'
| 'cpu'
Аппаратный ресурс для обработки изображений сетью, заданный как 'auto'
, 'gpu'
, или 'cpu'
.
ExecutionEnvironment | Описание |
---|---|
'auto' | При наличии используйте графический процессор. В противном случае используйте центральный процессор. Для использования графический процессор требуется Parallel Computing Toolbox и CUDA® enabled NVIDIA® ГРАФИЧЕСКИЙ ПРОЦЕССОР. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox). |
'gpu' | Используйте графический процессор. Если подходящий графический процессор недоступен, функция возвращает сообщение об ошибке. |
'cpu' | Используйте центральный процессор. |
'Acceleration'
- Оптимизация эффективности'auto'
(по умолчанию) | 'mex'
| 'none'
Оптимизация эффективности, заданная как 'auto'
, 'mex'
, или 'none'
.
Ускорение | Описание |
---|---|
'auto' | Автоматически примените ряд оптимизаций, подходящих для входа сети и оборудования ресурса. |
'mex' | Скомпилируйте и выполните MEX-функцию. Эта опция доступна только при использовании графического процессора. Необходимо также установить компилятор C/C + +. Инструкции по настройке см. в MEX Setup (GPU Coder). |
'none' | Отключите все ускорения. |
Опция по умолчанию 'auto'
. Если вы используете 'auto'
опция, тогда MATLAB никогда не генерирует MEX-функцию.
Использование 'Acceleration'
опции 'auto'
и 'mex'
может предложить преимущества эффективности, но за счет увеличения начального времени запуска. Последующие вызовы с совместимыми параметрами выполняются быстрее. Используйте оптимизацию эффективности, когда вы планируете вызывать функцию несколько раз с помощью новых входных данных.
The 'mex'
опция генерирует и выполняет MEX-функцию на основе сети и параметров, используемых в вызове функции. Одновременно с одной сетью можно связать несколько MEX-функции. Очистка сетевой переменной также очищает все MEX-функции, связанные с этой сетью.
The 'mex'
опция доступна только при использовании графического процессора. Для использования GPU требуется Parallel Computing Toolbox и графический процессор NVIDIA с поддержкой CUDA. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Если Parallel Computing Toolbox или подходящий графический процессор недоступен, то функция возвращает ошибку.
'mex'
ускорение не поддерживает сети, заданные как dlnetwork
(Deep Learning Toolbox) объект.
'mex'
ускорение не поддерживает все слои. Список поддерживаемых слоев см. в разделе Поддерживаемые слои (GPU Coder).
'Classes'
- Классы, в которые классифицируются пиксели или воксели'auto'
(по умолчанию) | массив ячеек из векторов символов | строкового вектора | категориального вектораКлассы, в которые классифицируются пиксели или воксели, заданные как 'auto'
, массив ячеек из векторов символов, строковый вектор или категориальный вектор. Если значение является категориальным векторным Y, то элементы вектора сортируются и упорядочиваются согласно categories
(Y)
.
Если сеть является dlnetwork
(Deep Learning Toolbox), затем количество классов, заданное как 'Classes
'должен совпадать с количеством каналов в выходах сетевых предсказаний. По умолчанию, когда 'Classes
'имеет значение 'auto'
классы нумеруются от 1 до C, где C количество каналов на выход уровне сети.
Если сеть является SeriesNetwork
(Deep Learning Toolbox) или DAGNetwork
(Deep Learning Toolbox), затем количество классов, заданное как 'Classes
'должен совпадать с количеством классов в выходном слое классификации. По умолчанию, когда 'Classes
'имеет значение 'auto'
классы автоматически устанавливаются с помощью выходного слоя классификации.
'WriteLocation'
- Расположение папкиpwd
(текущая рабочая папка) (по умолчанию) | строковый скаляр | символьный векторРасположение папки, заданное как pwd
(текущая рабочая папка), строковый скаляр или вектор символов. Указанная папка должна существовать и иметь разрешения на запись.
Это свойство применяется только при использовании ImageDatastore
входной параметр объекта.
'NamePrefix'
- Префикс применяется к именам выходных файлов'pixelLabel'
(по умолчанию) | строковый скаляр | символьный векторПрефикс, примененный к именам выходных файлов, задается как строковый скаляр или вектор символов. Файлы изображений называются следующим образом:
, где prefix
_ N
.png
соответствует индексу файла входа изображения, N
imds.Files
(<reservedrangesplaceholder0>).
Это свойство применяется только при использовании ImageDatastore
входной параметр объекта.
'Verbose'
- Отображение информации о прогрессе'true'
(по умолчанию) | 'false'
Отобразите информацию о прогрессе, заданную как 'true'
или 'false'
.
Это свойство применяется только при использовании ImageDatastore
входной параметр объекта.
C
- Категориальные меткиКатегориальные метки, возвращенные как категориальный массив. Категориальный массив связывает метку с каждым пикселем или вокселью в вход изображении. Изображения, возвращенные readall
(datastore
) имеют соответствие один к одному с категориальными матрицами, возвращаемыми readall
(pixelLabelDatastore
). Элементы массива меток соответствуют пиксельным или воксельным элементам входного изображения. Если вы выбираете информация только для чтения, то метки ограничены областью в информация только для чтения. Пикселям изображений и вокселям за пределами интересующей области присваивается < undefined
> категориальная метка.
Тип изображения | Категориальный формат метки |
---|---|
Одно 2-D изображение | 2-D матрица размера H -by - W. Элементный C (i, j) - категориальная метка, назначенная пикселю I (i, j). |
Серия P 2-D изображений | Трехмерный массив размера H -by- W -by- P. Элементный C (i, j, p) - категориальная метка, назначенная пикселю I (i, j, p). |
Одно 3-D изображение | Трехмерный массив размера H -by- W -by- D. Элементный C (i, j, k) - категориальная метка, присвоенная воксель I (i, j, k). |
Серия P 3-D изображений | 4-D массив размера H -by- W -by- D -by- P. Элементный C (i, j, k, p) - категориальная метка, присвоенная воксель I (i, j, k, p). |
score
- Оценки достоверностиОценки достоверности для каждой категориальной метки в C
, возвращенный как массив значений между 0
и 1
. Эти счета представляют доверию в предсказанных метках C
. Более высокие значения баллов указывают на более высокое доверие в предсказанной метке.
Тип изображения | Формат счета |
---|---|
Одно 2-D изображение | 2-D матрица размера H -by - W. Элементный score (i, j) - классификационная оценка пикселя I (i, j). |
Серия P 2-D изображений | Трехмерный массив размера H -by- W -by- P. Элементный score (i, j, p) - классификационная оценка пикселя I (i, j, p). |
Одно 3-D изображение | Трехмерный массив размера H -by- W -by- D. Элементный score (i, j, k) - классификационная оценка воксель I (i, j, k). |
Серия P 3-D изображений | 4-D массив размера H -by- W -by- D -by- P. Элементный score (i, j, k, p) - классификационная оценка воксель I (i, j, k, p). |
allScores
- Оценки для всех категорий метокОценки для всех категорий меток, которые может классифицировать входная сеть, возвращенные как числовой массив. Формат массива описан в следующей таблице. L представляет общее количество категорий меток.
Тип изображения | Формат всех счетов |
---|---|
Одно 2-D изображение | Трехмерный массив размера H -by- W -by- L. Элементный allScores (i, j, q) - счет q-й метки в пикселе I (i, j). |
Серия P 2-D изображений | 4-D массив размера H -by- W -by- L -by- P. Элементный allScores (i, j, q, p) - счет q-й метки в пикселе I (i, j, p). |
Одно 3-D изображение | 4-D массив размера H -by- W -by- D -by- L. Элементный allScores (i, j, k, q) - счет q-й метки в воксели I (i, j, k). |
Серия P 3-D изображений | Массив 5-D размера <reservedrangesplaceholder5>-by-<reservedrangesplaceholder4>-by-<reservedrangesplaceholder3>-by-<reservedrangesplaceholder2>-by-<reservedrangesplaceholder1>. Элементный allScores (i, j, k, q, p) - счет q-й метки в воксели I (i, j, k, p). |
pxds
- Результаты семантической сегментацииPixelLabelDatastore
объектРезультаты семантической сегментации, возвращенные как pixelLabelDatastore
объект. Объект содержит результаты семантической сегментации для всех изображений, содержащихся в ds
входной объект. Результат для каждого изображения сохраняется как отдельный uint8
пометить матрицы изображений PNG. Вы можете использовать read
(pxds
) для возврата категориальных меток, присвоенных изображениям в ds
.
Изображения в выходах readall
(ds
) имеют соответствие один к одному с категориальными матрицами в выходах readall
(pxds
).
Чтобы запустить параллельно, установите 'UseParallel'
на true
или включите это по умолчанию, используя настройки Computer Vision Toolbox™.
Для получения дополнительной информации смотрите Поддержку Parallel Computing Toolbox.
evaluateSemanticSegmentation
| labeloverlay
| trainNetwork
(Deep Learning Toolbox)ImageDatastore
| pixelLabelDatastore
| dlnetwork
(Deep Learning Toolbox)У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.