Как FGVC распознает изображения, принадлежащие нескольким подкатегориям суперкатегории
Делиться

В течение прошлого года мои исследования в Multitel были сосредоточены на мелкозернистой визуальной классификации (FGVC) . В частности, я работал над созданием надежного классификатора автомобилей, способного работать в режиме реального времени на периферийных устройствах. Эта публикация является частью того, что может стать небольшой серией размышлений об этом опыте. Я пишу, чтобы поделиться некоторыми из извлеченных мной уроков, а также чтобы организовать и обобщить то, что я узнал. В то же время я надеюсь, что это дает представление о том уровне инженерных и прикладных исследований, которые мы проводим в Multitel, работе, которая сочетает академическую строгость с ограничениями реального мира. Являетесь ли вы коллегой-исследователем, любознательным инженером или тем, кто рассматривает возможность присоединиться к нашей команде, я надеюсь, что эта публикация принесет вам как понимание, так и вдохновение.
1. Проблема:
Нам нужна была система, способная определять конкретные модели автомобилей , а не просто «это BMW», а также модель и год выпуска. Она должна была работать в режиме реального времени на периферийных устройствах с ограниченными ресурсами наряду с другими моделями. Подобные задачи относятся к так называемой мелкозернистой визуальной классификации (FGVC) .

Целью FGVC является распознавание изображений, принадлежащих нескольким подчиненным категориям суперкатегории (например, виды животных/растений, модели автомобилей и т. д.). Сложность заключается в понимании тонких визуальных различий, которые в достаточной степени позволяют различать объекты, очень похожие по общему внешнему виду, но различающиеся по мелким характеристикам [2].

Что делает FGVC особенно сложным?
- Небольшие межклассовые различия : визуальные различия между классами могут быть крайне незначительными.
- Большие внутриклассовые вариации : в то же время экземпляры в пределах одного класса могут существенно различаться из-за изменений в освещении, позе, фоне или других факторах окружающей среды.
- Небольшие визуальные различия могут быть легко перекрыты другими факторами, такими как позы и точки обзора.
- Длиннохвостые распределения : наборы данных обычно содержат несколько классов с большим количеством образцов и множество классов с очень малым количеством примеров. Например, у вас может быть всего пара изображений редкого вида пауков, встречающегося в отдалённом регионе, в то время как изображения распространённых видов представлены тысячами. Этот дисбаланс затрудняет одинаково эффективное обучение моделей во всех категориях.

2. Ландшафт:
Когда мы впервые взялись за эту проблему, мы, естественно, обратились к литературе. Мы углубились в научные статьи, изучили тестовые наборы данных и изучили современные методы FGVC. И поначалу задача казалась гораздо сложнее, чем она была на самом деле, по крайней мере, в нашем конкретном контексте.
FGVC активно исследуется уже много лет, и существует множество подходов, внедряющих всё более сложные архитектуры и конвейеры. Например, во многих ранних работах предлагались двухэтапные модели: подсеть локализации сначала идентифицировала отличительные части объекта, а затем вторая сеть выполняла классификацию на основе этих частей. Другие исследования фокусировались на специальных функциях потерь, взаимодействии высокопорядковых признаков или моделировании зависимости меток с использованием иерархических структур.
Все эти методы были разработаны для решения проблемы тонких визуальных различий, которые делают FGVC столь сложной задачей. Если вам интересно узнать об эволюции этих подходов, Вэй и др. [2] предлагают подробный обзор, подробно рассматривающий многие из них.

