Добрый день, Хабр! Меня зовут Арсений Рылов. Я работаю ведущим специалистом по анализу и обработке данных в компании “Финолаб” и сегодня снова речь пойдет об автомобилях, нейросетях и инновационных решениях.

В нашем блоге мы уже рассказывали о сервисе дистанционной оценки технического состояния автомобилей на основе технологий искусственного интеллекта, который к настоящему времени прошел новый этап развития: дополнен новым функционалом, более совершенными алгоритмами обработки данных, и количество скачиваний приложения растет ежемесячно на 40%. Уже сейчас, получая фото- и видеоматериалы со смартфона пользователя, мы научились выполнять качественную оценку в различных условиях: снег, грязь, яркое солнце с бликами и неравномерная освещенность. В целом, мы обеспечиваем обнаружение 92% 11-ти видов повреждений стекол и кузова автомобиля и продолжаем улучшать наши метрики.

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

Проблема разметки сегментов корпуса автомобиля

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

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

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

Проблема разметки сегментов корпуса автомобиля
Проблема разметки сегментов корпуса автомобиля

Далее мы приступили к формированию датасета для обучения нейронных сетей. 

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

1. Получить готовый датасет из сети Интернет. Популярность задач компьютерного зрения привела к появлению в открытом доступе размеченных датасетов разнообразных объектов, в том числе и автомобилей.  Плюсы: сокращение затрат и времени на предобработку данных. Минусы: открытые датасеты ограничиваются наиболее общими деталями, игнорируя в нашем случае, например, противотуманные фонари. Как результат, полностью под бизнес-требования к нашей системе ни один из общедоступных датасетов не подошел, поэтому использовать такой вариант не представилось возможности.

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

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

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

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

Далее я расскажу о том, с какими трудностями мы столкнулись в процессе разметки и как с ними справлялись.

Описание процесса ручной и автоматической разметки

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

 Мы провели эксперимент — выдали одни и те же фото на разметку разным людям. Сравнив результат, увидели, что обведенные области у разных разметчиков в среднем на 93% соответствуют друг другу (здесь и далее рассматриваем метрику IOU - Intersection over Union для мультиклассовой сегментации, то есть отношение площади пересечения фигур, к их общей площади). Другими словами, разница в понимании формы и границ  сегментов разными разметчиками составила целых 7% их площади.

Найдите несколько отличий в контуре бампера
Найдите несколько отличий в контуре бампера

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

Решение этих проблем фактически выполнялось в три этапа.

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

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

Третьим этапом стала постобработка результатов сегментации нейронной сети, о которой речь пойдет далее.

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

Далее обсудим процесс обучения нейронной сети и постобработку, которую мы применяли.

Обучение нейронной сети сегментации деталей автомобиля

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

Эти требования обусловлены необходимостью:

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

  • сокращения времени обработки запросов клиентов для повышения их лояльности;

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

В процессе работы над задачей были протестированы следующие типы нейронных сетей в различных вариациях для решения задачи сегментации деталей: 

  • инстанс - сегментация

    1. maskRCNN

    2. PointRend

  • семантическая сегментация:

    1. Unet++;

    2. DeepLabV3+;

    3. FPN;

    4. PSPNet.

По результатам тестов, на основе оценок метрики сегментации, времени ее выполнения и вычислительных затрат, было принято решение использовать Deeplabv3 с энкодером efficientnet-b0 с функцией потерь Jaccard Loss.

Выбор этой сети обусловлен высоким качеством сегментации (IoU=84,5%), возможностью обработки более  20 кадров в секунду при наилучшем качестве, а также  устойчивостью к определению объектов в разных масштабах за счет использования atrous convolution.

Далее мы перешли к этапу постобработки результатов сегментации.

Как мы решали задачу сглаживания контуров сегментов автомобиля

В процессе работы над улучшением качества нейросети было испробовано порядка 20 пост-  и предобработок. 

