Распознавание марки и модели автомобиля по фотографии
Участники проекта
Руководитель
О проекте
Задача проекта — распознавание марки и модели автомобиля по фотографии. Почему мы хотим это сделать? У нас есть большой датасет с фотографиями автомобилей, кажется, что никто до нас подобной задачей не занимался, так почему бы и нет? Для чего это нужно? Например, можно уточнять и дополнять объявления о продаже автомобилей, распознавая марку и модель авто. Или сделать мобильное приложение, которое подскажет, что это за машина припаркована на улице. Или не подскажет :)
Участники проекта
Проект оказался непростым, интенсивно использующим методы машинного обучения и компьютерного зрения, поэтому в нем объединили свои усилия студенты с разных направлений:
- Вадим — с направления CS — занимался анализом статей, посвященных компьютерному зрению и машинному обучению
- Алексей — с направления DM — обрабатывал изображения с помощью различных фильтров и искал ключевые элементы на изображениях
- Валерия — с направления SE — готовила датасеты с автомобилями и изучала алгоритмы сегментации изображений
- Константин — с направления SE — объединял все программные наработки и алгоритмы в единую систему
Решение задачи
Сначала мы решили использовать стандартный подход в поиске объекта на изображении: выделение дескрипторов (специфичных областей изображения), инвариантных относительно поворота, сдвига и масштабирования.
Самые известные алгоритмы, которые используются в подобных целях — это SURF/SIFT/ASIFT. Но достаточно быстро мы поняли, что различия в освещении, морфологии поверхностей, падающие тени, да и просто различная степень немытости многих машин не позволяет нам однозначно находить и эффективно применять дескрипторы.
Еще одной сложной задачей является удаление фона с изображения, так как фон оказывает сильное влияние не только на поиск дескрипторов, но и мешает использованию других алгоритмов.
Мы решили использовать другой подход: кластеризовать дескрипторы, извлеченные изо всех изображений. В результате вместо одного дескриптора получается так называемое визуальное слово, которое объединяет множество похожих друг на друга дескрипоров. Далее мы планировали подсчитать количество визуальных слов на изображении и получить мешок визуальных слов, который поможет нам опознать модель и марку автомобиля. Однако данный алгоритм изначально был предназначен для классификации сцен и мы получили низкую точность предсказания. Можно предположить, что алгоритм действительно обучился научился классифицировать сцены вместо автомобилей. Например, на изображении снизу видны сельские пейзажи и гуси на заднем плане, в то время как более дорогие автомобили, как правило, фотографируются в более дорогой обстановке :)
Тогда мы решили использовать подход «разделяй и властвуй»: разбить задачу на несколько более простых подзадач и решить их по отдельности:
- определить ракурс автомобиля: смотрит ли он в фас, в профиль или под углом? Для решения этой задачи мы выделяли контуры на изображении, апроксимировали их прямыми, и строили гистограмму углов наклона самых длинных прямых. Гистограмму мы использовали для обучения классификатора, который в дальнейшем предсказывал нам ориентацию автомобиля на новых фотографиях;
- зная ракурс автомобиля, можно применить некоторые эвристики и найти дескрипторы: номерной знак, фары, шильдик, решетка радиатора и т.д. Например, на изображениях в фас можно сравнительно легко найти номерной знак, и достаточно точно определить расположение шильдика и габариты автомобиля. На изображениях в профиль подобными ориентирами могут служить колеса;
- выделенные дескрипторы можно использовать для более точного обучения классификатора.
Сейчас нам удается предсказать марку и модель автомобиля с точностью 80%, однако у нас еще много идей о том, как добиться лучшего результата. Наш проект продолжается, и мы планируем повысить точность классификатора и применить его в реальных проектах.