Категоризация изображений - это классическая задача машинного обучения, которая была ключевым фактором в исследованиях машинного обучения с момента появления глубоких нейронных сетей. Эта статья поможет вам легко решить задачу с помощью методов трансферного обучения и ансамбля.
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. Справочная информация
- Уэст, Джереми; Вентура, Дэн; Варник, Шон (2007). « Презентация весенних исследований: теоретические основы индуктивного переноса ». Университет Бригама Янга, Колледж физико-математических наук
- Https://machinelearningmastery.com/ensemble-methods-for-deep-learning-neural-networks/