На первом этапе наиболее эффективными оказались:

  • работа с датасетом (проверка и уточнение контуров), о которой было сказано выше;

  • подбор оптимальных аугментаций;

  • фильтрация небольших предсказанных объектов (“шума”) по выбранному порогу площади этих объектов;

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

В результате выполненные действия позволили увеличить метрику IOU до 90,5%, однако проблема неровных  контуров сегментов решена не была.

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

Пример “рваных” контуров
Пример “рваных” контуров

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

Метод 1. Проверять и перепроверять обучающую выборку.

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

Мы используем несколько подходов к проверке.

Визуальный анализ размеченных фото и классов. Плюсы: по результатам визуального анализа можно найти часть ошибок в разметке. Минусы: при таком анализе и наличии на кадре более 15 объектов некоторые неочевидные ошибки будут пропущены.

Алгоритмический подход. Он состоит в автоматическом отборе только тех сегментов, которые имеют самопересечения или являются выбросами (когда видна только маленькая часть детали). Исправляем или удаляем такие объекты. Плюсы: возможность точечно находить проблемные места. Минусы: временные затраты и небольшое влияние на итоговые метрики.

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

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

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

Метод 2. Сгладить контуры алгоритмически. 

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

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

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

Операция свертки
Операция свертки

Одним из вариантов функций, используемых в операции свертки,  является функция Гаусса, применяемая, например, для размытия лица на фото в целях деперсонализации. Приведем далее результаты расчета значений IoU при разных параметрах функции Гаусса.

Другое возможное ядро свертки - функция Лапласа. Применяется она для добавления резкости нечетким изображениям. Далее приведем значения метрики IoU для этой функции. 

В результате проведенных тестов с двумя описанными выше функциями было получено, что свертка с функцией Гаусса дает большее сглаживание контуров, приведенное на рисунке ниже, и большее значение метрики IOU=91,01.

Результаты сегментации изображений до и после сглаживания контуров функцией Гаусса
Результаты сегментации изображений до и после сглаживания контуров функцией Гаусса

Благодаря данной постобработке удалось:

  • повысить целевую метрику IOU на 0,5% (до 91,01%). При этом Mean IOU (по классам) составляет 82.80% (проблемными пока еще являются мелкие сегменты);

  • избавиться от наложения сегментов друг на друга, т.е. решить проблему неопределенности при отнесении повреждения сразу к двум сегментам одновременно;

  • устранить проблему появления нескольких мини сегментов вместо одного за счет пересечений и самопересечений контуров сегментов.

Метрика IoU при базовом обучении модели и в результате всех реализованных пред и постобработок
Метрика IoU при базовом обучении модели и в результате всех реализованных пред и постобработок

Выводы и перспективы дальнейших исследований

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

Достижение такого результата стало возможным благодаря многим факторам, в том числе описанным в данной статье, а именно:

  • итеративной ручной разметке сегментов и высокоточной работе GAN по генерации сегментированных изображений, что дает нам качественно размеченные изображения автомобиля, объединенную выборку которых мы подаем на вход сети для ее обучения;

  • выбору наиболее эффективной нейронной сети и подбору всех оптимальных ее параметров;

  • набору фильтров на этапе постобработки, благодаря которым мы избавляемся от выделенных “дополнительных” сегментов  за границами автомобиля и внутри него;

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

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

Если вам интересно самостоятельно протестировать технологию, вы можете легко сделать это в приложении CarDamageTest (Android/AppStore/AppGallery) на собственном или арендованном авто. Заодно проверите - найдут ли алгоритмы ту самую царапину на бампере, закрасить которую вечно нет времени.

Комментарии (1)


  1. n_kapyrin
    09.12.2022 13:55

    Спасибо за прекрасную статью! Очень интересно было читать. Мне кажется, сделать синтетический датасет можно также через обычный рендеринг 3D моделей машин c предразмеченной текстурой (и где-то там ещё и NeRF на подходе) на фоне каких-нибудь HDR бэкграундов.

    Приходилось ли уже обсуждать такую идею, может быть там свои подводные камни?