exponenta event banner

Тома предварительной обработки для глубокого обучения

Считывание объемных данных

Поддерживаемые форматы файлов для объемных данных изображения включают файлы MAT, файлы Digital Imaging and Communications in Medicine (DICOM) и файлы Инициативы по технологии нейровизуализации информатики (NIfTI).

Считывание данных объемного изображения в ImageDatastore. Считывание объемных данных метки пикселя в PixelLabelDatastore(Панель инструментов компьютерного зрения). Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.

В таблице показано типичное использование imageDatastore и pixelLabelDatastore для каждого из поддерживаемых форматов файлов. При создании хранилища данных укажите 'FileExtensions' аргумент в качестве расширений файлов данных. Укажите ReadFcn свойство как дескриптор функции, считывающий данные формата файла. filepath аргумент указывает путь к файлам или папке, содержащим данные изображения. Для изображений меток пикселов дополнительные classNames и pixelLabelID аргументы определяют соответствие значений меток вокселя именам классов.

Формат файла изображения

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

ЦИНОВКА

volds = imageDatastore(filepath, ...
   'FileExtensions','.mat','ReadFcn',@(x) fcn(x));

pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ...
    'FileExtensions','.mat','ReadFcn',@(x) fcn(x));
fcn - пользовательская функция, считывающая данные из файла MAT. Например, этот код определяет функцию с именем matRead загружает данные тома из первой переменной файла MAT. Сохранение функции в файле с именем matRead.m.

function data = matRead(filename)
    inp = load(filename);
    f = fields(inp);
    data = inp.(f{1});
end

Том DICOM в одном файле

volds = imageDatastore(filepath, ...
   'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x));

pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ...
   'FileExtensions','.dcm','ReadFcn',@(x) dicomread(x));

Дополнительные сведения о чтении файлов DICOM см. в разделе dicomread(Панель инструментов обработки изображений).

Том DICOM в нескольких файлах

Выполните следующие действия. Пример см. в разделе Создание хранилища данных изображений, содержащего одно- и многофайловые тома DICOM (панель инструментов обработки изображений).

  • Объединение файлов в одно исследование с помощью dicomCollection(Панель инструментов обработки изображений).

  • Прочитайте данные DICOM в исследовании, используя dicomreadVolume(Панель инструментов обработки изображений).

  • Запишите каждый том как MAT-файл.

  • Создать ImageDatastore или PixelLabelDatastore из коллекции файлов MAT, следуя процедуре для файлов MAT.

NIfTI

volds = imageDatastore(filepath, ...
   'FileExtensions','.nii','ReadFcn',@(x) niftiread(x));

pxds = pixelLabelDatastore(filepath,classNames,pixelLabelID, ...
   'FileExtensions','.nii','ReadFcn',@(x) niftiread(x));

Дополнительные сведения о чтении файлов NIfTI см. в разделе niftiread(Панель инструментов обработки изображений).

Связать данные изображения и метки

Чтобы связать данные объемного изображения и метки для семантической сегментации или два хранилища данных объемного изображения для регрессии, используйте randomPatchExtractionDatastore(Панель инструментов обработки изображений). Хранилище данных для извлечения случайных исправлений извлекает соответствующие случайно расположенные исправления из двух хранилищ данных. Патчинг - распространенный метод предотвращения нехватки памяти при тренировках с произвольно большими объёмами. Определите размер участка, который соответствует входному размеру сети и, для эффективности памяти, меньше, чем полный размер объема, такой как 64 64 64 voxels.

Вы также можете использовать combine для связывания двух хранилищ данных. Однако связывание двух хранилищ данных с помощью randomPatchExtractionDatastore имеет несколько преимуществ combine.

  • randomPatchExtractionDatastore поддерживает параллельное обучение, обучение нескольким GPU и чтение предварительных выборок. Укажите параллельное или многопроцессорное обучение с помощью 'ExecutionEnvironment' аргумент пары имя-значение trainingOptions. Укажите чтение предварительной выборки с помощью 'DispatchInBackground' аргумент пары имя-значение trainingOptions. Для чтения предварительной выборки требуется Toolbox™ параллельных вычислений.

  • randomPatchExtractionDatastore по своей сути поддерживает извлечение пластыря. В отличие от этого, для извлечения исправлений из CombinedDatastore, вы должны определить свою собственную функцию, которая собирает изображения в патчи, а затем использовать transform для применения операций обрезки.

  • randomPatchExtractionDatastore может генерировать несколько исправлений изображения из одного тестового изображения. Извлечение исправлений «один ко многим» эффективно увеличивает объем доступных обучающих данных.

Объемные данные предварительной обработки

Глубокое обучение часто требует предварительной обработки и расширения данных. Например, может потребоваться нормализовать интенсивность изображения, повысить контрастность изображения или добавить рандомизированные аффинные преобразования для предотвращения переоборудования.

