![image](https://habrastorage.org/webt/uq/ic/vp/uqicvp8941mjcjtqkceo4b0fgfg.png)
Добрый день. Нас зовут Татьяна Воронова и Эльвира Дяминова, мы занимаемся анализом данных в компании Center 2M. В частности, мы обучаем нейросетевые модели для детектирования объектов на изображениях: людей, спецтехники, животных.
В начале каждого проекта компания договаривается с заказчиками о приемлемом качестве распознавания. Этот уровень качества необходимо не только обеспечить при сдаче проекта, но и удерживать при дальнейшей эксплуатации системы. Получается, надо постоянно контролировать и дообучать систему. Хочется снизить затраты на этот процесс и избавиться от рутинной процедуры, высвободив время на работу по новым проектам.
Автоматическое дообучение – не уникальная идея, многие компании имеют подобные внутренние инструменты-конвейеры. В этой статье мы хотели бы рассказать о нашем опыте и показать, что для успешного внедрения таких практик вовсе не обязательно быть огромной корпорацией.
Один из наших проектов – подсчет людей в очередях. Из-за того, что заказчик – крупная компания с большим количеством отделений, люди в определенные часы скапливаются как по расписанию, то есть регулярно происходит детектирование большого количества объектов (голов людей). Поэтому мы решили начать внедрение автоматического дообучения именно на этой задаче.
Вот как выглядел наш план. Все пункты, кроме работ разметчика, осуществляются в автоматическом режиме:
- Раз в месяц выбираются автоматически все изображения с камер за последнюю неделю.
- Названия изображений добавляются на общую xls-страницу в sharepoint, а также заносятся статусы файлов-изображений по умолчанию: «Не просмотрено».
- С помощью последнего (работающего в текущий момент) варианта модели генерируется разметка изображений – в папку также добавляются xml-файлы с разметкой (координаты найденных голов), а на страницу автоматически заносится общее количество найденных моделью объектов – это число понадобится в дальнейшем для отслеживания качества модели.
- Разметчики раз в месяц просматривают размеченные файлы в статусе «Не просмотрено». Правят разметку и заносят количество исправлений в xls-страницу (отдельно – количество удаленных меток, отдельно – количество добавленных). Статусы просмотренных разметчиком файлов меняются на «Просмотрено». Таким образом, мы понимаем, как деградировало качество нашей модели.
Кроме того, мы уясняем характер ошибки: размечается ли в основном лишнее (сумки, стулья) или, наоборот, не находим часть людей (например, из-за медицинских масок). График изменяющихся метрик качества модели выводится в виде панели-отчета. - Раз в месяц по xls-файлу смотрится количество файлов в статусе «Просмотрено» и количество изменений > 0. Если количество выше порогового значения, запускается переобучение модели на расширенном множестве (с добавлением поправленной разметки). Если ранее файл входил в обучающий датасет, старая разметка по файлу меняется на новую. У файлов, взятых в обучение, статус меняется на «Взято в обучение». Статус нужно менять, иначе одни и те же файлы будут повторно попадать в дообучение. Дообучение производится начиная с чекпоинта, оставшегося при предыдущем обучении. В дальнейшем мы планируем вводить дообучение не только по расписанию, но и превышению порога количества изменений, которые пришлось сделать в разметке.
- Если количество файлов в статусе «Просмотрено» равно 0, необходимо оповещение – разметчик по какой-то причине не проверяет разметку.
- Если, несмотря на дообучение модели, точность продолжает падать, а метрики спускаются ниже порогового значения, необходимо оповещение. Это знак, что нужно детально разбираться в проблеме с привлечением аналитиков.
В итоге данный процесс очень помог нам. Мы отследили увеличение ошибок второго рода, когда много голов неожиданно стали «масочными», вовремя обогатили обучающий датасет новым видом голов и дообучили текущую модель. Плюс такой поход позволяет учитывать сезонность. Мы постоянно корректируем датасет с учетом текущей ситуации: люди часто носят головные уборы либо, наоборот, почти все приходят в учреждение без них. Осенью возрастает число людей в капюшонах. Система становится более гибкой, реагирует на обстановку.
Например, на изображении ниже – одно из отделений (в зимний день), кадры которого не были представлены в обучающем датасете:
![image](https://habrastorage.org/webt/uq/ic/vp/uqicvp8941mjcjtqkceo4b0fgfg.png)
Если посчитать метрики для этого кадра (TP = 25, FN = 3, FP = 0), то получится, что полнота (recall) – 89%, точность (precision) – 100%, а гармоническое среднее между точностью и полнотой около 94,2% (о метриках чуть ниже). Достаточно неплохой результат для нового помещения.
В нашем обучающем датасете были и шапки, и капюшоны, поэтому модель не растерялась, а вот с наступлением масочного режима начала ошибаться. В большинстве случаев, когда голова достаточно отчетливо видна, проблем не возникает. Но если человек находится далеко от камеры, то при определенном ракурсе модель перестает детектировать голову (левое изображение – результат работы старой модели). Благодаря полуавтоматической разметке мы смогли зафиксировать подобные случаи и вовремя дообучить модель (правое изображение – результат работы новой модели).
![image](https://habrastorage.org/webt/l2/yb/d3/l2ybd3189odaanlpzbbl8wvy_n4.png)
Леди вблизи:
![image](https://habrastorage.org/webt/6k/g5/ff/6kg5ff8tx6y6a_euvb1tvcqaply.png)
При тестировании модели выбирались кадры, не участвовавшие в обучении (датасет с различным количеством людей на кадре, в разных ракурсах и различного размера), для оценки качества модели мы использовали recall и precision.
Recall – полнота показывает, какую долю объектов, реально относящихся к положительному классу, мы предсказали верно.
Precision – точность показывает, какую долю объектов, распознанных как объекты положительного класса, мы предсказали верно.
Когда заказчику была необходима одна цифра, комбинация точности и полноты, мы предоставляли гармоническое среднее, или F-меру. Подробнее про метрики.
После одного цикла мы получили следующие результаты:
![image](https://habrastorage.org/webt/mm/fu/je/mmfujegtskh5zpo6lnas4jgicj4.jpeg)
Полнота в 80% до каких-либо изменений связана с тем, что к системе добавилось большое количество новых отделений, появились новые ракурсы. К тому же сменилось время года, до этого в обучающем датасете были представлены «осенне-зимние люди».
После первого цикла полнота стала 96,7%. Если сравнивать с первой статьей, то там полнота достигала 90%. Такие изменения связаны с тем, что сейчас количество людей в отделениях снизилось, они стали намного меньше перекрывать друг друга (закончились объемные пуховики), да и разнообразие головных уборов поубавилось.
Например, раньше нормой было примерно такое количество людей, как на изображении ниже.
![image](https://habrastorage.org/webt/fk/gf/2b/fkgf2bmc1ykg2cnnpizo7uzbt0g.png)
Сейчас дела обстоят таким образом.
![image](https://habrastorage.org/webt/qn/5_/7i/qn5_7itpdnzdbalg6ztg-atxfau.png)
Подводя итоги, назовем плюсы автоматизации:
- Частичная автоматизация процесса разметки.
- Своевременное реагирование на новые ситуации (поголовное ношение медицинских масок).
- Быстрое реагирование на неправильные ответы модели (сумка стала детектироваться как голова и тому подобные случаи).
- Мониторинг точности модели на постоянной основе. При изменении метрик в худшую сторону подключается аналитик.
- Минимизация трудозатрат аналитика при дообучении модели. Наши аналитики занимаются разными проектами с полным вовлечением, поэтому хотелось бы как можно реже отрывать их от основного проекта для сбора данных и дообучения по другому проекту.
Минусом является человеческий фактор со стороны разметчика – он может недостаточно ответственно отнестись к разметке, поэтому необходима разметка с перекрытием или использование golden set’ов – заданий с заранее известным ответом, служащих только для контроля качества разметки. Во многих более сложных задачах аналитик должен лично проверять разметку – в таких задачах автоматический режим не подойдет.
В целом практика автоматического дообучения показала себя жизнеспособной. Подобная автоматизация может рассматриваться как дополнительный механизм, позволяющий удерживать на хорошем уровне качество распознавания при дальнейшей эксплуатации системы.
Авторы статьи: Татьяна Воронова (tvoronova), Эльвира Дяминова(elviraa)