Привет, Хабр!

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




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

Задачи распознавания лиц


Распознаванием лиц часто называют набор различных задач, например, детектирование лица на фотографии или в видеопотоке, определение пола и возраста, поиск нужного человека среди множества изображений или проверка того, что на двух изображениях один и тот же человек. В этой статье мы остановимся на последних двух задачах и будем их называть, соответственно, идентификация и верификация. Для решения этих задач из изображений извлекаются специальные дескрипторы, или векторы признаков. В этом случае задача идентификации сводится к поиску ближайшего вектора признаков, а верификацию можно реализовать с помощью простого порога расстояний между векторами. Комбинируя эти два действия, можно идентифицировать человека среди набора изображений или принимать решение о том, что его нет среди этих изображений. Такая процедура называется open-set identification (идентификацией на открытом множестве), см. Рис.1.


Рис.1 Open-set identification

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

Оценка точности


Датасеты


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

Естественный способ проверить, что точность алгоритма распознавания лиц соответствует ожиданиям, это измерить точность на отдельном тестовом датасете. Очень важно правильно выбрать этот датасет. В идеальном случае организации стоит обзавестись собственным набором данных, максимально похожим на те изображения, с которыми система будет работать при эксплуатации. Обратите внимание на камеру, условия съемки, возраст, пол и национальность людей, которые попадут в тестовый датасет. Чем более похож тестовый датасет на реальные данные, тем более достоверными будут результаты тестирования. Поэтому часто имеет смысл потратить время и средства для сбора и разметки своего набора данных. Если же это, по какой-то причине, не представляется возможным,  можно воспользоваться публичными датасетами, например, LFW и MegaFace. LFW содержит только 6000 пар изображений лиц и не подходит для многих реальных сценариев: в частности, на этом датасете невозможно измерить достаточно низкие уровни ошибок, как мы покажем далее. Датасет MegaFace содержит намного больше изображений и подходит для тестирования алгоритмов распознавания лиц на больших масштабах. Однако и обучающее, и тестовое множество изображений MegaFace’a есть в открытом доступе, поэтому использовать его для тестирования следует с осторожностью.

Альтернативный вариант заключается в использовании результатов тестирования третьим лицом. Такие тестирования проводятся квалифицированными специалистами на больших закрытых датасетах, и их результатам можно доверять. Одним из примеров может служить NIST Face Recognition Vendor Test Ongoing. Это тест, проводимый Национальным Институтом Стандартов и Технологий (NIST) при Министерстве торговли США. “Минус” данного подхода заключается в том, что датасет организации, проводящей тестирование, может существенно отличаться от интересующего сценария использования.

Переобучение


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

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

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

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

Метрики


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

Верификация


Верификацию лиц можно рассматривать как процесс принятия бинарного решения: “да” (два изображения принадлежат одному человеку), “нет” (на паре фотографий изображены разные люди). Прежде чем разбираться с метриками верификации, полезно понять, как мы можем классифицировать ошибки в подобных задачах. Учитывая, что есть 2 возможных ответа алгоритма и 2 варианта истинного положения вещей, всего возможно 4 исхода:


