Йоханна Пингель

Это сообщение от Oge Marques, PhD и профессора технических и компьютерных наук в FAU. Оге является Заслуженным докладчиком ACM, автором книги и стипендиатом Лешнера AAAS 2019–20. Он также является поклонником MATLAB и использует MATLAB в своих классах более 20 лет. Вы также можете следить за ним в Твиттере (@ProfessorOge)

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

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

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

Эффективность и преимущества аугментации данных широко описаны в литературе: было показано, что аугментация данных может выступать в качестве регуляризатора в предотвращении переобучения в нейронных сетях [1, 2] и улучшать производительность в задачах с несбалансированными классами [3]. Кроме того, на протяжении многих лет в наиболее заметных задачах и соревнованиях по классификации изображений (таких как ImageNet) применялось увеличение данных. Это также мотивировало недавнюю работу по разработке методов, позволяющих нейронной сети изучать дополнения, которые лучше всего улучшают классификатор [4].

Реализация увеличения данных в MATLAB

Увеличение данных изображения может быть достигнуто двумя способами [5]:

  1. автономная аугментация: которая состоит из выполнения преобразований изображений (потенциально с использованием возможностей пакетной обработки изображений MATLAB [6]) и сохранения результатов на диске, тем самым увеличивая размер набора данных на коэффициент, равный количество выполненных трансформаций. Это может быть приемлемо для небольших наборов данных.
  2. онлайн-аугментация или аугментация на лету, заключающаяся в выполнении преобразований мини-пакетов, которые будут передаваться модели во время обучения. Этот метод предпочтительнее для больших наборов данных, чтобы избежать потенциально взрывоопасного увеличения требований к хранилищу.

MATLAB предоставляет элегантное и простое в использовании решение для онлайн-аугментации данных изображений, которое состоит из двух основных компонентов:

  • augmentedImageDatastore: создает пакеты новых изображений после предварительной обработки исходных обучающих изображений с использованием таких операций, как поворот, перемещение, сдвиг, изменение размера или отражение (переворот).
  • imageDataAugmenter: используется для настройки выбранных операций предварительной обработки для увеличения данных изображения.

Следующие параметры увеличения данных изображения доступны в MATLAB с использованием объекта imageDataAugmenter:

  • Вращение
  • Отражение вокруг оси X (переворот влево-вправо) или Y (переворот вверх ногами)
  • Горизонтальное и вертикальное масштабирование
  • Горизонтальная и вертикальная резка
  • Горизонтальный и вертикальный перевод

Здесь стоит упомянуть несколько моментов:

  • Когда вы инициализируете переменную imageDataAugmenter, вы можете выбрать один или несколько параметров, например, только отражение по осям X и Y, а также горизонтальное и вертикальное масштабирование, как показано во фрагменте кода ниже.
imageAugmenter = imageDataAugmenter( ...
    'RandXReflection', true, ...
    'RandXScale',[1,2], ...
    'RandYReflection', true, ...
    'RandYScale',[1,2]);
  • Значения, которые вы передаете в качестве параметров некоторым параметрам (например, [1 2] для масштабирования X и Y выше), предназначены для представления диапазона значений, из которого случайно будет выбран на этапе предварительной обработки, если это преобразование применяется к изображению.
  • В imageDataAugmenter также есть опция для предоставления функции, определяющей диапазон значений для определенного параметра, например случайный поворот между -5 и 5 градусами (см. фрагмент кода ниже).
imageAugmenter = imageDataAugmenter('RandRotation',@() -5 + 10 * rand);
  • Есть два способа получить доступ к реальным предварительно обработанным изображениям (например, для просмотра и отображения):
  1. Начиная с R2018a, в augmentedImageDatastore существуют методы чтения/предварительного просмотра, которые позволяют получить пример пакета изображений (см. Пример классификации цветов: [8] )
imageAugmenter = imageDataAugmenter('RandRotation',@() -20+40*rand);

augImds = ... augmentedImageDatastore(imageSize,imds,'DataAugmentation',imageAugmenter);

% Preview augmentation results
batchedData = preview(augImds);
imshow(imtile(batchedData.input))

2. Начиная с R2018b, в imageDataAugmenter был добавлен новый метод (augment), который служит двум целям: он функционирует как автономный объект-функция, а также как объект конфигурации для augmentedImageDatastore (см. приведенный ниже фрагмент кода, который может** создавать перевернутое влево-вправо изображение, как на рис. 2).

In = imread(which('peppers.png'));
Aug = imageDataAugmenter('RandXReflection',true);
Out = augment(Aug,In);
figure, montage({In, Out})

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

augmentedImageDatastore и imageDataAugmenter хорошо интегрируются с рабочим процессом обучения нейронной сети, который состоит из [7]:

  1. Выберите тренировочные изображения, которые вы можете хранить как ImageDatastore — объект, используемый для управления коллекцией файлов изображений, где каждое отдельное изображение помещается в памяти, но вся коллекция изображений не обязательно помещается. Эта функция, доступная с R2015b, предназначена для чтения пакетов изображений для более быстрой обработки в приложениях машинного обучения и компьютерного зрения.
  2. Выберите и настройте нужные параметры предварительной обработки изображения (например, диапазон углов поворота в градусах или диапазон расстояний горизонтального перемещения в пикселях, из которых конкретные значения будут выбираться случайным образом) и создайте imageDataAugmenter. объект, инициализированный с правильным синтаксисом.
  3. Создайте augmentedImageDatastore, указав тренировочные изображения, размер выходных изображений и используемый imageDataAugmenter. Размер выходных изображений должен быть совместим с размером, ожидаемым входным слоем сети.
  4. Обучите сеть, указав augmentedImageDatastore в качестве источника данных для функции trainNetwork. Для каждой итерации обучения хранилище данных дополненных изображений генерирует один мини-пакет обучающих данных, применяя случайные преобразования к исходным изображениям в базовых данных, из которых было создано augmentedImageDatastore (см. рис. 3).

Полный пример задачи классификации изображений с использованием небольшого набора данных изображений цветов с увеличением данных изображения и без него см. в моем вкладе MATLAB File Exchange [8].

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

Еще раз спасибо Oge за подробное изучение увеличения данных. У вас есть вопросы к Оге? Оставьте комментарий ниже!

Ссылки

Первоначально опубликовано на https://blogs.mathworks.com 22 августа 2019 г.