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

Абстрактный

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

Глядя на таблицу лидеров Классификация изображений в наборе данных ImageNet от PapersWithCode, мы видим, что 10 лучших решений основаны на архитектуре Transformer (Encoder-Decoder) или EfficientNet. Несмотря на то, что архитектура Transformer значительно превосходит EfficientNet по точности, последняя до сих пор активно используется из-за более низких требований к вычислительной мощности.

Разновидностью архитектуры Transformer для решения задач компьютерного зрения является архитектура модели кодера Vision Transformer (ViT). В этой статье мы сравним EfficientNet и ViT при решении двух задач классификации изображений.

Цели и задачи бизнеса

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

Обзор литературы

Задача классификации изображений по качеству реконструкции не нова и не уникальна. В статье Инспекция хода ремонта на основе изображений с помощью Deep Siamese Networks описаны различные подходы к классификации различных этапов процесса ремонта квартиры. Его авторы используют сверточные нейронные сети ResNet, которые также присутствуют в вышеупомянутой таблице лидеров нейронных сетей для классификации изображений. Важно отметить, что авторы отдельно рассматривают результаты своей модели применительно к разным комнатам в квартирах. Кроме того, особое внимание авторы уделяют затратам времени на расчеты наиболее эффективными подходами.

В ряде блогов также описываются подходы к классификации ремонта по стилю, качеству и другим субъективным признакам. В частности, в Материалах ЦИАН описан подход к бинарной классификации качества ремонта на плохой или хороший с использованием нейронных сетей архитектур EfficientNet и ResNet разного размера. Автор приходит к выводу, что использование EfficientNet является приоритетным, так как показывает лучшие результаты, чем ResNet. Автор также указывает, что оптимально использовать более крупную версию EfficientNet: EfficientNet_b4. Отдельно автор обращает внимание на сложности подготовки датасета для обучения моделей, связанные с субъективным восприятием хороших и плохих ремонтов. В результате был разработан набор критериев плохого (старого) ремонта.

Эксперименты и сбор данных

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

Сбор данных

Для обучения глубоких нейронных сетей выбранных архитектур необходимо подготовить большой набор обучающих данных. Для задачи поиска и определения комнаты на изображении мы использовали Набор данных домов, в котором для каждого объекта представлены изображения спальни, ванной комнаты, кухни, а также фронтальное изображение дома. Мы также использовали набор данных Places365 (с размером изображения 256 x 256 пикселей).

Из набора данных Places365 мы выбрали изображения, соответствующие классам, которые, по нашим наблюдениям, могут присутствовать на фотографиях объявлений аренды (подробный список таких классов можно найти в Приложении А). Мы объединили набор данных Houses и выбранные изображения из набора данных Places365. Общий размер результирующего набора данных составил около 230 000 изображений, 10% из которых были перемещены в тестовый набор данных.

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

Мы извлекли фотографии с нескольких сайтов по аренде, которые предоставили следующие фильтры:

  • Хороший ремонт: дорогие 1- или 2-комнатные квартиры, качество ремонта автор объявления указал как «Высокое» («Дизайнер», «Евро»);
  • Плохой ремонт: дешевые 1- или 2-комнатные квартиры, автор объявления не указал качество ремонта как «Высокое» (состояние любое, кроме «Дизайнерское», «Евро»).

В результате был собран сбалансированный набор данных, содержащий около 8000 уникальных фотографий, и 10% из них были перемещены в тестовый набор данных. При построении моделей этот набор данных был дополнительно очищен и дополнен.

Модели

В рамках экспериментов мы обучили EfficientNet и Vision Transformer решать две задачи:

  1. Классификация изображений по категориям, которые могут присутствовать на фото объявления о продаже или аренде;
  2. Бинарная классификация изображений на изображения помещений, представляющих «хороший» и «плохой» ремонт. Здесь следует сделать важное отступление: построение модели классификации ремонтов без удаления изображений, где нет места (например, экстерьер дома, вид из окна, коридор и т. д.), приведет к предсказаниям, близким к случайный. Соответствующую очистку данных мы произвели заранее, используя модель, решающую задачу (1).

Для каждой из задач мы собрали отдельный набор данных, в соответствии с описанным ранее подходом. Для задачи (1) мы не использовали аугментацию данных. Для задачи (2) мы сделали аугментацию на этапе обучения моделей методами кропов, вертикальных отражений и незначительных изменений яркости и насыщенности изображения. Более подробное описание каждой из задач, подготовки данных и моделей приведено в Приложении А.

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

Vision Transformer (ViT) — относительно новая архитектура для решения задач компьютерного зрения, основанная на архитектуре кодера-трансформера. Основными отличительными чертами этой модели являются разделение изображения на непересекающиеся участки, использование позиционных вложений для отражения последовательности участков изображения, а также использование механизма внимания. В рамках решения рассматриваемых задач использовалась предобученная базовая архитектура ViT.

В качестве оптимизатора для EfficientNet мы использовали Adam со скоростью обучения = 1e-4. Для оптимизации ViT мы использовали оптимизатор SAM в реализации для PyTorch со скоростью обучения = 5e-3.

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

Приведенные выше таблицы показывают, что EfficientNet достигла точности, сравнимой с ViT, в задаче (1), а в задаче (2) ViT значительно превзошла EfficientNet с точки зрения точности. Такая разница в решении задачи (2) может быть связана с тем, что EfficientNet не может улавливать локальные признаки (признаки), ориентируясь в основном на глобальные, в то время как разделение изображения на участки при использовании ViT и механизм внимания допускают как глобальные, так и локальные признаки (признаки). извлекаться одновременно. В результате EfficientNet менее устойчив к шуму, создаваемому аугментацией данных.