Рис. 2 Типы ошибок. Цвет фона кодирует истинное отношение между картинками (синий означает “принять”, желтый – “отвергнуть”), цвет рамки соответствует предсказанию алгоритма (синий – “принять”, желтый – “отвергнуть”



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

Из этих исходов два соответствуют правильным ответам алгоритма, а два – ошибкам первого и второго рода соответственно. Ошибки первого рода называют «false accept», «false positive» или  «false match» (неверно принято), а ошибки второго рода – «false reject», «false negative» или «false non-match» (неверно отвергнуто).

Просуммировав количество ошибок разного рода среди пар изображений в датасете и поделив их на количество пар, мы получим false accept rate (FAR) и false reject rate (FRR). В случае с системой контроля доступа «false positive» соответствует предоставлению доступа человеку, для которого этот доступ не предусмотрен, в то время как «false negative» означает, что система ошибочно отказала в доступе авторизованной персоне. Эти ошибки имеют разную стоимость с точки зрения бизнеса и поэтому рассматриваются отдельно. В примере с контролем доступа «false negative» приводит к тому, что сотруднику службы безопасности надо перепроверить пропуск сотрудника. Предоставление неавторизованного доступа потенциальному нарушителю (false positive) может привести к гораздо худшим последствиям.

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

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


Мы специально выбрали значения таким образом, чтобы ни один порог не классифицировал все три пары правильно. В частности, любой порог ниже 0.6 приведет к двум false accept (для пар 2-3 и 1-3). Разумеется, такой результат можно улучшить.

Выбор порога из диапазона от 0.6 до 0.85 приведет к тому, что пара 1-3 будет отвергнута, пара 1-2 по-прежнему будет приниматься, а 2-3 будет ложно приниматься. Если увеличить порог до 0.85-0.9, то пара 1-2 станет ложно отвергаться. Значения порога выше 0.9 приведут к двум true reject (пары 1-3 и 2-3) и одному false reject (1-2). Таким образом, лучшими вариантами выглядят пороги из диапазона 0.6-0.85 (один false accept 2-3) и порог выше 0.9 (приводит к false reject 1-2). Какое значение выбрать в качестве финального, зависит от стоимости ошибок разных типов. В этом примере порог варьируется в широких диапазонах, это связано, в первую очередь, с очень маленьких размеров датасетом и с тем, как мы выбрали значения уверенности алгоритма. Для больших, применяемых для реальных задач датасетов, получились бы существенно более точные значения порога. Зачастую вендоры ПО для распознавания лиц поставляют значения порога по умолчанию для разных FAR, которые вычисляются похожим образом на собственных датасетах вендора.

Также нетрудно заметить, что по мере того как интересующий FAR снижается, требуется все больше и больше положительных пар изображений, чтобы точно вычислить значение порога. Так, для FAR=0.001 нужно по меньшей мере 1000 пар, а для FAR=$10^{-6}$ потребуется уже 1 миллион пар. Собрать и разметить такой датасет непросто, поэтому клиентам, заинтересованным в низких значениях FAR, имеет смысл обратить внимание на публичные бенчмарки, такие как NIST Face Recognition Vendor Test или MegaFace. К последнему следует относиться с осторожностью, так как и обучающая, и тестовая выборки доступны всем желающим, что может привести к излишне оптимистичной оценке точности (см. раздел «Переобучение»).

Типы ошибок различаются по связанной с ними стоимости, и у клиента есть способ смещать баланс в сторону тех или иных ошибок. Для этого надо рассмотреть широкий диапазон значений порога. Удобный способ визуализации точности алгоритма при разных значениях FAR заключается в построении ROC-кривых (англ. receiver operating characteristic, рабочая характеристика приёмника).

Давайте разберемся, как строятся и анализируются ROC-кривые. Уверенность алгоритма (а следовательно, и порог) принимают значения из фиксированного интервала. Другими словами, эти величины ограничены сверху и снизу. Предположим, что это интервал от 0 до 1. Теперь мы можем измерить количество ошибок, варьируя значение порога от 0 до 1 с небольшим шагом. Так, для каждого значения порога мы получим значения FAR и TAR (true accept rate). Далее мы будет рисовать каждую точку так, чтобы FAR соответствовал оси абсцисс, а TAR – оси ординат.


Рис.3 Пример ROC-кривой

Легко заметить, что первая точка будет иметь координаты 1,1. При пороге равном 0 мы принимаем все пары и не отвергаем ни одной. Аналогично, последняя точка будет 0,0: при пороге 1 мы не принимаем ни одной пары и отвергаем все пары. В остальных точках кривая обычно выпуклая. Также можно заметить, что наихудшая кривая лежит примерно на диагонали графика и соответствует случайному угадыванию исхода. С другой стороны, наилучшая возможная кривая образует треугольник с вершинами (0,0) (0,1) и (1,1). Но на датасетах разумного размера такое трудно встретить.


Рис.4 ROC-кривые NIST FRVT

Можно построить подобие RОС-кривых с различными метриками/ошибками на оси. Рассмотрим, например, рисунок 4. На нем видно, что организаторы NIST FRVT по оси Y нарисовали FRR (на рисунке – False non-match rate), а по оси X – FAR (на рисунке – False match rate). В данном конкретном случае лучшие результаты достигнуты кривыми, которые расположены ниже и смещены влево, что соответствует низким показателям FRR и FAR. Поэтому стоит обращать внимание на то, какие величины отложены по осям.

Такой график позволяет легко судить о точности алгоритма при заданном FAR: достаточно найти точку на кривой с координатой Х равной нужному FAR и соответствующее значение TAR. «Качество» ROC-кривой также можно оценить одним числом, для этого надо посчитать площадь под ней. При этом лучшее возможное значение будет 1, а значение 0.5 соответствует случайному угадыванию. Такое число называют ROC AUC (Area Under Curve). Однако следует заметить, что ROC AUC неявно предполагает, что ошибки первого и второго рода однозначны, что не всегда так. В случае если цена ошибок различается, следует обратить внимание на форму кривой и те области, где FAR соответствует бизнес-требованиям.

Идентификация


Второй популярной задачей распознавания лиц является идентификация, или поиск человека среди набора изображений. Результаты поиска сортируются по уверенности алгоритма, и наиболее вероятные совпадения попадают в начало списка. В зависимости от того, присутствует или нет искомый человек в поисковой базе, идентификацию разделяют на две подкатегории: closed-set идентификация (известно, что искомый человек есть в базе) и open-set идентификация (искомого человека может не быть в базе).

Точность (accuracy) является надежной и понятной метрикой для closed-set идентификации. По сути, точность измеряет количество раз, когда нужная персона была среди результатов поиска.

Как это работает на практике? Давайте разбираться. Начнем с формулировки бизнес-требований. Допустим, у нас есть веб-страница, которая может разместить десять результатов поиска. Нам нужно измерить количество раз, которое искомый человек попадает в первые десять ответов алгоритма. Такое число называется Top-N точностью (в данном конкретном случае N равно 10).

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


Рис 5. Пример идентификации. В этом примере искомый человек появляется в позиции 2, поэтому точность Top-1 равна 0, а Top-2 и далее равна 1.

Open-set идентификация состоит из поиска людей, наиболее похожих на искомое изображение, и определения, является ли кто-то из них искомым человеком на основании уверенности алгоритма. Open-set идентификацию можно рассматривать как комбинацию closed-set идентификации и верификации, поэтому на этой задаче можно применять все те же метрики, что и в задаче верификации. Также нетрудно заметить, что open-set идентификацию можно свести к попарным сравнениям искомого изображения со всеми изображениями из галереи. На практике это не используется из соображений скорости вычислений. ПО для распознавания лиц часто поставляется с быстрыми алгоритмами поиска, которые могут находить среди миллионов лиц похожие за миллисекунды. Попарные сравнения заняли бы намного больше времени.

Практические примеры


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

Розничный магазин


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

Пусть программа лояльности охватывает 100 клиентов. Данную задачу можно рассматривать как пример open-set идентификации. Оценив расходы, отдел маркетинга пришел в выводу, что приемлемый уровень ошибки – принимать одного посетителя за постоянного покупателя за день. Если в день магазин посещает 1000 посетителей, каждый из которых должен быть сверен со списком 100 постоянных клиентов, то необходимый FAR составит $\frac{1}{1000 * 100} = 10^{-5}$.

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

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

Следующим шагом будет запустить (или попросить вендора запустить) ПО и получить уверенность алгоритма для каждой пары из датасета. Когда это будет сделано, можно построить ROC-кривую и удостовериться, что количество правильно идентифицированных постоянных клиентов при FAR=$10^{-5}$соответствует бизнес-требованиям.

E-Gate в аэропорту


Современные аэропорты обслуживают десятки миллионов пассажиров в год, а процедуру паспортного контроля ежедневно проходит около 300 000 человек. Автоматизация этого процесса позволит существенно сократить расходы. С другой стороны, пропустить нарушителя крайне нежелательно, и администрация аэропорта хочет минимизировать риск такого события. FAR=$10^{-7}$ соответствует десяти нарушителям в год и кажется разумным в этой ситуации. Если при данном FAR, FRR составляет 0.1 (что соответствует результатам NtechLab на бенчмарке NIST visa images), то затраты на ручную проверку документов можно будет сократить в десять раз. Однако для того чтобы оценить точность при данном уровне FAR, понадобятся десятки миллионов изображений. Сбор такого большого датасета требует значительных средств и может потребовать дополнительного согласования обработки личных данных. В результате инвестиции в подобную систему могут окупаться чересчур долго. В таком случае имеет смысл обратиться к отчету о тестировании NIST Face Recognition Vendor Test, который содержит датасет с фотографиями с виз. Администрации аэропорта стоит выбирать вендора на основе тестирования на этом датасете, приняв во внимание пассажиропоток.

Таргетированная почтовая рассылка


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

Допустим, что эксплуатация такой системы обходится в 10 $, при этом около 1000 посетителей в день останавливаются у стенда. Отдел маркетинга оценил прибыль от каждого таргетированного email в 0.0105 $. Нам хотелось бы идентифицировать как можно больше постоянных покупателей и не слишком беспокоить остальных. Чтобы такая рассылка окупилась, точность должна быть равна затратам на стенд, поделенным на количество посетителей и ожидаемый доход от каждого письма. Для нашего примера точность равна $\frac{10}{1000 * 0.0105} = 95%$. Администрация торгового центра могла бы собрать датасет способом, описанным в разделе «Розничный магазин», и измерить точность, как описано в разделе «Идентификация». На основании результатов тестирования можно принимать решение, получится ли извлечь ожидаемую выгоду с помощью системы распознавания лиц.

Поддержка видео


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

Частые ошибки


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

Тестирование на датасете недостаточного размера


Всегда следует быть аккуратным при выборе датасета для тестирования алгоритмов распознавания лиц. Одним из важнейших свойств датасета является его размер. Размер датасета нужно выбирать, исходя из требований бизнеса и значений FAR/TAR. «Игрушечные» датасеты из нескольких изображений людей из вашего офиса дадут возможность «поиграть» с алгоритмом, измерить его производительность или протестировать нестандартные ситуации, но на их основании нельзя делать выводы о точности алгоритма. Для тестирования точности следует использовать датасеты разумных размеров.

Тестирование при единственном значении порога


Иногда люди тестируют алгоритм распознавания лиц при одном фиксированном пороге (часто выбранном производителем «по умолчанию») и принимают во внимание лишь один тип ошибок. Это неправильно, так как значения порога «по умолчанию» у разных вендоров различаются или выбираются на основе различных значений FAR или TAR. При тестировании следует обращать внимание на оба типа ошибок.

Сравнение результатов на разных датасетах


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

Делать выводы на основе тестирования на единственном датасете


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

Выводы


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

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

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


  1. Vasyutka
    30.05.2017 19:17

    Отличная статья, спасибо!


    1. ivazhu
      02.06.2017 19:38

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