При более внимательном изучении недавних результатов бенчмарков (архивированных из Papers with Code) мы обнаружили, что многие из наиболее производительных решений были основаны на архитектурах трансформаторов. Эти модели часто достигали высочайшей точности, но при этом практически не обсуждались вопросы времени вывода или ограничений развертывания. Учитывая наши требования, мы были практически уверены, что эти модели не будут работать в режиме реального времени на периферийном устройстве, где уже параллельно запущено несколько моделей.
На момент проведения данной работы наилучший зарегистрированный результат по Stanford Cars составил 97,1% точности, достигнутый CMAL-Net .
3. Наш подход:
Вместо того чтобы начать с самых сложных или специализированных решений, мы пошли по противоположному пути: сможет ли модель, которая, как мы уже знали, будет соответствовать нашим ограничениям в режиме реального времени и развёртывания, достаточно хорошо справиться с этой задачей? В частности, мы задались вопросом, сможет ли надёжная архитектура общего назначения приблизить нас к производительности более современных, более сложных моделей при правильном обучении.
Этот ход рассуждений привел нас к статье Росса Уайтмана и соавторов «ResNet наносит ответный удар: улучшенная процедура обучения в Тимме». В ней Уайтман приводит убедительный аргумент: большинство новых архитектур обучаются с использованием новейших достижений и методов, а затем сравниваются со старыми базовыми моделями, обученными по устаревшим рецептам. Уайтман утверждает, что ResNet-50, часто используемая в качестве эталонной, часто лишена преимуществ этих современных усовершенствований. В его статье предлагается усовершенствованная процедура обучения и показано, что при правильном обучении даже стандартная ResNet-50 может достигать удивительно высоких результатов, в том числе в нескольких бенчмарках FGVC.
Учитывая эти ограничения и цели, мы приступили к разработке собственной мощной, многократно используемой процедуры обучения, которая могла бы обеспечить высокую производительность при выполнении задач FGVC без использования специфических архитектурных приемов. Идея была проста: начать с известной и эффективной базовой модели, например, ResNet-50, и полностью сосредоточиться на улучшении конвейера обучения, а не на модификации самой модели. Таким образом, тот же рецепт впоследствии можно было бы применить к другим архитектурам с минимальными изменениями.
Мы начали собирать идеи, методики и усовершенствования обучения из разных источников, объединяя лучшие практики в единый, целостный процесс. В частности, мы опирались на четыре ключевых ресурса:
- Набор приемов для классификации изображений с помощью сверточных нейронных сетей (Хе и др.)
- Объединение улучшений производительности ассемблированных методов в сверточной нейронной сети (Ли и др.)
- ResNet наносит ответный удар: улучшенная процедура обучения в Тимме (Уайтман и др.)
- Как обучать современные модели с использованием новейших примитивов TorchVision (Vryniotis)
Нашей целью было создать надёжный процесс обучения, не требующий специфических для модели настроек. Это означало, что мы сосредоточились на методах, широко применимых к разным архитектурам.
Для тестирования и валидации нашего обучающего конвейера мы использовали набор данных Stanford Cars [9], широко используемый мелкозернистый эталон классификации, который хорошо соответствует нашему реальному сценарию. Набор данных содержит 196 категорий автомобилей и 16 185 изображений, снятых сзади, чтобы подчеркнуть тонкие межклассовые различия. Данные практически поровну распределены между 8 144 обучающими изображениями и 8 041 тестовым изображением. Для моделирования нашего сценария развертывания, где модель классификации работает после системы обнаружения объектов, мы обрезаем каждое изображение до его аннотированной ограничивающей рамки перед обучением и оценкой.
Хотя исходный сайт, где хранился набор данных, больше недоступен, он по-прежнему доступен через специализированные репозитории, такие как Kaggle и Huggingface. Набор данных распространяется по лицензии BSD-3-Clause , которая допускает как коммерческое, так и некоммерческое использование. В данной работе он использовался исключительно в исследовательском контексте для получения представленных здесь результатов.