Результат не является неожиданным, поскольку ViT имеет более современную и значительно более сложную архитектуру по сравнению с EfficientNet. Очевидный минус ViT — ресурсоемкие, долгие вычисления. В то же время, если используемая нами архитектура EfficientNet содержит 33 миллиона параметров, а ViT — более 80 миллионов параметров, то время вывода ViT выше, чем у EfficientNet — одна эпоха проверки ViT и EfficientNet на одном и том же наборе данных заняла 14 и 14,5 минут соответственно.

Двуглавый ВиТ

Использование архитектуры преобразователя кодера в ViT позволяет еще больше повысить производительность модели при выводе за счет архитектурной инженерии в дополнение к классическим методам квантования. Трансформеры известны тем, что могут решать несколько задач одновременно, используя корпус одной модели и разные головы. Несмотря на то, что модели, обученные для отдельных задач, имеют относительно более высокую точность, использование единого корпуса модели все же позволяет достичь достаточно высоких показателей точности и, в то же время, сэкономить ресурсы. Один из наиболее ярких примеров использования трансформеров для решения нескольких задач одновременно описан в статье Трансформер модели Т5.

В рамках нашего исследования мы решили построить единую модель архитектуры кодировщика для решения обеих наших задач классификации изображений ((1) и (2)): двухголовый ViT, который имеет одно тело и две головы. Схематически соответствующую архитектуру можно представить следующим образом:

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

Мы построили процесс обучения таким образом, что сначала тщательно предобучили представленную архитектуру с двумя головками, после этого веса модели ViT были заморожены и каждая голова переобучалась отдельно под свою задачу. Это позволило дополнительно немного увеличить точность для каждой задачи. В качестве оптимизатора использовался SAM со скоростью обучения = 0,003, а также ступенчатый планировщик скорости обучения с шагом в две эпохи и гаммой 0,1.

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

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

Мы провели несколько дополнительных экспериментов, чтобы обеспечить более честное сравнение между нашей двухголовой моделью ViT, обученной без аугментации, и EfficientNet. Мы измерили точность расширенного набора тестовых данных как EfficientNet, так и двухголовых моделей ViT, обученных без увеличения данных (обучающий набор данных без дополнения и расширенный набор тестовых данных). Сводка результатов представлена ​​в таблице ниже:

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

В результате мы опробовали несколько подходов с разными моделями, и окончательная двухголовая модель ViT наилучшим образом соответствует нашим требованиям к точности и производительности, а также бизнес-потребностям.

Бизнес-приложение

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

Заключение

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

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

В результате мы выяснили, что двухголовая модель ViT позволила добиться наиболее оптимальных характеристик по ресурсам, времени расчета и точности.

Приложение А. Подробное описание задач

Задача (1) состояла в том, чтобы поместить изображения в классы, которые можно найти в фотографиях объявлений о недвижимости. Общий список таких классов:

«квартирное_здание/снаружи»: 0,

«ванная»: 1,

«спальня»: 2,

«кухня»: 3,

«балкон/интерьер»: 4,

«коридор»: 5,

«чистая_комната»: 6,

«шкаф»: 7,

«детская_комната»: 8,

«столовая_комната»: 9,

«гримерка»: 10,

«лифт_лобби»: 11,

‘прихожая’: 12,

‘гостиная_комната’: 13,

«лобби»: 14,

«мезонин»: 15,

«парковка_лот»: 16,

«парковка_гараж/на открытом воздухе»: 17,

«парковка_гараж/в помещении»: 18,

«кладовая_комната»: 19,

«телевизионная_комната»: 20,

«подсобное_помещение»: 21,

«ботанический_сад»: 22,

«центр»: 23,

«подъездная дорога»: 24,

«лесная_дорога»: 25,

«путь_леса»: 26,

«фонтан»: 27,

«океан»: 28,

«парк»: 29,

«площадка для пикника»: 30,

«улица»: 31,

«бассейн_бассейн/открытый»: 32,

«бассейн/крытый»: 33,

«деревня»: 34

Для одного отдельного ViT, обученного в соответствии с описанным подходом, точность на тестовом наборе данных составила около 80%.

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

«ванная»: 1,

«шкаф»: 7,

«спальня»: 2,

‘гостиная_комната’: 13,

«телевизионная_комната»: 20,

«кухня»: 3,

«подсобное_помещение»: 21,

«столовая_комната»: 9

Результирующий размер набора данных составил около 6000 изображений, 10% из которых были выбраны для теста. Поскольку объем данных для решения этой задачи относительно невелик, особое значение имеет аугментация. Для увеличения мы использовали TenCrop с пропорциями изображения 3/4, RandomPerspective, RandomRotation и ColorJitter от Torchvision. Мы использовали аугментацию отдельно для обучающего и тестового наборов данных, поэтому аугментированные изображения из обучающего набора данных не попали в первый тест. В результате обучения с аугментацией данных ViT удалось добиться точности около 98% при пороге = 0,5.

При этом точность классификации EfficientNet на том же наборе данных составила всего 63%. Позже мы решили обучить EfficientNet на том же наборе данных, но без аугментации. В этом случае EfficientNet достигла точности 96%.

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