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




Добрый день!

Что же, попробую объяснить, насколько это вообще возможно. Все сейчас слышат кругом термин “искусственный интеллект”, но мало кто понимает, что это всего лишь маркетинговая уловка для выдаивания денег в первую очередь с инвесторов, а уже во вторую - с потребителей. Никакого искусственного интеллекта, в самом изначальном смысле этого слова, не существует. Есть набор методов машинного обучения, (довольно эффективных, надо сказать), которые к тому же быстро развиваются, всё более успешно решают всё более широкий круг задач.

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

В Tonfotos на данный момент используется четыре(!) разных алгоритма машинного обучения для разных этапов обработки лиц:

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

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

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

Итак вывод номер 1 - всегда будут примеры, на которых сетка будет ошибаться. Какой бы хорошей она не была. Даже если она даёт 99,98% качества (что вообще говоря фантастика для задачи распознавания лиц на данный момент), это означает, что из 100 000 распознанных лиц 20 будут ошибочными.

Но и это еще не всё. Есть очень хорошие нейросети от лучших исследовательских центров, которые дают дейтвительно неплохой результат, более 99% (опять же оставим в стороне для простоты изложения что конкретно значат эти проценты), вот например есть статья: https://paperswithcode.com/sota/face-verification-on-labeled-faces-in-the тут даже приведены результаты независимого исследования. И даже эти лучшие в мире сети дают ошибки в несколько десятых долей процента. Но на вашем компьютере, скорее всего, ни одна из этих сетей даже не запустится, если у вас конечно случайно не подключена пара видеокарт Titan за миллион рублей каждая.

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

И тут мы приходим к статистике. В Tonfotos обрабатываются обычно очень большие архивы. У меня вот терабайт примерно. Под сотню тысяч фотографий, несколько сотен тысяч лиц. На таких масштабах всегда при самых крутых сетях будет достаточно ошибок, над которыми мы все сможем посмеяться из серии “ну блин программа тупая, ну как она могла ошибиться НА ТАКОМ!!!!”. Что уже говорить о компромиссных сетях, которые я использую. Но при этом мы почему-то забываем даже посмотреть в сторону тысяч лиц, на которых она не ошиблась, и благодаря которой мы разметили их без особых усилий за очень короткое время. А об этом забывать вовсе не стоит, ибо именно соотношением правильных и ошибочных результатов определяется эффективность сети, а вовсе не чем-то еще.

Очень легко сделать алгоритм, который вообще не будет давать смешных ошибок. Он просто и нормальных лиц будет выдавать намного меньше тоже. Нужен вам такой алгоритм? Сомневаюсь 🙂

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

