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

1. Введение

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

2. Передача обучения

Трансферное обучение - это исследовательская проблема в машинном обучении, которая фокусируется на хранении знаний, полученных при решении одной проблемы, и применении их к другой, но связанной проблеме. [1]

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

3. Предварительно обученные модели

Это пример того, как применить предварительно обученную модель к вашей проблеме.

Несколько примечаний:

  • Include-top: следует ли включать полностью подключенный уровень в верхнюю часть сети. Вы должны установить здесь значение False, чтобы самостоятельно изменить сеть.
  • GlobalAveragePooling2D: примените объединение средних значений к пространственным измерениям. Здесь я применил операцию среднего пула к последнему выходному слою базовой модели.
  • Категориально-кроссэнтропическая потеря: функция потерь, которая используется для категоризации по одной метке. Изображение может принадлежать к одному классу и только к одному классу.
  • Оптимизатор Adelta: более надежное расширение Adagrad, которое адаптирует скорость обучения на основе движущегося окна обновлений градиента, вместо того, чтобы накапливать все прошлые градиенты.
  • Model.summary: получить сводку модели.

Вы можете использовать ту же концепцию кода и для других моделей. На соревнованиях я внес лишь небольшие изменения в другие модели. (InceptionV3 и Densenet201).

4. Подготовьте данные

Мы должны разделить данные поезда на 2 папки: обучение и тестирование. Каждая папка содержит вложенные папки, названные в честь класса, и каждая вложенная папка содержит изображения, принадлежащие этому классу.

Вот пример того, как это сделать:

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

5. Обучение

В Keras использование fit () подходит для небольших наборов данных, которые могут быть загружены в память. Но здесь наш набор данных слишком велик, поэтому использование fit () нецелесообразно. Решением для этого является использование fit_generator (), который может загружать изображения в память во время обучения.

Несколько примечаний:

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

После обучения каждой модели около 80 эпох, вот оценка точности каждой:

  • InceptionV3: точность обучения: 93,76%, точность проверки: 92,30%, оценка Kaggle: 89,2%
  • MobilenetV2: точность обучения: 88,25%, точность проверки: 92,30%, оценка Kaggle: 85,6%
  • Densenet201: точность обучения: 92,3%, точность проверки: 90,3%

6. Ансамблевое обучение

Ансамблевое обучение - это обучение нескольких моделей вместо одной модели и объединение прогнозов на основе этих моделей. Это уменьшает разброс прогнозов и уменьшает ошибки обобщения. Результатом являются прогнозы, которые лучше, чем любая отдельная модель. [2] Для большей мотивации вы можете посмотреть на результат ILSVRC2015 и увидеть, что 12 лучших участников конкурса используют комбинацию моделей вместо одной.

Как реализовать ансамблевое обучение:

Результат ансамблевого обучения: 91,1% оценка Kaggle.

Ниже приведены некоторые изображения для прогнозов:

7. Резюме

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

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

Я был бы рад помочь вам, поэтому дайте мне знать, если у вас есть какие-либо вопросы или идеи по улучшению.

8. Справочная информация

  1. Уэст, Джереми; Вентура, Дэн; Варник, Шон (2007). « Презентация весенних исследований: теоретические основы индуктивного переноса ». Университет Бригама Янга, Колледж физико-математических наук
  2. Https://machinelearningmastery.com/ensemble-methods-for-deep-learning-neural-networks/