Создание рецепта
Ниже представлен наш краткий рецепт обучения, разработанный в результате экспериментов, итераций и тщательного объединения идей из упомянутых выше работ. Идея состоит в том, чтобы показать, что, просто применяя лучшие современные практики обучения, без каких-либо архитектурно-специфических хаков, мы можем получить универсальную модель, такую как ResNet-50, которая будет конкурентоспособна в мелкозернистом бенчмарке.
Начнем с базовой версии ResNet-50, обученной с использованием базовой настройки, и постепенно, шаг за шагом, будем вносить улучшения.
По каждой методике мы сообщим:
- Индивидуальный прирост производительности
- Совокупный прирост при добавлении в трубопровод
Хотя многие из используемых методов, вероятно, вам знакомы, наша цель — показать, насколько эффективными они могут быть при целенаправленном сочетании. Тесты производительности часто скрывают это, сравнивая новые архитектуры, обученные с использованием новейших технологий, со старыми базовыми моделями, обученными по устаревшим рецептам. Здесь же мы хотим перевернуть ситуацию и показать, чего можно достичь, применяя тщательно настроенный рецепт к широкодоступной и эффективной базовой системе.
Мы также понимаем, что многие из этих методов взаимодействуют друг с другом. Поэтому на практике мы настроили некоторые комбинации с помощью жадного или сетчатого поиска, чтобы учесть синергию и взаимозависимость.
Базовый рецепт:
Прежде чем погрузиться в оптимизацию, начнем с чистой и простой базовой линии.
Мы обучаем модель ResNet-50, предварительно обученную на ImageNet с использованием набора данных Stanford Cars . Каждая модель обучается в течение 600 эпох на одном графическом процессоре RTX 4090 с ранней остановкой по мере точности валидации с терпением в 200 эпох .
Мы используем:
- Ускоренный градиент Нестерова (NAG) для оптимизации
- Скорость обучения : 0,01
- Размер партии : 32
- Импульс : 0,9
- Функция потерь : кросс-энтропия
Все обучающие и проверочные изображения обрезаются по ограничивающим рамкам и изменяются до размера 224×224 пикселей. Мы начинаем с той же стандартной политики аугментации, что и в [5].
Ниже приведено краткое описание базовой конфигурации обучения и ее эффективности:
| Модель | Предварительная подготовка | Оптимизатор | Обучение ставка | Импульс | Партия размер |
| ResNet50 | ImageNet | НАГ | 0,01 | 0,9 | 32 |
| Функция потерь | Размер изображения | Эпохи | Терпение | Увеличение | Точность |
| Кроссэнтропия Потеря | 224×224 | 600 | 200 | Стандартный | 88.22 |
Мы фиксируем начальное значение случайной выборки между прогонами, чтобы обеспечить воспроизводимость и снизить дисперсию между экспериментами. Чтобы оценить истинный эффект изменения рецепта, мы следуем лучшим практикам и усредняем результаты за несколько прогонов (обычно от 3 до 5) .
Теперь мы будем постепенно развивать эту базовую модель, внедряя по одному методу за раз и отслеживая его влияние на точность. Цель — выделить вклад каждого компонента и то, как они взаимодействуют при совместном применении.
Обучение больших партий:
В мини-пакетном SGD градиентный спуск является случайным процессом, поскольку примеры в каждом пакете выбираются случайным образом. Увеличение размера пакета не изменяет математическое ожидание стохастического градиента, но уменьшает его дисперсию. Однако использование большого размера пакета может замедлить процесс обучения. При одинаковом количестве эпох обучение с большим размером пакета приводит к снижению точности валидации модели по сравнению с обучением с меньшим размером пакета.
Он и др. [5] утверждают, что линейное увеличение скорости обучения с размером партии эмпирически работает для обучения ResNet-50.
Чтобы повысить точность и скорость обучения, мы увеличиваем размер партии до 128, а скорость обучения — до 0,1. Мы добавляем планировщик StepLR, который уменьшает скорость обучения каждой группы параметров на 0,1 каждые 30 эпох.
Разминка для повышения скорости обучения:
Поскольку в начале обучения все параметры, как правило, являются случайными значениями, использование слишком большой скорости обучения может привести к численной нестабильности.
В эвристике разминки мы используем небольшую скорость обучения в начале, а затем возвращаемся к исходной скорости, когда процесс обучения стабилизируется. Мы используем стратегию постепенной разминки, которая линейно увеличивает скорость обучения от 0 до исходной.
Мы добавляем линейную стратегию разогрева на 5 эпох.

| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| Стандартный | StepLR | 30 | 0.1 | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Точность | Инкрементный Улучшение | Абсолютный Улучшение |
| 5 | 0,01 | 89.21 | +0,99 | +0,99 |
Тривиальное увеличение:
Чтобы исследовать влияние более сильной аугментации данных, мы заменили базовую аугментацию на TrivialAugment . Trivial Augment работает следующим образом. Он принимает на вход изображение x и набор аугментаций A. Затем он просто выбирает аугментацию из A случайным образом и равномерно распределяет её, применяет к заданному изображению x с интенсивностью m, выбранной случайным образом и равномерно из множества возможных интенсивностей {0, . . . , 30}, и возвращает аугментированное изображение.
Что делает TrivialAugment особенно привлекательным, так это то, что он совершенно не имеет параметров, не требует поиска или настройки, что делает его простой, но эффективной заменой, которая снижает сложность эксперимента.
Хотя может показаться нелогичным, что такая универсальная и рандомизированная стратегия превзойдёт аугментации, специально разработанные для данного набора данных, или более сложные автоматизированные методы аугментации, мы перепробовали множество альтернатив, и TrivialAugment неизменно показывал хорошие результаты во всех запусках. Его простота, стабильность и удивительно высокая эффективность делают его убедительным выбором по умолчанию.

| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| TrivialAugment | StepLR | 30 | 0.1 | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Точность | Инкрементный Улучшение | Абсолютный Улучшение |
| 5 | 0,01 | 92.66 | +3.45 | +4.44 |
Снижение скорости обучения по косинусу:
Далее мы исследовали возможность изменения графика скорости обучения. Мы перешли на стратегию отжига косинуса , которая снижает скорость обучения от начального значения до 0, следуя функции косинуса. Важное преимущество косинуса заключается в отсутствии гиперпараметров для оптимизации, что снова сужает пространство поиска.

| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| TrivialAugment | Косинус | – | – | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Точность | Инкрементный Улучшение | Абсолютный Улучшение |
| 5 | 0,01 | 93.22 | +0,56 | +5 |
Сглаживание этикеток:
Хороший метод снижения переобучения — не допустить чрезмерной уверенности модели. Этого можно добиться, смягчив истинные данные с помощью сглаживания меток. Идея заключается в изменении конструкции истинной метки следующим образом:
[q_i = begin{cases}
1 – varepsilon, & text{if } i = y, \
frac{varepsilon}{K – 1}, & text{иначе}.
end{cases} ]
Степень сглаживания (чем выше, тем сильнее) определяется одним параметром, который необходимо задать. Мы использовали коэффициент сглаживания ε = 0,1 , что является стандартным значением, предложенным в оригинальной статье и широко принятым в литературе.
Интересно, что мы эмпирически обнаружили, что добавление сглаживания меток снижает дисперсию градиента во время обучения. Это позволило нам безопасно увеличить скорость обучения, не дестабилизируя процесс. В результате мы увеличили начальную скорость обучения с 0,1 до 0,4.
| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| TrivialAugment | StepLR | 30 | 0.1 | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Сглаживание этикеток | Точность | Инкрементный Улучшение |
| 5 | 0,01 | 0.1 | 94,5 | +1.28 |
| Абсолютный Улучшение | ||||
| +6.28 |
Случайное стирание:
В качестве дополнительной формы регуляризации мы внедрили в процесс обучения метод случайного стирания. Этот метод случайным образом выбирает прямоугольную область на изображении и заменяет её пиксели случайными значениями с фиксированной вероятностью.
Часто в сочетании с методами автоматического дополнения он обычно обеспечивает дополнительное повышение точности благодаря эффекту регуляризации. Мы добавили случайное стирание с вероятностью 0,1.

| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| TrivialAugment | StepLR | 30 | 0.1 | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Сглаживание этикеток | Случайное стирание | Точность |
| 5 | 0,01 | 0.1 | 0.1 | 94.93 |
| Инкрементный Улучшение | Абсолютный Улучшение | |||
| +0,43 | +6.71 |
Экспоненциальная скользящая средняя (EMA):
Обучение нейронной сети с использованием мини-пакетов приводит к появлению шума и снижению точности градиентов при обновлении параметров модели между пакетами. Экспоненциальное скользящее среднее используется в обучении глубоких нейронных сетей для повышения их устойчивости и обобщения.
Вместо того чтобы использовать только необработанные веса, которые изучаются непосредственно во время обучения, EMA сохраняет скользящее среднее значение весов модели, которые затем обновляются на каждом этапе обучения с использованием средневзвешенного значения текущих весов и предыдущих значений EMA.
В частности, на каждом этапе обучения веса EMA обновляются с использованием:
[theta_{mathrm{EMA}} leftarrow alpha , theta_{mathrm{EMA}} + (1 – alpha) , theta]
где θ — текущие веса модели, а α — коэффициент затухания, контролирующий, какой вес придается прошлому.
Оценивая веса EMA, а не сырые значения во время тестирования, мы обнаружили улучшение последовательности в результатах между забегами, особенно на поздних этапах обучения.
| Модель | Предварительная подготовка | Оптимизатор | Скорость обучения | Импульс |
| ResNet50 | ImageNet | НАГ | 0.1 | 0,9 |
| Размер партии | Функция потерь | Размер изображения | Эпохи | Терпение |
| 128 | Кроссэнтропия Потеря | 224×224 | 600 | 200 |
| Увеличение | Планировщик | Планировщик размер шага | Планировщик Гамма | Разогревать Метод |
| TrivialAugment | StepLR | 30 | 0.1 | Линейный |
| Разогревать эпохи | Разогревать Разлагаться | Сглаживание этикеток | Случайное стирание | Шаги ЕМА |
| 5 | 0,01 | 0.1 | 0.1 | 32 |
| Распад ЭМА | Точность | Инкрементный Улучшение | Абсолютный Улучшение | |
| 0,994 | 94.93 | 0 | +6.71 |
Мы протестировали EMA отдельно и обнаружили, что он приводит к заметному улучшению как стабильности тренировки, так и качества валидации. Однако, когда мы включили EMA в полную программу вместе с другими методами, дальнейшего улучшения не произошло. Результаты, по-видимому, вышли на плато, что говорит о том, что большая часть прироста уже была достигнута другими компонентами.
Поскольку наша цель — разработать универсальный метод обучения, а не слишком заточенный под один набор данных, мы решили оставить EMA в окончательной конфигурации . Его преимущества могут быть более выражены в других условиях, а низкие накладные расходы делают его безопасным для включения.
Оптимизации, которые мы протестировали, но не внедрили:
Мы также изучили ряд дополнительных методов, которые обычно эффективны в других задачах классификации изображений, но обнаружили, что они либо не привели к значительным улучшениям , либо, в некоторых случаях, немного ухудшили производительность на наборе данных Stanford Cars:
- Уменьшение веса: добавляет регуляризацию L2, чтобы предотвратить использование больших весов во время тренировки. Мы активно экспериментировали с уменьшением веса в нашем случае, но это постоянно ухудшало производительность.
- Cutmix/Mixup: Cutmix заменяет случайные фрагменты между изображениями и смешивает соответствующие метки. Mixup создаёт новые обучающие выборки путём линейного комбинирования пар изображений и меток. Мы пробовали применять CutMix или MixUp случайным образом с равной вероятностью во время обучения, но этот подход привёл к ухудшению результатов.
- AutoAugment: показал отличные результаты и конкурентоспособную точность, но мы обнаружили, что TrivialAugment оказался лучше. Что ещё важнее, TrivialAugment полностью не имеет параметров, что сокращает область поиска и упрощает настройку.
- Альтернативные оптимизаторы и планировщики: Мы экспериментировали с широким спектром оптимизаторов и графиков скорости обучения. Ускоренный градиент Нестерова (NAG) стабильно обеспечивал наилучшую производительность среди оптимизаторов, а косинусный отжиг оказался лучшим планировщиком, обеспечив хорошие результаты без необходимости настройки дополнительных гиперпараметров.
4. Заключение:
На графике ниже обобщены улучшения, достигнутые по мере постепенного совершенствования нашей тренировочной программы:

