Классификация изображений с использованием сверточной нейронной сети и трансферного обучения

Компьютерное зрение – это область компьютерных наук, в которой основное внимание уделяется воспроизведению сложных частей человеческого зрения и предоставлению компьютерам возможности идентифицировать и обрабатывать объекты на изображениях и видео так же, как это делают люди. делать. На определенном уровне Computer Vision полностью посвящен распознаванию образов. Один из способов научить компьютер понимать визуальные данные — это кормить его изображениями, причем в большом количестве! Тысячи или миллионы, если это возможно, различных изображений, которые были помечены, чтобы затем мы могли подвергнуть эти изображения различным техникам машинного обучения или алгоритмам, которые позволяют компьютеру выявлять закономерности и особенности во всех элементах. которые относятся к этим ярлыкам.

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

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

Прочитав этот пост, вы узнаете:

  • Шаги, необходимые для создания и обучения свёрточной нейронной сети
  • Перенос обучения позволяет напрямую использовать предварительно обученные модели в качестве предварительной обработки извлечения признаков и интегрировать их в совершенно новые модели.

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

  1. Первый шаг к созданию модели машинного обучения – это четкое определение цели. Поскольку наш набор данных предоставляет нам изображения 5 типов цветов, давайте построим модель, которая классифицирует цветок на данном изображении.
  2. Видите изображения выше? Теперь давайте перейдем к следующему шагу — Изучение нашего набора данных. Что вы заметили, исходя из первоначального взгляда на изображения выше? Заметили что-нибудь из следующего?
  • Крупные и отдаленные планы
  • Цветовая схема
  • Жизненный цикл цветка
  • Фокус
  • Позиционирование кадра
  • Освещение
  • Просмотр фото
  • Размеры пикселей
  • Наличие объектов

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

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

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

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

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

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

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

Точная-настройка берет модель, которая уже была обучена для конкретной задачи, а затем точная- настроить или настроить его так, чтобы он выполнял вторую аналогичную задачу. С этого момента вы можете думать о каждом из параметров слоя как о ручках тонкой настройки. Вы можете повторять шаги с 4 по 6 в качестве шагов точной настройки и обучать модель, пока не получите приемлемый результат.

Теперь давайте рассмотрим Перенос обучения с помощью ResNet50. ResNet50 – это сверточная нейронная сеть, состоящая из 50 слоев. Предварительно обученная версия сети загружается и обучается на более чем миллионе изображений из базы данных ImageNet с сотнями классов. Ниже приведены шаги для базовой модели переносного обучения с использованием ResNet50 со сверточной нейронной сетью.

  1. Мы хотим использовать эту предварительно обученную модель и заменить входные и выходные слои нашим набором данных и классами. Мы можем сделать это, «заморозив» все слои, кроме последнего.

Приведенный выше код должен распечатать все слои из ResNet50 и показать False для всех из них, кроме последнего.

2. Поскольку ResNet50 — это 50 уровней глубокого уровня, нам потребуется использовать методы нормализации и регуляризации, чтобы избежать переобучения.

3. Теперь мы можем подогнать и обучить модель!

Вот результаты по сравнению с нашей Сверточной нейронной сетью выше:

4. Теперь давайте визуализируем, как наша модель классифицирует невидимое изображение.

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