Как компьютер оценивает внешнее состояние POS-терминалов

Привет, Хабр. Меня зовут Дмитрий Жариков. Я исследователь данных в команде эквайринга Сбера и занимаюсь моделями искусственного интеллекта. Эквайринг — это подразделение банка, которое занимается различными способами безналичной оплаты. Кроме того, в группу компаний «Сбер» входит компания федерального значения «Сберсервис», которая занимается настройкой офисного оборудования, в том числе устанавливает и обслуживает POS-терминалы. Я расскажу вам про один из наших проектов — определение состояния POS-терминалов по фотографиям. 

Постановка задачи

Заявки на выезд инженеров бывают следующих типов:

  • Восстановление работоспособности POS терминалов.

  • Замена терминалов и их частей.

  • Организация ремонтных работ ТО.

  • Установка POS-терминалов.

  • Планово-профилактические работы.

Когда инженер приезжает на место, он должен сделать несколько фотографий. Во-первых, это сам POS-терминал, чтобы можно было судить о качестве сделанной работы. 

59700db1ff2883f2b4f92d5a48b2a110.jpeg

Ещё нужно сфотографировать бумажный чек с тестовой транзакцией. Это позволяет удостовериться, что терминал работает. Если снять бумажный чек по каким-то причинам нельзя (например, кончилась чековая лента), то инженер фотографирует электронный чек на экране смартфона или ноутбука. 

Со всей страны к нам поступает в среднем больше 10000 заявок в день, и в каждой заявке обычно 3–5 фотографий. Ручная проверка по выполнению работ занимает большое количество времени, и поэтому мы разработали решение с использованием алгоритмов машинного обучения, которое обрабатывает фотографии и выдает результат за ~2 часа.

Как всё устроено

Наш алгоритм работает в три этапа:

  1. Загружаем данные по заявкам. 

  2. Последовательно обрабатываем каждую заявку с помощью нейросетей.

  3. Агрегируем результаты по заявке. 

Заявки можно скачивать как по прямой ссылке, так и в виде архива с фотографиями. Каждый снимок подаётся на вход четырём последовательным нейросетям. 

b5c1cab787ad0ae51ad1a98bcda282cc.png

Первая нейросеть определяет ищет на фотографии бумажный чек, вторая — электронный. Третья определяет, есть ли на изображении терминал, а последняя ищет на терминале различные дефекты. Обучали их на ПК с видеокартой RTX3090 Ti. При обучении использовались аугментации и «антиклассы», то есть изображения, на которых нет интересующего нас объекта. Для каждого существующего изображения были применены случайные преобразования, которые меняют геометрию изображения, добавляют искажения, погодные эффекты, блики, меняют контрастность и т. п. Всего в выборке для обучения модели по детекции терминалов было ~60 000 фотографий, для обучения модели по детекции дефектов использовалось ~1500 фотографий. После обучения применили к классификаторам прунинг для увеличения быстродействия, время обработки фотографий уменьшилось на 30%.

Сейчас модели работают на виртуальной машине с одним процессором Intel Xeon Gold 6242R, 20 ядер, 3,1 ГГц, и 32 Гб оперативной памяти. Также мы запускали их в SberCloud с использованием одной видеокарты Nvidia Tesla V100 (16 Гб ОЗУ, 2,4 ГГц).

Рассмотрим каждую модель подробнее.

Модель по чекам

Модель бинарной классификации с архитектурой MobileNetV3. У нее есть два выхода: на фотографии есть бумажный чек или нет чека.

535df3ca8e7e4870f222e87f3ba28aad.png

Для обучения использовались ~2500 фотографии из реальных заявок. При обучении нейросети выделяют специальный набор размеченных картинок, на которых стоят метки: есть чек или нет чека. С помощью этого набора мы оцениваем качество работы нейросети. Справа на иллюстрации изображена матрица ошибок (confusion matrix). Из неё становится понятно, что доля правильных ответов составляет 94%. Время обработки одной фотографии с помощью модели в формате onnx составляет ~150 мс.

Модель по электронным чекам

Это тоже модель бинарной классификации MobileNetV3 с двумя выходами. 

e60f108f669e64fa12c66045e0bfa736.png

С этой моделью было довольно много проблем: часто встречаются ошибки кодировки; экраны гаджетов очень неоднородны;  бывают разные фоны; иногда инженеры выводят содержимое чека в Блокноте или другом приложении. Поэтому пришлось применить много ухищрений, чтобы достичь высокого качества работы нейросети. Сегодня доля правильных ответов составляет 95%. Для обучения модели применили ~1500 фотографий, а скорость обработки фотографий такая же, как и в модели по бумажным чекам, так как используется аналогичная архитектура и формат модели.

Модель по терминалам

