Я собрал большую базу фоток знаменитостей (актёры, спортсмены, политики, деятели и т.д.). Пользователь вводит свою фотку, и ему на выходе говорится, на какую из звёзд он больше всего похож (в процентах).
База большая, несколько гигабайтов. Я думал, процесс такой:
1) обучаем нейросеть на базе: обрезаем лица, делаем выравнивание, получаем эмбеддинг для каждого лица из фотки, записываем в базу два поля: имя звезды и эмбеддинг лица. Нужна мощная gpu-карта?
2) вводим фотку пользователя. Получаем её эмбеддинг. Пробегаемся по всей базе и вычисляем евклидово расстояние, сравнивая эмбеддинги
3) выводим самые короткие расстояния.
Как вам такая идея? Или есть получше и поэффективнее?
Здравствуйте, alex_public, Вы писали:
_>Что за эмбеддинг? И вообще то обучения в указанном процессе просто нет. Сам эмбеддинг — это обычно применение уже натренированной модели.
+1
Использую сеть для детекции лиц, для детекции точек (landmarks) на лице, потом выравнивают и нормализуют. На результате запускают сеть для получения эмбеддинга. см.
insightface. Ну и да: детектор, лэндмарки, эмбеддинги — это уже есть готовое, обученное на многих миллионах картинок.
_>Ну тогда уж косинусное расстояние лучше брать для таких подходов.
Зависит от того, какой лоcс использовался при обучении. Сейчас самый лучший для лиц ArcFace, поэтому — да, косинусное.
_>А вообще тут лучше применить какой-нибудь классификатор на базе случайного леса или градиентного бустинга (кстати как раз тут и будет тогда настоящее обучение).
Зачем? Мне казалось, что в этом случае при добавлении нового лица в БД (а на больших предприятиях это будет регулярно) надо будет его переучивать. Если же использовать кластеризацию и поиск (
типа faiss), то это будет быстрее во всех смыслах. Загрузить туда базу эмбеддингов сотрудников и всё. Я не говорю уже о больших системах, типа распознавания лиц в Москве.
_>Вообще то это уже давным давно решённая задача. И лучшие результаты в ней показывают свёрточные нейронные сети. Просто берёшь какую-нибудь там resnet и получаешь сразу и "эмбеддинг" и классификатор в одном флаконе.
+
Здравствуйте, Nuzhny, Вы писали:
_>>Что за эмбеддинг? И вообще то обучения в указанном процессе просто нет. Сам эмбеддинг — это обычно применение уже натренированной модели.
N>+1
N>Использую сеть для детекции лиц, для детекции точек (landmarks) на лице, потом выравнивают и нормализуют. На результате запускают сеть для получения эмбеддинга. см. insightface. Ну и да: детектор, лэндмарки, эмбеддинги — это уже есть готовое, обученное на многих миллионах картинок.
А сейчас значит уже есть готовые (чтобы просто скачать уже обученные модельки) инструменты для ембеддинга картинок? Я просто как-то не в курсе. По NLP наверное все в курсе про world2vec, BERT и им подобные, а вот по картинками у меня как-то не было на слуху ни одной известной и общедоступной...
_>>А вообще тут лучше применить какой-нибудь классификатор на базе случайного леса или градиентного бустинга (кстати как раз тут и будет тогда настоящее обучение).
N>Зачем? Мне казалось, что в этом случае при добавлении нового лица в БД (а на больших предприятиях это будет регулярно) надо будет его переучивать. Если же использовать кластеризацию и поиск (типа faiss), то это будет быстрее во всех смыслах. Загрузить туда базу эмбеддингов сотрудников и всё. Я не говорю уже о больших системах, типа распознавания лиц в Москве.
Да, я тут подумал, конечно существенно зависит от задачи, что лучше брать и классификатор во многих случаях будет просто не нужен. Например если у нас только по 1 картинке на каждое имя, то пользы от его обучения будет ровно ноль. Но вот зато если у нас много разных картинок на одно имя, то вот тут уже классификатор по идее должен лучше себя показать...