Пример использования сиамской сети для построения систем распознавания лиц.

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

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

Это вообще возможно? Как они могут так сравнивать картинки? 🤯

Давай попробуем придумать способ построить эту штуку.

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

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

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

Все просто, правда? 😎

Составление хорошего представления.

Давайте сосредоточимся на формате, который позволяет нам сравнивать два изображения. Как мы можем это сделать?

Вот простой способ подумать об этом: мы могли бы составить список особенностей каждого человека. Например, у нас могут быть такие функции:

  • Цвет глаз
  • Цвет волос
  • Длина волос
  • Цвет бороды
  • Размер носа

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

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

Осталось всего две небольшие проблемы.

Предполагая, что мы можем превратить пиксели в список функций, мы можем открыть шампанское 🍾 и перейти к более интересной задаче, но нам все равно нужно ответить на пару вопросов:

  1. Какой хороший список функций?
  2. Как же мы можем совершить обращение?

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

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

Конечно, на помощь приходит машинное обучение.

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

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

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

Легко, правда?

Пожалуйста, не отвечайте на это.