Face recognition
От: steepe  
Дата: 14.05.23 06:48
Оценка:
Я собрал большую базу фоток знаменитостей (актёры, спортсмены, политики, деятели и т.д.). Пользователь вводит свою фотку, и ему на выходе говорится, на какую из звёзд он больше всего похож (в процентах).

База большая, несколько гигабайтов. Я думал, процесс такой:
1) обучаем нейросеть на базе: обрезаем лица, делаем выравнивание, получаем эмбеддинг для каждого лица из фотки, записываем в базу два поля: имя звезды и эмбеддинг лица. Нужна мощная gpu-карта?
2) вводим фотку пользователя. Получаем её эмбеддинг. Пробегаемся по всей базе и вычисляем евклидово расстояние, сравнивая эмбеддинги
3) выводим самые короткие расстояния.

Как вам такая идея? Или есть получше и поэффективнее?
Отредактировано 14.05.2023 6:49 steepe . Предыдущая версия .
Re: Face recognition
От: alex_public  
Дата: 14.05.23 16:11
Оценка:
Здравствуйте, steepe, Вы писали:

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


S>База большая, несколько гигабайтов. Я думал, процесс такой:

S>1) обучаем нейросеть на базе: обрезаем лица, делаем выравнивание, получаем эмбеддинг для каждого лица из фотки, записываем в базу два поля: имя звезды и эмбеддинг лица. Нужна мощная gpu-карта?

Что за эмбеддинг? И вообще то обучения в указанном процессе просто нет. Сам эмбеддинг — это обычно применение уже натренированной модели.

S>2) вводим фотку пользователя. Получаем её эмбеддинг. Пробегаемся по всей базе и вычисляем евклидово расстояние, сравнивая эмбеддинги


Ну тогда уж косинусное расстояние лучше брать для таких подходов.

А вообще тут лучше применить какой-нибудь классификатор на базе случайного леса или градиентного бустинга (кстати как раз тут и будет тогда настоящее обучение).

S>3) выводим самые короткие расстояния.


S>Как вам такая идея? Или есть получше и поэффективнее?


Вообще то это уже давным давно решённая задача. И лучшие результаты в ней показывают свёрточные нейронные сети. Просто берёшь какую-нибудь там resnet и получаешь сразу и "эмбеддинг" и классификатор в одном флаконе.
Re[2]: Face recognition
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 15.05.23 12:47
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Что за эмбеддинг? И вообще то обучения в указанном процессе просто нет. Сам эмбеддинг — это обычно применение уже натренированной модели.


+1

Использую сеть для детекции лиц, для детекции точек (landmarks) на лице, потом выравнивают и нормализуют. На результате запускают сеть для получения эмбеддинга. см. insightface. Ну и да: детектор, лэндмарки, эмбеддинги — это уже есть готовое, обученное на многих миллионах картинок.

_>Ну тогда уж косинусное расстояние лучше брать для таких подходов.


Зависит от того, какой лоcс использовался при обучении. Сейчас самый лучший для лиц ArcFace, поэтому — да, косинусное.

_>А вообще тут лучше применить какой-нибудь классификатор на базе случайного леса или градиентного бустинга (кстати как раз тут и будет тогда настоящее обучение).


Зачем? Мне казалось, что в этом случае при добавлении нового лица в БД (а на больших предприятиях это будет регулярно) надо будет его переучивать. Если же использовать кластеризацию и поиск (типа faiss), то это будет быстрее во всех смыслах. Загрузить туда базу эмбеддингов сотрудников и всё. Я не говорю уже о больших системах, типа распознавания лиц в Москве.

_>Вообще то это уже давным давно решённая задача. И лучшие результаты в ней показывают свёрточные нейронные сети. Просто берёшь какую-нибудь там resnet и получаешь сразу и "эмбеддинг" и классификатор в одном флаконе.


+
Re[3]: Face recognition
От: alex_public  
Дата: 16.05.23 01:06
Оценка:
Здравствуйте, Nuzhny, Вы писали:

_>>Что за эмбеддинг? И вообще то обучения в указанном процессе просто нет. Сам эмбеддинг — это обычно применение уже натренированной модели.

N>+1
N>Использую сеть для детекции лиц, для детекции точек (landmarks) на лице, потом выравнивают и нормализуют. На результате запускают сеть для получения эмбеддинга. см. insightface. Ну и да: детектор, лэндмарки, эмбеддинги — это уже есть готовое, обученное на многих миллионах картинок.

А сейчас значит уже есть готовые (чтобы просто скачать уже обученные модельки) инструменты для ембеддинга картинок? Я просто как-то не в курсе. По NLP наверное все в курсе про world2vec, BERT и им подобные, а вот по картинками у меня как-то не было на слуху ни одной известной и общедоступной...

_>>А вообще тут лучше применить какой-нибудь классификатор на базе случайного леса или градиентного бустинга (кстати как раз тут и будет тогда настоящее обучение).

N>Зачем? Мне казалось, что в этом случае при добавлении нового лица в БД (а на больших предприятиях это будет регулярно) надо будет его переучивать. Если же использовать кластеризацию и поиск (типа faiss), то это будет быстрее во всех смыслах. Загрузить туда базу эмбеддингов сотрудников и всё. Я не говорю уже о больших системах, типа распознавания лиц в Москве.

Да, я тут подумал, конечно существенно зависит от задачи, что лучше брать и классификатор во многих случаях будет просто не нужен. Например если у нас только по 1 картинке на каждое имя, то пользы от его обучения будет ровно ноль. Но вот зато если у нас много разных картинок на одно имя, то вот тут уже классификатор по идее должен лучше себя показать...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.