Поддерживаемые форматы файлов для объемных данных изображения включают MAT-файлы, Цифровую Обработку изображений и Коммуникации в Медицине (DICOM) файлы и Нейрообработка изображений Технологической Инициативы Информатики (NIfTI) файлы.
Можно считать объемные данные изображения в ImageDatastore
. Когда вы создаете datastore изображений, задаете аргумент 'FileExtensions'
как расширения файла ваших данных. Задайте свойство ReadFcn
как указатель на функцию, который считывает данные формата файла. Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.
Таблица показывает, как создать datastore изображений для каждых из поддерживаемых форматов файлов. Аргумент filepath
задает путь к файлам или папке, содержащей данные изображения.
Формат файла изображения | Отобразите создание Datastore |
---|---|
MAT |
volds = imageDatastore(filepath, ... 'FileExtensions','.mat','ReadFcn',@(x) matRead(x)); Необходимо создать функцию
function data = matRead(filename) % data = matRead(filename) reads the image data in the MAT-file filename inp = load(filename); f = fields(inp); data = inp.(f{1}); end |
DICOM |
volds = imageDatastore(filepath, ... 'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x)); Используя файлы DICOM для 3-D глубокого обучения требует, чтобы данные об объеме хранились в одном файле. Вы не можете данные об объеме, которые разделены на файлы повторного изображения. Для получения дополнительной информации о формате файла DICOM, смотрите |
NIfTI | volds = imageDatastore(filepath, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); Для получения дополнительной информации о формате файла NIfTI, смотрите |
Чтобы выполнить семантическую сегментацию объемных данных, у вас должны быть метки, соответствующие данным изображения.
Можно считать объемные данные о метке в PixelLabelDatastore
. Когда вы создаете пиксельный datastore метки, задаете аргумент 'FileExtensions'
как расширения файла ваших данных. Задайте свойство ReadFcn
как указатель на функцию, который считывает данные формата файла.
Таблица показывает, как создать пиксельный datastore метки для каждых из поддерживаемых форматов файлов. Аргумент filepath
задает путь к файлам или папке, содержащей данные о метке. Аргументы classNames
и pixelLabelID
задают отображение значений метки воксела к именам классов.
Формат файла изображения | Пиксельное создание Datastore метки |
---|---|
MAT |
pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.mat','ReadFcn',@(x) matRead(x)); Необходимо создать функцию
function data = matRead(filename) % data = matRead(filename) reads the label data in the MAT-file filename inp = load(filename); f = fields(inp); data = inp.(f{1}); end |
DICOM |
pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x)); Используя файлы DICOM для 3-D глубокого обучения требует, чтобы данные об объеме хранились в одном файле. Вы не можете данные об объеме, которые разделены на файлы повторного изображения. Для получения дополнительной информации о формате файла DICOM, смотрите |
NIfTI | pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ... 'FileExtensions','.nii','ReadFcn',@(x) niftiread(x)); Для получения дополнительной информации о формате файла NIfTI, смотрите |
Чтобы сопоставить объемное изображение и данные о метке для семантической сегментации или два объемных хранилища данных изображений для регрессии, используют randomPatchExtractionDatastore
. Случайный datastore экстракции закрашенной фигуры извлекает соответствующие случайным образом расположенные закрашенные фигуры от двух хранилищ данных. Исправление является общим методом, чтобы предотвратить исчерпывание памяти когда обучение с произвольно большими объемами. Задайте размер закрашенной фигуры, который совпадает с входным размером сети и, для эффективности памяти, меньше, чем полный размер объема, такой как 64 64 64 вокселами.
Можно также использовать функцию combine
, чтобы сопоставить два хранилища данных. Однако соединение двух хранилищ данных с помощью randomPatchExtractionDatastore
обладает несколькими преимуществами по combine
.
Поддержки randomPatchExtractionDatastore
параллельны обучению, обучению мультиграфического процессора и чтению упреждающей выборки. Задайте параллель или обучение мультиграфического процессора использование аргумента пары "имя-значение"
'ExecutionEnvironment'
trainingOptions
. Задайте чтение упреждающей выборки с помощью аргумента пары "имя-значение"
'DispatchInBackground'
trainingOptions
. Чтение упреждающей выборки требует Parallel Computing Toolbox™.
randomPatchExtractionDatastore
по сути поддерживает экстракцию закрашенной фигуры. Напротив, чтобы извлечь закрашенные фигуры от CombinedDatastore
, необходимо задать собственную функцию, которую обрезки отображают в закрашенные фигуры, и затем используйте функцию transform
, чтобы применить операции обрезки.
randomPatchExtractionDatastore
может сгенерировать несколько закрашенных фигур изображений от одного тестового изображения. Экстракция закрашенной фигуры One-many эффективно увеличивает сумму доступных данных тренировки.
Глубокое обучение часто требует, чтобы данные были предварительно обработаны и увеличены. Например, можно хотеть нормировать интенсивность изображений, улучшить контрастность изображений или добавить рандомизированные аффинные преобразования, чтобы предотвратить сверхподбор кривой.
Чтобы предварительно обработать объемные данные, используйте функцию transform
. transform
создает измененную форму datastore, названного underlying datastore, путем преобразования данных, считанных базовым datastore согласно набору операций, которые вы задаете в пользовательской функции. Image Processing Toolbox™ обеспечивает несколько функций, которые принимают объемный вход. Для полного списка функций смотрите 3-D Объемную Обработку изображений (Image Processing Toolbox). Можно также предварительно обработать объемные изображения с помощью функций в MATLAB®, которые работают над многомерными массивами.
Пользовательская функция преобразования должна принять данные в формате, возвращенном функцией read
базового datastore.
Лежание в основе Datastore | Формат входа к пользовательской функции преобразования |
---|---|
ImageDatastore | Вход к пользовательской функции преобразования зависит от свойства
Для получения дополнительной информации смотрите функцию |
PixelLabelDatastore | Вход к пользовательской функции преобразования зависит от свойства
Для получения дополнительной информации смотрите функцию |
randomPatchExtractionDatastore | Вход к пользовательской функции преобразования должен быть таблицей с двумя столбцами. Для получения дополнительной информации смотрите функцию |
RandomPatchExtractionDatastore
не поддерживает свойство DataAugmentation
для объемных данных. Чтобы применить случайные аффинные преобразования к объемным данным, необходимо использовать transform
.
Функция transform
должна возвратить данные, которые совпадают с входным размером сети. Функция transform
не поддерживает one-many отображения наблюдения.
Этот пример кода показывает, как преобразовать объемные данные в datastore изображений volds
с помощью произвольного конвейера предварительной обработки, заданного в функциональном preprocessVolumetricIMDS
. Пример принимает, что ReadSize
volds
больше, чем 1.
dsTrain = transform(volds,@(x) preprocessVolumetricIMDS(x,inputSize));
Задайте функцию preprocessVolumetricIMDS
, которая выполняет желаемые преобразования данных, считанных из базового datastore. Функция должна принять массив ячеек данных изображения. Функциональные циклы через каждое изображение чтения и преобразовывают данные согласно этому конвейеру предварительной обработки:
Случайным образом вращайте изображение о z - ось.
Измените размер объема к размеру, ожидаемому сетью.
Создайте шумную версию изображения с Гауссовым шумом.
Возвратите изображение в массиве ячеек.
function dataOut = preprocessVolumetricIMDS(data,inputSize) numRows = size(data,1); dataOut = cell(numRows,1); for idx = 1:numRows % Perform randomized 90 degree rotation about the z-axis data = imrotate3(data{idx,1},90*(randi(4)-1),[0 0 1]); % Resize the volume to the size expected by the network dataClean = imresize(data,inputSize); % Add zero-mean Gaussian noise with a normalized variance of 0.01 dataNoisy = imnoise(dataClean,'gaussian',0.01); % Return the preprocessed data dataOut(idx) = dataNoisy; end end
Этот пример кода показывает, как преобразовать объемные данные в случайный datastore экстракции закрашенной фигуры volds
с помощью произвольного конвейера предварительной обработки, заданного в функциональном preprocessVolumetricPatchDS
. Пример принимает, что ReadSize
volds
равняется 1.
dsTrain = transform(volds,@preprocessVolumetricPatchDS);
Задайте функцию preprocessVolumetricPatchDS
, которая выполняет желаемые преобразования данных, считанных из базового datastore. Функция должна принять таблицу. Функция преобразовывает данные согласно этому конвейеру предварительной обработки:
Случайным образом выберите одно из пяти увеличений.
Примените то же увеличение к данным в обоих столбцах таблицы.
Возвратите увеличенную пару изображений в таблице.
function dataOut = preprocessVolumetricPatchDS(data) img = data(1); resp = data(2); % 5 augmentations: nil,rot90,fliplr,flipud,rot90(fliplr) augType = {@(x) x,@rot90,@fliplr,@flipud,@(x) rot90(fliplr(x))}; rndIdx = randi(5,1); imgOut = augType{rndIdx}(img); respOut = augType{rndIdx}(resp); % Return the preprocessed data dataOut = table(imgOut,respOut}; end
imageDatastore
| pixelLabelDatastore
| randomPatchExtractionDatastore
| trainNetwork
| transform