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

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

В чем проблема?

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

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

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

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

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

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

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

Набор данных

Один из основных ингредиентов для обучения любой модели глубокого обучения - наличие большого количества размеченных обучающих данных. В течение многих лет мы вручную маркируем наши изображения с помощью внешнего агентства. В целях обучения у нас был помеченный набор данных из 800 000 изображений, который является хорошим объемом данных, который мы можем иметь в своем распоряжении.

С этим набором данных было две проблемы. Во-первых, набор данных был очень несбалансированным: спальня составляла 25% от общего числа изображений, по сравнению с планом этажа только с 0,2%. Мы поэкспериментировали с двумя методами выборки данных: одна с недопредставленной выборкой только из чрезмерно представленных категорий, а другая с недостаточной выборкой из перепредставленных категорий и избыточной выборкой из недопредставленных категорий. Мы основали этот подход на идеях из этой статьи [1].

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

Мы случайным образом выбрали 70% изображений для обучения, 10% для проверки и 20% для тестирования. Выборка производилась только на обучающей выборке. Набор для проверки использовался для выполнения ранней остановки и оптимизации гиперпараметров, в то время как набор для тестирования использовался для оценки модели.

Архитектура модели и подробности обучения

В последние годы появилось много успешных архитектур нейронных сетей для классификации изображений. При выборе модели мы учитывали различные факторы: количество параметров, ее эффективность для разных наборов данных, ее размер и наличие предварительно обученных весов. Мы использовали InceptionV3 [2], который занял 2-е место в 2015 ImageNet Challenge и явился значительной попыткой сократить количество параметров. Эта сеть использует серию начальных модулей, которые в основном представляют собой мини-модели, состоящие из сверточных фильтров разного размера, работающих на одной и той же входной карте функций. Последний уровень этой сети - это уровень softmax, дающий вероятности для каждой категории, которая в сумме равна 1.

Мы инициализировали нашу модель с предварительно обученными весами, обученными на наборе данных Imagenet. Этот метод называется трансферным обучением, когда модель, разработанная для задачи, повторно используется в качестве отправной точки для модели при выполнении второй задачи. Мы используем пакетную нормализацию [4] во время обучения, когда активации масштабируются на каждом уровне сети для каждого пакета. Эти методы помогают значительно ускорить тренировочный процесс [3].

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

Мы проводим оптимизацию с использованием Adam [6], варианта метода стохастического градиентного спуска, и используем постепенное уменьшение начальной скорости обучения.

Наконец, мы обучили 8 моделей с разными настройками гиперпараметров (скорость обучения, скорость распада, размер пакета) и с двумя разными методами выборки данных.

Реализация и инфраструктура

Реализация модели InceptionV3 основана на фреймворке TensorFlow’s Slim. Мы разработали собственный инструмент глубокого обучения, который мы называем Deep KAYAK, высокоуровневый API для задач Vision и NLP, который выполняет оптимизацию гиперпараметров, перекрестную проверку, ансамблевое обучение [7] с моделями, работающими параллельно.

Обучение проводилось с использованием экземпляра p2.8xlarge AWS, содержащего 8 графических процессоров NVIDIA Tesla K80 с 12 ГБ памяти графического процессора каждый. Пакетная выборка и предварительная обработка изображений выполняется с помощью многопоточных очередей, запущенных на ЦП, поэтому графические процессоры всегда заняты пакетом изображений, подаваемым на них. Обучение длилось около 3 дней.

Tensorboard (рис. 6) использовался для визуализации потерь, точности, средней точности по классу и скорости обучения во время обучения модели.

Результаты

Некоторые категории, такие как «ванная», «спальня» и «план этажа», работают очень хорошо с точностью более 90%. Интересно видеть, что модель так хорошо работает для «плана этажа», содержащего наименьшее количество изображений. Такие категории, как «тренажерный зал», «прачечная», «еда», «ресторан» и «бассейн», имеют приличную производительность с точностью более 80%. Такие категории, как «банкетный зал», «пляж», «конференция», «вестибюль» и «спа», не работают хорошо из-за шума в их этикетках, отсутствия изображений для тренировок и многокомпонентного характера изображений.

Наилучшие результаты были достигнуты при использовании метода выборки данных, включающего как недостаточную, так и избыточную выборку, с размером пакета 60, скоростью обучения 0,0007 и скоростью затухания 0,5. Методика выборки как с избыточной, так и с недостаточной выборкой постоянно превосходила другие с точностью ~ 1,5%. Все результаты, упомянутые здесь, относятся к вышеупомянутой настройке обученной модели.

Матрица неточностей на рис. 8 показывает производительность модели для всех категорий.

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

Хорошая модель должна иметь высокую точность (то есть, как часто модель правильно предсказывает «спальню»), а также иметь высокую запоминаемость (то есть, сколько изображений «спальни» было точно предсказано). Мы можем повысить точность системы, увеличив порог (вероятность предсказания), но это уменьшит отзыв. Это называется компромиссом между точностью и отзывом.

В нашем случае мы хотели бы иметь высокую точность около 95% для таких важных категорий, как «спальня» или «ванная комната», но мы можем включить такие категории, как «стойка регистрации», «холл», «лестница» и т. Д. Вот почему мы устанавливаем порог соответственно для каждой категории. Все прогнозы ниже порогового значения помечаются как неизвестные и отправляются на проверку вручную. Это поможет нам итеративно улучшать модель. На рис. 10 показана средняя кривая точности-отзыва (слева), а также кривая точности-отзыва для нескольких отдельных категорий (справа), каждая точка на линии соответствует определенному пороговому значению. Площадь под кривой (AUC) - это один показатель для оценки производительности модели.

Заключение

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

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

Благодарности

Этот проект стал возможен благодаря коллективным усилиям различных команд. Джон Грэм и Марк Безнос из нашей группы по обработке данных об отелях работали над различными усилиями по инженерии данных, чтобы довести модель до производства. Сидре Мишон из группы анализа визуального контента за постоянное предоставление информации о наборе данных. Денису Брюнелю за его вклад в качество классификации. Рафаэлю Баптиста из команды SEO за его критические советы по инфраструктуре, проверке алгоритма модели и дальнейшим улучшениям. Спасибо Эндрю Хуангу, Атулу Джоши и Хайме Уолке за помощь в редактировании этого блога.

Ссылки

[1] Буда, Матеуш, Ацуто Маки и Мацей А. Мазуровски. «Систематическое исследование проблемы дисбаланса классов в сверточных нейронных сетях». Препринт arXiv arXiv: 1710.05381 (2017).

[2] Сегеди, Кристиан и др. «Переосмысление начальной архитектуры компьютерного зрения». Материалы конференции IEEE по компьютерному зрению и распознаванию образов. 2016 г.

[3] Йосински, Джейсон и др. «Насколько переносимы функции в глубоких нейронных сетях?» Достижения в области нейронных систем обработки информации. 2014 г.

[4] Иоффе, Сергей и Кристиан Сегеди. «Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариатного сдвига». Препринт arXiv arXiv: 1502.03167 (2015).

[5] Перес, Луис и Джейсон Ван. «Эффективность увеличения данных при классификации изображений с использованием глубокого обучения». Препринт arXiv arXiv: 1712.04621 (2017).

[6] Кингма, Дидерик П. и Джимми Ба. «Адам: метод стохастической оптимизации». Препринт arXiv arXiv: 1412.6980 (2014).

[7] Джу, Ченг, Орелиен Бибо и Марк ван дер Лаан. «Относительная производительность методов ансамбля с глубокими сверточными нейронными сетями для классификации изображений». Журнал прикладной статистики (2018): 1–19.