Сегментация семантического изображения с использованием глубокого обучения
возвращает семантическую сегментацию для коллекции изображений в pxds = semanticseg(ds,network)ds, объект хранилища данных.
Функция поддерживает параллельные вычисления с использованием нескольких работников MATLAB ®. Параллельные вычисления можно включить с помощью диалогового окна «Настройки панели инструментов компьютерного зрения».
[___] = semanticseg(___, возвращает семантическую сегментацию с дополнительными опциями, заданными одним или несколькими аргументами пары имя-значение.Name,Value)
Наложение результатов сегментации на изображение и отображение результатов.
Загрузите предварительно обученную сеть.
data = load('triangleSegmentationNetwork');
net = data.netnet =
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]
В этом примере показано, как определить и создать пользовательский слой классификации пикселей, использующий потери Тверского.
Этот уровень может использоваться для обучения сетей семантической сегментации. Дополнительные сведения о создании пользовательских слоев глубокого обучения см. в разделе Определение пользовательских слоев глубокого обучения (панель инструментов глубокого обучения).
Тверской проигрыш
Потеря Тверского основана на индексе Тверского для измерения перекрытия между двумя сегментированными изображениями [1]. Индекс TIc Тверского между одним изображением и соответствующей истинностью основания задается
соответствует классу, а соответствует отсутствию в классе c .
- количество элементов вдоль первых двух размеров .
и являются весовыми коэффициентами, которые контролируют вклад ложных срабатываний и ложных негативов для каждого класса в потерю.
Потеря над числом классов задается
Шаблон классификационного слоя
Скопируйте шаблон классификационного слоя в новый файл в 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, чтобы сохранить это значение. Также требуется два переменных свойства Alpha и 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
Создание функции форвардных потерь
Создание функции с именем forwardLoss возвращает взвешенные потери перекрестной энтропии между прогнозами, сделанными сетью, и целями обучения. Синтаксис для forwardLoss является loss = forwardLoss(layer,Y,T), где Y является выводом предыдущего уровня и T представляет цели обучения.
Для проблем семантической сегментации, измерения T соответствует размерности Y, где Y является 4-D массивом размера Hоколо-Wоколо-Kоколо-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
Совместимость графического процессора
Функции MATLAB, используемые в forwardLoss в tverskyPixelClassificationLayer вся поддержка gpuArray входы, поэтому уровень совместим с графическим процессором.
Проверка достоверности выходного уровня
Создайте экземпляр слоя.
layer = tverskyPixelClassificationLayer('tversky',0.7,0.3);Проверьте действительность слоя с помощью checkLayer (инструментарий глубокого обучения). Укажите допустимый размер ввода, который должен быть размером одного наблюдения за типовым вводом в слой. Слой ожидает Hоколо-Wоколо-Kоколо-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 и 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-е цветное изображение или 2-е многоспектральное изображение | 3-D массив размера H-за-W-за-С. Количество цветовых каналов C равно 3 для цветных изображений. |
| Серия изображений P 2-D | 4-D массив размера H-по-W-по-C-по-П. Количество цветовых каналов C равно 1 для изображений в градациях серого и 3 для цветных изображений. |
| Единственное 3D изображение оттенков серого с глубиной D | 3-D массив размера H-за-W-за-D |
| Единственное 3D цветное изображение или 3D многоспектральное изображение | 4-D массив размера H-за-W-за-D-за-С. Количество цветовых каналов C равно 3 для цветных изображений. |
| Серия изображений P 3-D | 5-D массив размера H-by-W-by-D-by-C-by-P |
Входное изображение также может быть gpuArray(Панель инструментов параллельных вычислений), содержащая один из предшествующих типов изображений (требуется Toolbox™ параллельных вычислений).
Типы данных: uint8 | uint16 | int16 | double | single | logical
network - СетьSeriesNetwork объект | DAGNetwork объект | dlnetwork объектСеть, указанная как SeriesNetwork (инструментарий глубокого обучения), DAGNetwork (инструментарий глубокого обучения), или dlnetwork(Панель инструментов глубокого обучения).
roi - Регион интересовРегион интересов, указанный как один из следующих.
| Тип изображения | Формат окупаемости инвестиций |
|---|---|
| 2-D изображение | 4-элементный вектор вида [x, y, width, height] |
| 3-D изображение | 6-элементный вектор вида [x, y, z, ширина, высота, глубина] |
Вектор определяет прямоугольную или кубоидальную интересующую область, полностью содержащуюся во входном изображении. Пикселы изображения за пределами интересующей области назначаются <undefined> категориальная метка. Если входное изображение состоит из ряда изображений, то semanticseg применяет то же самое roi ко всем изображениям в серии.
ds - Коллекция изображенийКоллекция изображений, указанная как хранилище данных. read функция хранилища данных должна возвращать числовой массив, массив ячеек или таблицу. Для массивов ячеек или таблиц с несколькими столбцами функция обрабатывает только первый столбец.
Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения (панель инструментов глубокого обучения).
Укажите дополнительные пары, разделенные запятыми 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' | Используйте графический процессор, если он доступен. В противном случае используйте ЦП. Для использования графического процессора необходима панель инструментов параллельных вычислений и графический процессор NVIDIA ® с поддержкой CUDA ®. Сведения о поддерживаемых вычислительных возможностях см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). |
'gpu' | Используйте графический процессор. Если подходящий графический процессор недоступен, функция возвращает сообщение об ошибке. |
'cpu' | Используйте ЦП. |
'Acceleration' - Оптимизация производительности'auto' (по умолчанию) | 'mex' | 'none'Оптимизация производительности, указанная как 'auto', 'mex', или 'none'.
| Ускорение | Описание |
|---|---|
'auto' | Автоматическое применение ряда оптимизаций, подходящих для входной сети и аппаратных ресурсов. |
'mex' | Скомпилировать и выполнить функцию MEX. Эта опция доступна только при использовании графического процессора. Также должен быть установлен компилятор C/C + +. Инструкции по установке см. в разделе Настройка MEX (кодер графического процессора). |
'none' | Отключить все ускорения. |
Параметр по умолчанию: 'auto'. Если вы используете 'auto' , то MATLAB никогда не генерирует функцию MEX.
Использование 'Acceleration' варианты 'auto' и 'mex' может обеспечить преимущества производительности, но за счет увеличенного начального времени выполнения. Последующие вызовы с совместимыми параметрами выполняются быстрее. Оптимизация производительности используется при планировании многократного вызова функции с использованием новых входных данных.
'mex' генерирует и выполняет функцию MEX на основе сети и параметров, используемых в вызове функции. Вы можете иметь несколько функций MEX, связанных с одной сетью одновременно. При сбросе сетевой переменной также удаляются все функции MEX, связанные с этой сетью.
'mex' доступна только при использовании графического процессора. Для использования графического процессора требуется панель инструментов параллельных вычислений и графический процессор NVIDIA с поддержкой CUDA. Сведения о поддерживаемых вычислительных возможностях см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Если панель параллельных вычислений или подходящий графический процессор недоступны, функция возвращает ошибку.
'mex' ускорение не поддерживает сети, указанные как dlnetwork(Панель инструментов глубокого обучения).
'mex' ускорение не поддерживает все слои. Список поддерживаемых слоев см. в разделе Поддерживаемые слои (кодер графического процессора).
'Classes' - Классы, по которым классифицируются пикселы или воксели'auto' (по умолчанию) | массив ячеек символьных векторов | строковый вектор | категориальный векторКлассы, по которым классифицируются пикселы или воксели, указанные как 'auto', клеточный массив символьных векторов, строковый вектор или категориальный вектор. Если значение является категориальным вектором Y, то элементы вектора сортируются и упорядочиваются согласно categories(Y).
Если сеть является сетью dlnetwork Объект (Deep Learning Toolbox), а затем число классов, указанное в 'Classes"" должно соответствовать количеству каналов в выходных данных сетевых прогнозов ". По умолчанию, когда 'Classes'имеет значение 'auto'классы нумеруются от 1 до C, где C - количество каналов на выходном уровне сети.
Если сеть является сетью SeriesNetwork (инструментарий глубокого обучения) или DAGNetwork Объект (Deep Learning Toolbox), а затем число классов, указанное в 'Classes"" должно соответствовать количеству классов в выходном слое классификации ". По умолчанию, когда 'Classes'имеет значение 'auto'классы автоматически устанавливаются с использованием выходного уровня классификации.
'WriteLocation' - Расположение папкиpwd (текущая рабочая папка) (по умолчанию) | строковый скаляр | символьный векторРасположение папки, указанное как pwd (текущая рабочая папка), строковый скаляр или символьный вектор. Указанная папка должна существовать и иметь разрешения на запись.
Это свойство применяется только при использовании ImageDatastore ввод объекта.
'NamePrefix' - Префикс, применяемый к именам выходных файлов'pixelLabel' (по умолчанию) | строковый скалярный | символьный векторПрефикс, применяемый к именам выходных файлов, задается как строковый скалярный или символьный вектор. Файлы изображений называются следующим образом:
, где prefix_N.png соответствует индексу входного файла изображения, Nimds.Files(N).
Это свойство применяется только при использовании ImageDatastore ввод объекта.
'Verbose' - Отображение информации о ходе выполнения'true' (по умолчанию) | 'false'Отображение информации о ходе выполнения, указанной как 'true' или 'false'.
Это свойство применяется только при использовании ImageDatastore ввод объекта.
C - Категориальные этикеткиКатегориальные метки, возвращаемые как категориальный массив. Категориальный массив связывает метку с каждым пикселом или вокселом во входном изображении. Изображения, возвращенные readall(datastore) имеют соответствие один к одному с категориальными матрицами, возвращенными readall(pixelLabelDatastore). Элементы матрицы меток соответствуют элементам пикселя или вокселя входного изображения. При выборе ROI метки ограничиваются областью в ROI. Пикселы изображения и вокселы за пределами интересующей области присваиваются <undefined> категориальная метка.
| Тип изображения | Формат категориальной метки |
|---|---|
| Изображение одного 2-D | 2-D матрица размера H-by-W. Элемент C(i, j) - категориальная метка, назначенная пикселюI(i, j). |
| Серия изображений P 2-D | 3-D массив размера H-за-W-за-П. Элемент C(i, j, p) - категориальная метка, назначенная пикселюI(i, j, p). |
| Изображение одного 3-D | 3-D массив размера H-за-W-за-D. Элемент C(i, j, k) - категориальная метка, присвоенная вокселуI(i, j, k). |
| Серия изображений P 3-D | 4-D массив размера H-по-W-по-D-по-П. Элемент 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 | 3-D массив размера H-за-W-за-П. Элемент score(i, j, p) - оценка классификации пикселяI(i, j, p). |
| Изображение одного 3-D | 3-D массив размера H-за-W-за-D. Элемент score(i, j, k) - классификационный балл вокселяI(i, j, k). |
| Серия изображений P 3-D | 4-D массив размера H-по-W-по-D-по-П. Элемент score(i, j, k, p) - классификационный балл вокселяI(i, j, k, p). |
allScores - Оценки для всех категорий этикетокОценки для всех категорий меток, которые может классифицировать входная сеть, возвращаемые в виде числового массива. Формат массива описан в следующей таблице. L представляет общее число категорий меток.
| Тип изображения | Формат всех баллов |
|---|---|
| Изображение одного 2-D | 3-D массив размера H-by-W-by-L. Элемент allScores(i, j, q) - оценка qth-метки в пикселеI(i, j). |
| Серия изображений P 2-D | 4-D массив размера H-by-W-by-L-by-P. Элемент allScores(i, j, q, p) - оценка qth-метки в пикселеI(i, j, p). |
| Изображение одного 3-D | 4-D массив размера H-by-W-by-D-by-L. Элемент allScores(i, j, k, q) - оценка qth метки в вокселеI(i, j, k). |
| Серия изображений P 3-D | 5-D массив размера H-по-W-по-D-по-L-по-П. Элемент allScores(i, j, k, q, p) - оценка qth метки в вокселеI(i, j, k, p). |
pxds - Результаты семантической сегментацииPixelLabelDatastore объектРезультаты семантической сегментации, возвращенные как pixelLabelDatastore объект. Объект содержит результаты семантической сегментации для всех изображений, содержащихся в ds входной объект. Результат для каждого изображения сохраняется как отдельный uint8 матрицы меток изображений PNG. Вы можете использовать read(pxds) для возврата категориальных меток, назначенных изображениям в ds.
Изображения в выходных данных readall(ds) имеют соответствие один к одному с категориальными матрицами в выводе readall(pxds).
Параллельный запуск, установка 'UseParallel' кому true или включите его по умолчанию с помощью настроек Toolbox™ компьютерного зрения.
Дополнительные сведения см. в разделе Поддержка панели инструментов параллельных вычислений.
evaluateSemanticSegmentation | labeloverlay | trainNetwork (инструментарий для глубокого обучения)ImageDatastore | pixelLabelDatastore | dlnetwork (инструментарий для глубокого обучения)Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.