В общем, надеюсь я дал исчерпывающий ответ на вопрос.

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

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

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

  • Андрей ответили на это сообщение.

    Pedalkin Понятно, у вас слишком мало людей в базе, обучающая выборка получается плохо сбалансированная. Алгоритм кластеризации работает на “первой передаче” - используется быстрый, но менее точный подход. Но он не предназначен для тысяч лиц, быстрый алгоритм хорошо работает до нескольких сотен лиц, дальше нужен более точный - SVM. Он сильно медленнее, но гораздо точнее. Но он включается лишь начиная с 15 персон. На малом количестве персон ему сложно “расправить крылья”.

    Со своей стороны хочу сказать, что меня алгоритм распознавания tonfotos вполне устраивает.
    Я пока распознаю в основном только членов семьи и могу сказать, что tonfotos отличает моих детей даже во младенчестве, хотя я не всегда могу это сделать. У двух младших детей и жены распознавание близится к 100% - очень редко встречаются ошибочные кадры. Старший ребенок - больше ошибок: здесь предлагает и взрослых каких-то и других детей.
    Хуже всего ему дается распознавание моего лица - то кусок ковра предложит, то какой-то размытый цветок на заднем плане 😀 Однако программа, например, распознала меня вот на такой фотографии:

    Также сравню с picasa: в свое время я уже распознавал и сортировал все лица, которые мне предлагала пикаса и, для надежности (и поиска по нескольким лицам на фото), я прописал во всех распознанных фотографиях имена в тегах. Дак вот: tonfotos нашел и те фото (из старых), на которых тегов нет. То есть, в свое время picasa их не нашла / не распознала.
    p.s. Справедливости ради: я пока не могу сказать, а все ли фотографии с прописанными в пикасе тегами, нашел tonfotos. Процесс распознавания все еще идет.

    • Андрей ответили на это сообщение.

      Андрей спасибо большое за положительный отзыв!

      Добавлю, что моему собственному опыту, Tonfotos нашел (после уже нескольких месяцев использования) в несколько раз больше фото близких, чем нашла в свое время Picasa. Еще я специально для сравнения купил самую дорогую программу в данной категории - ACDSee. И опять же, по моим субъективным впечатлениям, там распознавание заметно менее удобно организовано. Настолько неудобно, что трудно что-то про качество сказать - я бросил и не стал процесс до конца доводить.

      12 дней спустя

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

      Ну как то не заметил существенной разницы.





      • Андрей ответили на это сообщение.

        Pedalkin сколько персон в библиотеке сейчас?

        Сколько и было - 6.
        И вот что еще заметил - при попадании новых фото с последующим распознаванием персоны: “Лыко да мочало - начинай сначала”, т.е. опять программа заново начинает шерстить весь перечень лиц (ну или лиц - по ее мнению), в т.ч. - ранее отвергнутых.

        • Андрей ответили на это сообщение.

          Pedalkin версия какая? Должна быть 1.1.2

          • Pedalkin ответили на это сообщение.

            Эту вот помидорку я буквально минут 20 как отклонил как лицо одного персонажа (когда скриншот создавал). Теперь программа предлагает ее к другому.

            • Андрей ответили на это сообщение.

              Pedalkin если это не лицо вовсе, то надо не отклонять, а удалять предложение (иконка корзинки, или “Игнорировать предложенное лицо”. Если вы говорите “Это не..”, то вы тем самым говорите программе “да, это лицо, просто лицо не этого человека”, и она делает соотвествующие выводы.

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

              • vivi ответили на это сообщение.
                • Изменено

                Подтверждаю, в новой версии 1.1.2 распознавание лиц работает намного лучше.
                Программа угадала мои детские фотографии, где мне от 1 до 8 лет. (А сейчас мне 50 с лишним)
                Правда, в единичных случаях она перепутала меня с моей женой, но это очень небольшой процент.
                Сам бы я не угадал себя, если бы не знал. Это просто магия!
                Она нашла мои отражения в блестящих предметах с фрагментом лица, сам бы я никогда не обратил внимание на такие фото.
                Предыдущая версия программы несколько раз предложила фото предметов, совершенно не похожих на лица. Я в курсе такого глюка “искусственного интеллекта”, если даже он и “интеллект”, то во всяком случае пока не совсем человечий.
                Особенность моей библиотеки: десятки тысяч фотографий, тысячи (тысячи!) лиц, и при этом пока у меня всего 6 обозначенных человек в программе (вкладка “Люди”).
                Как объясняет автор, чтобы ошибок было меньше, нужно чтобы обозначенных людей было больше. Я пока блюду упрямство и не увеличиваю это число для усложнения эксперимента. И вот, пожалуйста, результат прекрасный. Программа молодая, а конкурентов у неё уже сейчас мало. Некоторые норовят сделать функцию распознавания по подписке (пусть и на облако). Но вот из ОнДрайва мне придётся уйти, наверное. В Яндекс-Диске перестали добавляться новые люди, я написал в поддержку, так папка “Люди” теперь вообще исчезла и никто не может помочь уже который месяц. Вот тебе и гиганты индустрии.
                Так что автору данной программы большое спасибо!

                Андрей , скажите, пожалуйста, а как удалять незнакомого ненужного человека?
                Просто случайный прохожий, например.
                Если я нажму “Игнорировать предложенное лицо”, то не повредит ли это распознаванию других - нужных - лиц?
                Получается, что я сказал программе, что это не лицо вовсе? Это не вредно для неё? ))

                • Андрей ответили на это сообщение.

                  vivi нет, не навредит 🙂 пользуйтесь смело.

                  • vivi оценил это.
                  месяц спустя

                  Иногда нейросеть сходит с ума после случайного добавления неверных фоток к человеку. Удаляешь эти фото и вопрос сколько нужно удалить после этого не верно найденных, чтобы нейросеть восстановилась? 😉

                  • Андрей ответили на это сообщение.