Добрый день!
Что же, попробую объяснить, насколько это вообще возможно. Все сейчас слышат кругом термин “искусственный интеллект”, но мало кто понимает, что это всего лишь маркетинговая уловка для выдаивания денег в первую очередь с инвесторов, а уже во вторую - с потребителей. Никакого искусственного интеллекта, в самом изначальном смысле этого слова, не существует. Есть набор методов машинного обучения, (довольно эффективных, надо сказать), которые к тому же быстро развиваются, всё более успешно решают всё более широкий круг задач.
Но давайте определимся с тем, что такое алгоритм машинного обучения. Это некая программа (и не важно на нейросетях или какой другой архитектуры), который обучается на примерах, и который пытается обобщить полученные примеры, и воспроизводить аналогичное поведение на других примерах из предметной области, которых он раньше не видел никогда.
В Tonfotos на данный момент используется четыре(!) разных алгоритма машинного обучения для разных этапов обработки лиц:
- Обнаружение лиц на фотографии
- Определение геометрии лиц для их последующей нормализации
- Вычисление атрибутов лиц, чтобы можно было сравнивать насколько они похожи
- Кластеризация похожих лиц в группы
Но это не главное. Главное, что все алгоритмы обучаются на какой-то обучающей выборке (которая никогда не является достаточно репрезентативной, и часто тоже содержит ошибки, но не это сейчас главное) для достижения максимального результата. А результатом является некая метрика, например соотношение правильно и неправильно угаданных результатов (например, лиц).
Так вот, подходим к главному. Никогда эти нейросети не достигают 100% качества в результате обучения. Всегда есть какой-то процент ошибок. А если какой-то инженер машинного обучения скажет, что он достиг 100%, то его тут же уволят за непрофпригодность, потому что он переобучил свою стеку, что на практике означает, что сетка просто запомнила всю обучающую выборку, вместо того, чтобы сделать обобщающие выводы, и будет работать вообще плохо в реальных условиях.
Итак вывод номер 1 - всегда будут примеры, на которых сетка будет ошибаться. Какой бы хорошей она не была. Даже если она даёт 99,98% качества (что вообще говоря фантастика для задачи распознавания лиц на данный момент), это означает, что из 100 000 распознанных лиц 20 будут ошибочными.
Но и это еще не всё. Есть очень хорошие нейросети от лучших исследовательских центров, которые дают дейтвительно неплохой результат, более 99% (опять же оставим в стороне для простоты изложения что конкретно значат эти проценты), вот например есть статья: https://paperswithcode.com/sota/face-verification-on-labeled-faces-in-the тут даже приведены результаты независимого исследования. И даже эти лучшие в мире сети дают ошибки в несколько десятых долей процента. Но на вашем компьютере, скорее всего, ни одна из этих сетей даже не запустится, если у вас конечно случайно не подключена пара видеокарт Titan за миллион рублей каждая.
Поэтому, тут всплывает второй фактор - в реальных условиях всегда используются упрощенные архитектуры сетей, которые представляют собой компромисс между точностью, скоростью работы и требовательностью к вычислительным ресурсам. Что означает, что они дают еще больший процент ошибок, зато мы, простые смертные, вполне можем использовать их в быту с разумной производительностью.
И тут мы приходим к статистике. В Tonfotos обрабатываются обычно очень большие архивы. У меня вот терабайт примерно. Под сотню тысяч фотографий, несколько сотен тысяч лиц. На таких масштабах всегда при самых крутых сетях будет достаточно ошибок, над которыми мы все сможем посмеяться из серии “ну блин программа тупая, ну как она могла ошибиться НА ТАКОМ!!!!”. Что уже говорить о компромиссных сетях, которые я использую. Но при этом мы почему-то забываем даже посмотреть в сторону тысяч лиц, на которых она не ошиблась, и благодаря которой мы разметили их без особых усилий за очень короткое время. А об этом забывать вовсе не стоит, ибо именно соотношением правильных и ошибочных результатов определяется эффективность сети, а вовсе не чем-то еще.
Очень легко сделать алгоритм, который вообще не будет давать смешных ошибок. Он просто и нормальных лиц будет выдавать намного меньше тоже. Нужен вам такой алгоритм? Сомневаюсь 🙂
Причем забавный факт. Обычно люди оценивают эти ошибки, как те, что вы прислали выше из серии “ну блин, это же очевидно! я, как человек, никогда бы такую глупость не сморозил бы! почему машина лажает?” Лично не искал исследования на эту тему конкретно для лиц, но по моему опыту с другими системами распознавания, предположу, что процент ошибок даже тех упрощенный сетей, что использует Tonfotos, скорее всего, меньше, чем у среднестатистического человека. То есть, если человеку не давать смотреть только на предложения, которые нейросеть пытается выскрести из низкокачественных снимков, а произвести честный эксперимент - дать одинаковое количество фоток незнакомых людей разного качества сетке и человеку и через некоторое время посмотреть, что они там понаразмечают, то мне почему-то кажется, что человек без помощи каких либо инструментов наделает гораздо больше ошибок, чем сеть. Да, возможно, ошибки будут не такими “смешными” как те, что вы привели тут для примера, человек будет ошибаться на другом. Но неизбежно будет, и смею предположить, что ошибаться будет гораздо чаще. Особенно, если фотки незнакомых ему людей - тут я думаю, качество у человека будет вообще ниже плинтуса.
В общем, надеюсь я дал исчерпывающий ответ на вопрос.