Эта модель имеет архитектуру YOLOv8n. Она определяет не сам факт наличия объекта на фотографии, а координаты объекта.

eac72610d83513314843d8ed13a85a8f.png

Слева вы видите фотографию из реальной заявки, на которой изображён новый сберовский терминал Kozen P12 с биометрией. Красной рамкой обведён результат работы модели, где красной рамкой обведены координаты области, в которой есть изображение терминала. По этим координатам можно вычислить, какую площадь на фотографии занимает терминал. Это нужно для того, чтобы оценить качество фотографии, сделанной инженером. В правильно оформленной заявке терминал должен занимать не менее 60% площади снимка.

Теперь давайте посмотрим на матрицу ошибок. Модель уже может выдавать два класса: классический POS‑терминал или новый с биометрией. Также модель может выдавать пустой объект — это означает, что она не обнаружила терминал на фотографии. Ошибки в матрице отмечены голубым фоном.

У старых терминалов модель ищет на фотографиях только экран и клавиатуру, у новых — сам экран. Другие стороны устройств, в том числе и подставки, нас не интересуют. К слову, до конца 2024 года компания планирует внедрить больше 500 000 терминалов с биометрией.

Модель по визуальным дефектам

Изначально для определения дефектов мы пытались использовать классификатор, но отказались от этой идеи из‑за низкого качества работы модели. После этого мы выбрали модель с архитектурой YOLOv8m. На сегодняшний день она может распознавать 8 видов различных дефектов — грязь, потёртости, царапины экрана, клавиш и корпуса.

Суммарное время работы двух моделей занимает меньше 1 секунды.

aa590b422862879fee907b9e3a8a60c5.pnga654c0072f15335cc0166456ee34bc81.png36b2f3e95799e3c334fd59c22e589721.png4259d097fe36f5086a8c6976dc9ab927.png

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

Для оценки состояния терминалов новой модели мы применяем такие правила:

Дефектом НЕ считается, если:

  • площадь грязи на экране (screen_dirt) ≤5% от всей площади области с терминалом;

  • царапины на экране (screen_scratch) ≤5% от всей площади области с терминалом.

Терминал считается с дефектом, если удовлетворяется одно из условий:

  • есть потёртость экрана;

  • количество дефектов с грязью (screen_dirt, body_dirt) больше 5;

  • есть царапина площадью > 5% относительно области с терминалом;

  • есть дефект с грязью (screen_dirt, body_dirt), площадь которого больше 7% площади терминала.

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

А вот правила оценки для терминалов старых моделей:

Терминал считается с дефектом, если удовлетворяется одно из условий:

  • есть потёртость экрана;

  • суммарная площать всех потертостей корпуса ≥7%;

  • есть царапина площадью больше 5% относительно области с терминалом;

  • суммарная площадь дефектов с грязью (screen_dirt, body_dirt) ≥ 7%;

  • есть дефект с грязью (screen_dirt, key_dirt, body_dirt), площадь которого больше 7% площади терминала.

В результате обработки заявок моделью, все фотографии, которые были признаны дефектными, отправляются на проверку бизнесу, в среднем 40–50 заявок с фотографиями. Это позволяет собирать данные для дообучения моделей, а также наказывать недобросовестных инженеров за установку плохого оборудования. По результатам проверки данных бизнес‑заказчиком доля правильно распознанных дефектных устройств составляет ~80%.

Промежуточные результаты работы модели

В начале 2024 года проект был запущен в пилотном режиме на 3 сервисные компании. В среднем ежедневно обрабатывается более 10 000 заявок из которых 40–60 признаются проблемными и отправляются бизнесу на проверку. Таким образом, суммарно за все время более 10 000 заявок были признаны дефектными среди всех заявок (примерно 2 000 000). Если проверять вручную абсолютно каждую заявку, получим огромные затраты в человеческих ресурсах, поэтому очевидно, что наше решение позволяет достичь колоссальной экономии во времени. Если тратить на проверку каждой заявки по 10 секунд, то без нашей модели суммарное время заняло бы больше 20 суток, при использовании нашей модели бизнес потратил за всё время не больше 3 часов.

Дальнейшие шаги

  1. Модель будет встроена в приложение инженеров. После выполнения каждой заявки, сотрудник будет делать фотографии установленного устройства. В случае обнаружения дефектов заявку нельзя будет считать выполненной.

  2. Добавление новых устройств модели Kozen в модель по распознаванию терминалов

  3. Замена модели с классической детекцией устройств, на модель с повернутыми областями относительно центра устройства (Oriented Bounding Boxes).

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

Разработчики проекта:

  • Жариков Дмитрий

  • Смирнов Александр

  • Залипаева Александра, руководитель

© Habrahabr.ru