Создайте и исследуйте Datastore для классификации изображений

Этот пример показов, как создать, прочитать и увеличить изображение datastore для использования в обучении нейронной сети для глубокого обучения. В частности, в этом примере показано, как создать ImageDatastore объект из набора изображений, чтение и извлечение свойств datastore и создание augmentedImageDatastore для использования во время обучения.

Создайте Image Datastore

Использование imageDatastore объект для управления большим набором изображений, которая не может полностью помещаться в памяти. Большие наборы изображений распространены в применениях глубокого обучения, которые регулярно включают обучение на тысячах маркированных изображений. Эти изображения часто хранятся в папке с подпапками, содержащими изображения для каждого класса.

Загрузка набора данных

Этот пример использует набор данных Example Food Images, который содержит 978 фотографий пищи в девяти классах и имеет размер приблизительно 77 МБ. Загрузите ExampleFoodImageDataset.zip файл с сайта MathWorks, затем разархивируйте файл.

zipFile = matlab.internal.examples.downloadSupportFile('nnet','data/ExampleFoodImageDataset.zip'); 
filepath = fileparts(zipFile); 
dataFolder = fullfile(filepath,'ExampleFoodImageDataset'); 
unzip(zipFile,dataFolder); 

Изображения в этом наборе данных разделяются на подпапки для каждого класса.

Создайте image datastore из изображений в пути и их подпапках. Используйте имена папок в качестве имен меток.

foodImds = imageDatastore(dataFolder, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

Свойства Datastore

Извлеките свойства datastore.

Найдите общее количество наблюдений. Этот набор данных имеет 978 наблюдений, разделенных на девять классов.

numObs = length(foodImds.Labels)
numObs = 978

Найдите количество наблюдений на класс. Можно видеть, что этот набор данных не содержит равное количество наблюдений в каждом классе.

numObsPerClass = countEachLabel(foodImds)
numObsPerClass=9×2 table
        Label        Count
    _____________    _____

    caesar_salad       26 
    caprese_salad      15 
    french_fries      181 
    greek_salad        24 
    hamburger         238 
    hot_dog            31 
    pizza             299 
    sashimi            40 
    sushi             124 

Можно также визуализировать распределение меток классов с помощью гистограммы.

histogram(foodImds.Labels)
set(gca,'TickLabelInterpreter','none')

Исследуйте Datastore

Проверьте, что данные являются ожидаемыми, просматривая случайный выбор изображений из datastore.

numObsToShow = 8;
idx = randperm(numObs,numObsToShow);
imshow(imtile(foodImds.Files(idx),'GridSize',[2 4],'ThumbnailSize',[100 100]))

Можно также просмотреть изображения, которые относятся к определенному классу.

class = "pizza";
idxClass = find (foodImds.Labels = = класс);
idx = randsample (idxClass, numObsToShow);
imshow (imtile Файлов (idx),'GridSize',[2 4],'ThumbnailSize',[100 100]));

Чтобы присмотреться к отдельным изображениям в хранилище datastore или папке, используйте приложение Image Browser (Image Processing Toolbox).

Увеличение изображения

Увеличение позволяет вам обучать сети, чтобы быть инвариантными к искажениям в данных изображений. Для примера можно добавить рандомизированные повороты к входным изображениям, так что сеть инвариантна наличию вращения. Система координат augmentedImageDatastore объект предоставляет удобный способ применения ограниченного набора дополнений к 2-D изображений для задач классификации.

Задайте схему увеличения. Эта схема применяет случайное вращение между [-90,90] степенями и случайное масштабирование между [1,2]. Дополненный datastore автоматически изменяет размер изображений на inputSize значение во время обучения.

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-90 90], ...
    'RandScale',[1 2]);

inputSize = [100 100]; 

Используя схему увеличения, задайте datastore дополненного изображения.

augFoodImds = augmentedImageDatastore(inputSize,foodImds, ...
    'DataAugmentation',imageAugmenter);

Дополненный datastore содержит то же количество изображений, что и оригинального изображения datastore.

augFoodImds.NumObservations
ans = 978

Когда вы используете дополненный image datastore в качестве источника обучающих изображений, datastore случайным образом возмущает обучающие данные для каждой эпохи, где эпоха является полным проходом алгоритма настройки по всему набору обучающих данных. Поэтому каждая эпоха использует несколько другой набор данных, но фактическое количество обучающих изображений в каждой эпохе не меняется.

Визуализация дополненных данных

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

Перетащите datastore.

augFoodImds = shuffle(augFoodImds);

The augmentedImageDatastore объект применяет преобразования при чтении datastore и не хранит преобразованные изображения в памяти. Следовательно, каждый раз, когда вы читаете одни и те же изображения, вы видите случайную комбинацию заданных увеличений.

Используйте read функция для чтения подмножества дополненного datastore.

subset1 = read(augFoodImds);

Перед вызовом read и повторным чтением подмножества datastore установите в его состояние.

reset(augFoodImds)
subset2 = read(augFoodImds);

Отображение двух подмножеств дополненных изображений.

imshow(imtile(subset1.input,'GridSize',[2 4]))

imshow(imtile(subset2.input,'GridSize',[2 4]))

Можно увидеть, что оба образцов показывают одинаковые изображения с различными преобразованиями. Применение преобразований к изображениям полезно в применениях глубокого обучения, так как можно обучать сеть на случайным образом измененных версиях изображения. Это подвергает сеть различным изменениям изображений из этого класса и позволяет ей учиться классифицировать изображения, даже если они имеют различные визуальные свойства.

После создания объекта datastore используйте приложение Deep Network Designer или trainNetwork функция для обучения сети классификации изображений. Для получения примера смотрите Перенос обучения с использованием предварительно обученной сети.

Для получения дополнительной информации о предварительной обработке изображений для приложений применений глубокого обучения «Предварительная обработка изображений для глубокого обучения». Можно также применить более продвинутые увеличения, такие как меняющиеся уровни яркости или насыщения, при помощи transform и combine функций. Для получения дополнительной информации смотрите Datastores для глубокого обучения.

См. также

| | |

Похожие темы