Используя только стандартный ResNet-50 , нам удалось добиться высокой производительности на наборе данных Stanford Cars , продемонстрировав, что тщательная настройка нескольких простых методов может иметь большое значение для детальной классификации.
Однако важно учитывать этот фактор. Эти результаты, в основном, показывают, что мы можем обучить модель различать мелкозернистые, хорошо представленные классы в чистом, тщательно подобранном наборе данных. Набор данных Stanford Cars практически сбалансирован по классам , содержит высококачественные, преимущественно фронтальные изображения и не содержит значительных затенений или шумов, характерных для реального мира . Он не решает такие проблемы, как длиннохвостые распределения , сдвиг области определения или распознавание невидимых классов.
На практике у вас никогда не будет набора данных, охватывающего все модели автомобилей , особенно если он обновляется ежедневно по мере появления новых моделей. Реальным системам необходимо учитывать сдвиги в распределении , распознавание открытых множеств и несовершенные входные данные .
Таким образом, хотя это послужило надежной базой и доказательством концепции , все еще предстояло проделать значительную работу, чтобы создать что-то надежное и готовое к производству .
Ссылки:
[1] Краузе, Дэн и др. Сбор крупномасштабного набора данных о мелкозернистых автомобилях.
[2] Вэй и др. Анализ мелких деталей изображений с помощью глубокого обучения: обзор.
[3] Реслан, Фару. Автоматическая детальная классификация видов птиц с использованием глубокого обучения.
[4] Чжао и др. Обзор мелкозернистой классификации объектов и семантической сегментации на основе глубокого обучения.
[5] Он и др. Набор трюков для классификации изображений с помощью сверточных нейронных сетей.
[6] Ли и др. Объединение улучшений производительности ассемблированных методов в сверточной нейронной сети.
[7] Уайтман и др. ResNet наносит ответный удар: улучшенная процедура обучения в Тимме.
[8] Вриниотис. Как обучать современные модели с использованием новейших примитивов TorchVision.
[9] Краузе и др., Представления трехмерных объектов для мелкозернистой категоризации.
[10] Мюллер, Хуттер. TrivialAugment: современное, не требующее настройки дополнение данных.
[11] Чжун и др., Увеличение объема данных путем случайного стирания.
Источник: towardsdatascience.com



























