Возникли проблемы при классификации изображений? Не волнуйтесь! Дополнение спешит на помощь !!

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

Чтобы показать, как работает расширение, мы рассмотрим набор данных Собаки против кошек и воспользуемся библиотекой глубокого обучения fast.ai Джереми Ховарда и Рэйчел Томас, которая построена на основе PyTorch. Этот пост основан на материалах fast.ai Deep Learning, часть 1, версия 2.

I. Базовая модель

Чтобы классифицировать изображения как собак или кошек, мы используем resnet34 для обучения модели (подробнее об архитектуре ResNet в этом замечательном блоге Apil Tamang!). Сначала мы обучаем модель без увеличения данных, используя скорость обучения 0,03 и 1 эпоху.

При этом мы видим точность проверки 0.98584..

Вот посмотрите на матрицу путаницы:

Таким образом, мы видим, что 26 изображений - 20 кошек и 6 собак из 2000 были классифицированы неверно.

II. Применение дополнительных преобразований

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

  1. основные преобразования - изменение угла (поворота) и освещения
  2. боковые трансформации - изменение угла и освещения + переворачивание вокруг вертикальной оси
  3. Преобразование сверху вниз - изменение угла и освещения + поворот вокруг горизонтальной оси и поворот на 90, 180, 270 градусов.

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

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

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

Такие сети, как ResNets, предварительно обучены, то есть архитектура поставляется со своим набором предварительно вычисленных весов для каждого уровня, кроме полностью подключенных. При обучении модели ранее мы использовали предварительно вычисленные веса ResNet34. Но на этот раз, поскольку мы используем новые наборы обучающих образов, мы устанавливаем Precompute = False, чтобы модель вычисляла активации с нуля для новой модели. Без этого мы все равно будем использовать предварительно вычисленные активации, которые соответствуют исходным обучающим данным, что не даст нам значительного повышения точности.

Теперь мы получаем точность проверки 0.98779, что является улучшением по сравнению с предыдущей моделью.

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

III. Увеличение времени тестирования

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

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

Чтобы смягчить такие ошибки, мы используем TTA, в котором мы прогнозируем класс для исходного тестового изображения вместе с 4 случайными преобразованиями одного и того же изображения. Затем мы берем среднее значение прогнозов, чтобы определить, к какому классу принадлежит изображение.

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

При использовании TTA мы теперь получаем точность проверки 99.199 только с 16 ошибочно классифицированными изображениями.

Заключение

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

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

использованная литература

  1. Репозиторий GitHub для кода
  2. Практическое глубокое обучение для кодеров, часть I Джереми Ховарда
  3. Эффективность увеличения данных в классификации изображений с использованием глубокого обучения. Луис Перес, Джейсон Ван

Обо мне: я закончил MS Data Science в USF и получил степень бакалавра компьютерных наук. У меня 2 года опыта в создании алгоритмов прогнозирования и рекомендаций, а также в получении бизнес-информации для финансовых и розничных клиентов. Я очень рад возможности применить свои знания в области машинного обучения и глубокого обучения для решения реальных проблем.
Не пропустите другие мои блоги здесь!
LinkedIn: https: // www. linkedin.com/in/neerja-doshi/