Для предварительной обработки объемных данных используйте transform функция. transform создает измененную форму хранилища данных, называемую базовым хранилищем данных, путем преобразования данных, считываемых базовым хранилищем данных, в соответствии с набором операций, определенных в пользовательской функции. Toolbox™ обработки изображений предоставляет несколько функций, которые принимают объемный ввод. Для полного списка функций посмотрите 3D Объемную Обработку изображения (Комплект инструментов Обработки изображения). Объемные изображения также можно предварительно обрабатывать с помощью функций MATLAB ®, работающих с многомерными массивами.

Пользовательская функция преобразования должна принимать данные в формате, возвращаемом read функция базового хранилища данных.

Базовое хранилище данных

Формат ввода в пользовательскую функцию преобразования

ImageDatastore

Ввод в пользовательскую функцию преобразования зависит от ReadSize собственность.

  • Когда ReadSize равно 1, функция преобразования должна принимать целочисленный массив. Размер массива соответствует типу изображений в ImageDatastore. Например, изображение в градациях серого имеет размер m-by-n, изображение в цвете «truecolor» имеет размер m-by-n-by-3, а многоспектральное изображение с каналами c имеет размер m-by-n-by-c.

  • Когда ReadSize больше 1, функция преобразования должна принимать массив ячеек данных изображения, соответствующий каждому изображению в пакете.

Дополнительные сведения см. в разделе read функция ImageDatastore.

PixelLabelDatastore

Ввод в пользовательскую функцию преобразования зависит от ReadSize собственность.

  • Когда ReadSize равно 1, функция преобразования должна принимать категориальную матрицу.

  • Когда ReadSize больше 1, функция преобразования должна принимать массив ячеек категориальных матриц.

Дополнительные сведения см. в разделе read (Computer Vision Toolbox) функция PixelLabelDatastore.

RandomPatchExtractionDatastore

Входные данные пользовательской функции преобразования должны представлять собой таблицу с двумя столбцами.

Дополнительные сведения см. в разделе read(Панель инструментов обработки изображений) функции RandomPatchExtractionDatastore.

A RandomPatchExtractionDatastore объект не поддерживает DataAugmentation свойство для объемных данных. Чтобы применить случайные аффинные преобразования к объемным данным в хранилище данных этого типа, необходимо использовать transform функция.

transform функция должна возвращать данные, соответствующие входному размеру сети. transform функция не поддерживает сопоставления «один ко многим».

Пример: Преобразование объемных данных в хранилище данных изображения

Этот пример кода показывает, как преобразовать объемные данные в хранилище данных изображения volDS использование произвольного конвейера предварительной обработки, определенного в функции preprocessVolumetricImage. В примере предполагается, что ReadSize из volDS больше 1.

dsTrain = transform(volDS,@(x) preprocessVolumetricImage(x,inputSize));

Определите preprocessVolumetricImage функция, выполняющая требуемые преобразования данных, считанных из базового хранилища данных. Функция должна принимать массив ячеек данных изображения. Функция проходит через каждое изображение в пакете и преобразует изображение в соответствии с этим конвейером предварительной обработки:

  • Случайное вращение изображения относительно оси Z.

  • Измените размер тома до размера, ожидаемого сетью.

  • Создайте шумную версию изображения с гауссовым шумом.

  • Возврат изображения в массиве ячеек.

function dataOut = preprocessVolumetricImage(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

Пример: Преобразование объемных данных в хранилище данных извлечения случайных исправлений

Этот пример кода показывает, как преобразовать объемные данные в хранилище данных случайного извлечения исправлений volPatchDS использование произвольного конвейера предварительной обработки, определенного в функции augmentVolumetricPatch. В примере предполагается, что ReadSize из volPatchDS равно 1 и что сетевые ответы представляют собой изображения меток пикселей в хранилище данных меток пикселей.

dsTrain = transform(volPatchDS,@(x) augmentVolumetricPatch(x));

Определите augmentVolumetricPatch функция, выполняющая требуемые преобразования данных, считанных из базового хранилища данных. Функция должна принимать таблицу данных изображения из двух столбцов. Функция преобразует данные согласно этому конвейеру предварительной обработки:

  • Случайным образом выберите одно из пяти дополнений.

  • Примените одинаковое увеличение к обоим изображениям.

  • Возврат пары дополненных изображений в таблице.

function dataOut = augmentVolumetricPatch(data)

img = data.InputImage{1};
resp = data.ResponsePixelLabelImage{1};

% 5 augmentations: none, 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 augmented data as a table
dataOut = table({imgOut},{respOut}, ...
    'VariableNames',["InputImage" "ResponsePixelLabelImage"]);

end

См. также

| | | (Панель инструментов компьютерного зрения) | (Панель инструментов обработки изображений)

Связанные примеры

Подробнее