Двач.hk не отвечает.
Вы видите копию треда, сохраненную 7 марта 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image.png1,4 Мб, 1500x670
У кого есть предположения, как работал финд фейс, 1330190 В конец треда | Веб
У кого есть предположения, как работал финд фейс, а точнее как он так быстро искал? Я вообще нихуя не пойму.

Судя по интервью с разрабами, у них нейросеть выделяла то ли 80, то ли 128 точек на лице, ну это не важно. Я юзаю dlib, там нейросеть выдает 128 точек.

Максимум который мне удалось добиться, это 7 секунд (!!!!) для поиска среди 1 млн фотографий. Это пиздец как долго. Я пробовал переводить все точки из float в int точность падает не критично вообще, но скорость выше, искать по 10 разным точкам вместо 128, а потом из этого результата делать детальный анализ по 128, упростил в два раза формулу поиска расстояния - всё равно сука долго.

Даже допустим теоретически хотя я даже пробовать не хочу, нет смысла заставлю поиск работать на 8-16-etc ядрах, то скорость увеличится всего в 8-16-etc раз, то есть поиск по рашке всё равно будет занимать минуту, а то и больше.

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

Вот пример 10 первых точек из описания лица 2 разных людей, они все могут быть как + так и -

[1.0] -41435182
[1.1] 86082510
[1.2] 73057301
[1.3] -63838362
[1.4] -161909908
[1.5] 21032849
[1.6] -79625226
[1.7] -91760754
[1.8] 198397651
[1.9] -71357108

[2.0] -248804286
[2.1] -50261076
[2.2] 74084460
[2.3] -95639087
[2.4] -193871259
[2.5] -50331693
[2.6] 45858778
[2.7] -36446824
[2.8] 134124800
[2.9] -155780196

А схожесть лица ищется примерно так

abs([1.0] - [2.0]) + abs([1.1] - [2.1]) + .... + abs([1.127] - [2.127])

и чем меньше полученное число, тем лица более схожи или вообще один человек, в идеале эта разница должна стремиться к 0, но это будет только на одной и той же фотографии. Что значат эти точки - не известно, нельзя сказать что эти точки описывают глаза, а эти нос. Если например закрасить рот на одной фотке и сравнить их, то ВСЕ точки немного поменяются
2 1330213
>>30190 (OP)

>У кого есть предположения


Ну наверное по фичам распределяет, на этапе препроцессинга можно кучу инфы получить
А нейронки для пидоров, думаю там они их для маркетинга приплели
image.png131 Кб, 600x246
3 1330230
>>30213
Типа такого что ли? В случае с лицами не будет работать. К тому же нейронка распознает лицо под углом, повернутое и тд, главное чтоб оба глаза видны были
4 1330236
>>30230

> В случае с лицами не будет работать


Кококо, у меня древний фотик ебало находит без всяких твоих нейронок, ставлю литр пивчана, что там нихуя не нейронки
5 1330238
>>30236
Одно дело просто лицо найти, хули там надо то, 2 глаза да рот определить. Другое дело найти похожие лица, а в идеале одного и того же человека, да еще и на разных фотках
6 1330243
>>30238

>Одно дело просто лицо найти


Ну ебись с нейронками тогда
7 1330247
>>30243
Другого варианта и нет. Разве что у них сама нейронка какой то хэш генерировала, ну это хз. Твой же фотик так не мог, правильно?
8 1330251
>>30247
Чет я нихуя не понял, там разные челы и у всех совпадение 100%, лол.
9 1330255
>>30251
Просто дети Коржа на аватарку поставили
10 1330260
>>30255
Понятно, а что за сервис? Почему ты считаешь, что там не наебка?
11 1330267
>>30260
Потому что это тот сайт который я и делал?
12 1330274
>>30267

>сайт


поиск Макса Коржа?
13 1330275
>>30274
Кого угодно
14 1330287
>>30275

>Кого угодно


А вот вопрос, почему лиц? Какая алгоритму на хуй разница, по идее должен распознавать все что угодно, любые объекты в различных ракурсах.
15 1330296
>>30190 (OP)
Возможно супералгоритм работает не на "обычных" CPU, которые можно в любом магазине купить, а ребята ради этого заморочились и перенесли "алгоритм" на железо, т.е. на FGPA.
16 1330297
>>30287
Ну если обучить на дорожные знаки, то будет знаки распознавать и тд

>>30296
Они писали, что финд фейс на 4 серверах стоял не самых мощных. У меня есть только еще идея перенести базу на blazingDB какую нибудь, больше нет вариантов
17 1330306
>>30297

>Ну если обучить на дорожные знаки, то будет знаки распознавать и тд


Тогда почему они не обучают? Нахождение лиц менее перспективно, чем оценивание дорожной обстановки.
18 1330316
>>30306

>Тогда почему они не обучают? Нахождение лиц менее перспективно, чем оценивание дорожной обстановки


лол че? почти все современные машины знаки на панель приборов выводят
19 1330325
>>30316

> почти все современные машины знаки на панель приборов выводят


давай пруфвидосик
20 1330373
>>30325
В гугле забанили что ли блять? У мерседеса такое есть, у ауди и бмв вроде тоже, про теслу молчу
21 1330384
>>30373

> У мерседеса такое есть, у ауди и бмв вроде тоже, про теслу молчу


У хуерса, ты рекламных роликов насмотрелся?
22 1330397
>>30384
Ты раздел с /б не перепутал?
23 1330787
Подписался на интересный тред.
мимодаун, который в этом ничего не смыслит
24 1330791
>>30397
То есть пруфоф нет.
Теперь можешь пройти нахуй.
25 1330806
>>30190 (OP)

>Максимум который мне удалось добиться, это 7 секунд (!!!!) для поиска среди 1 млн фотографий.


Насколько быстро надо?
26 1330816
ОП, лучше скажи, как ты собрался выкачивать все эти миллионы миллиарды фото ВК для анализа? Особенно учитывая что VK API имеет пиздецовые ограничения по количеству запросов.
27 1330822
>>30816
Я уже всю беларусь выкачал

>>30806
100 млн за 1 секунду c:
28 1330823
>>30822
Ну ладно, если не за 1, то за 7 хотя бы, в 100 раз быстрее то есть. Пока только blazingdb и mapd нагуглил, надо будет убунту второй системой ставить, пока ебаться лень с этим, через пару дней может попробую
29 1330825
>>30822
Сколько у тебя реально получается запросов к API в секунду пока не сработает ограничение? Сколько весят фотки беларуси?
30 1330827
>>30825
в апи всё написано. 4 запроса в секунду. но это по аццесс токену, а не по ип
31 1330856
>>30190 (OP)

>Максимум который мне удалось добиться, это 7 секунд (!!!!) для поиска среди 1 млн фотографий.


Ну и? А среди 100к фотографий? Распараллелил на сколько тебе нужно - получил те самые 0.5 секунд на ответ, или как быстро там он работал.

Пока что вопрос масштабирования. Ну и да, наверняка они ебались с оптимизацией.
32 1330859
>>30856
1 ядро ищет в 1 млн за 7 сек. В 100 млн надо будет 100 ядер, лол. И это еще учесть что тесты были на core i7, а на серверах ставят зеоны с отключенным бустом на 2 ггц, то есть надо будет 150 ядер. А если 300 млн фоток, то говорить даже нечего
33 1330879
Нужен алгоритм который каким то образом будет разделять миллионы дескрипторов лиц на типы и подтипы, например по ширине глаз, соотношению размеров носа и рта и тд. А дальше бинарное дерево поиска.
34 1330880
>>30879
Такое не сделать, я пробовал сделать некие опорные точки, например лицо со всеми координатам 0, или 10000000 и тд, всё равно чушь выдает всякую. Пробовал взять 10 разных лиц за эталон, думал что лицо определенного человека всегда будет похоже на лицо одного из эталонных, а хуй там. Вообще лица разных людей всегда в одном и том же диапазоне разницы, то есть взять 3 разных людей у них всегда будут примерно одни и те же расстояния друг от друга. По сути нейронка лишь может сказать на сколько процентов один человек похож на другого и всё, даже если жирного с тощим сравнивать, или тощего с тощим и тд
35 1330881
>>30879
ну и да, у людей настолько ничтожная разница в расстояниях глаз, носа и тд, что по фотке это просто нереально высчитать. Разве что в студийных условиях, но у нас то фотки то с мобильника, то еще какие
4550.jpg31 Кб, 979x512
36 1330913
>>30822
Наговнякал на шарпе поиск n минимальных расстояний среди 100млн восьмиточечных записей. В однопоточном режиме на ноутбучном процессоре 2012 года работает за 4.6 секунды. Опчик, на каком тормозном говне ты кодишь?
37 1330935
38 1330963
>>30913
Покажи код
39 1331017
>>30963
>>30913
Ну и еще, допустим даже 13 точек я смогу в ОЗУ хранить, но по 13 точкам я найду например 10.000 похожих лиц, которых надо будет еще по 128 точкам прогнать. Тут то что делать? Мускул обосрется наверное отдавать 10к строк по 10к айдишникам
40 1331077
>>30963
https://pastebin.com/L7aUVbW2
100 млн записей по 8 точек за 1.8 секунды на моем ноутбуке. Перепиши нормально и на быстром языке да запусти на современном железе.
41 1331166
>>31077
я чето не понял, твой код из массива минимальное значение просто находит что ли?
42 1331199
>>31166
Этот код считает минимальное расстояние до образца. Поиск нескольких ближайших ничего принципиально не меняет, тысяча ищется за 2.5 секунды. Полная проверка по 128 точкам нескольких тысяч выполняется за десятки микросекунд. Суть в том, что подобный код на С на современном железе с avx-512 прекрасно вписывается в требуемую производительность, если даже неоптимальный код на шарпе с кучей переаллокаций на голимом sse4 работает несколько секунд.
43 1331201
возможно тебе подойдет seq2seq. Это когда система сама подбирает минимальный размер хеша, который однозначно кодирует какое-то лицо. То есть не ты подбираешь features, а система делает минимально возможный набор, по которым однозначно идентифицируется сэмпл среди таких же других
44 1331244
>>31199
Хочешь сказать что питон к примеру в 1000 раз медленнее? Я могу допустить что он в 2, 3, 5 раз медленнее, но не 1000 жеж.

Попробуй abs(1-1)+1 128кк раз прогнать
45 1331295
Задача называется k nearest neighbors.
У тебя есть набор точек в многомерном пространстве, нужно найти ближайшую. Полный перебор работает за o(n) и никуда не годится.

Ее решение - построить структуру данных, которая, будет работать как индекс. Для числа измерений n=2,3 лучше всего подходит квадро и октодерево. Лучше всего изучить, как они работают, чтобы была интуиция и для многомерных случаев. То есть набери octotree nearest neighbor и почитай про алгоритм.

Но для n=2 мы делим плоскость на 4 квадрата, для n=3 мы делим куб на 8 подкубов. Несложно заметить, что для n=128 нам пришлось бы делить гиперпространство на 2^128 гиперкубов. Это неэффективно. Поэтому для n=128 лучше всего будет работать kd-дерево. Принцип в целом тот же, но мы делим пространство плоскостью на две части вдоль случайной оси, дальше каждое подпространство делим точно так же. kd tree nearest neighbor даст алгоритм - я его не изучал, если что, но пользовался им.

Это - точные решения. Но для find face работают еще и приблизительные решения (approximate k nearest neighbors) - они дают приемлемые результаты. Они сводятся к тому, что мы может отобразить гиперпространство на пространство меньшей размерности, приблизительно сохраняя расстояния. Например, изучи как работает geohash. Есть прекрасная opensource библиотека от фейбука - faiss, где оно реализовано.

FindFace можно сделать за вечер с помощью нейросетки из интернета и faiss.
46 1331296
>>30879
Вот чувак почти придумал kd-tree. Оставшийся шаг понять, что нам не нужна ширина глаз и т. д., нам достаточно осей в нашем 128-мерном пространстве для деления на типы и подтипы.
47 1331403
>>30190 (OP)
Уменьшить количество точек автоэнкодером?
48 1331445
>>31244

>Попробуй abs(1-1)+1 128кк раз прогнать


0.5 секунды
>>31295
Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.
49 1331483
>>31445

>Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.


Не придется, за O(log n) делается добавление в сбалансированное k-d дерево.
50 1331645
>>31445

>0.5 секунды


Хм. Видимо потому что у тебя в озу сразу данные. А мне их с диска читать надо. Ну все равно это не выход, 128 точек и инфу об аккаунте в озу хранить очень дорого. А хранить например 14 точек, искать 40.000 ближайших аккаунтов = очень долгий запрос по выборке 128 точек у этих аккаунтов для детального подсчета. Надо будет эти деревья глянуть, где то вчера на библиотеку от спотифай натыкался
51 1331680
>>31645

> 128 точек и инфу об аккаунте в озу хранить очень дорого


А почему бы не хранить не всю инфу об аккаунте а только ключ, и потом по ключу из БД уже брать инфу об аккаунте?
52 1331705
>>31199

> Я могу допустить что он в 2, 3, 5 раз медленнее



Ну на голой математике без оптимизаций у меня в среднем в 60-90 раз медленнее получается
53 1331741
>>31680
Ну так, считай в базе условно 10 млн лиц, 13 поисковых точек держим в озу. Мы при первом грубом отборе нашли например 40.000 похожих лиц, далее надо более точно найти по 128 точкам уже, это уже надо будет из базы выгружать. Сколько там времени займет выгрузка 40к лиц по айдишнику причем, а не всех подряд. Я думаю не меньше 30 сек, или минуты, не тестил
54 1331743
>>31741
А если 200 млн лиц, или 300 даже, то при грубой выборке мы получим например 1млн похожих лиц, такое из базы уже точно не выгрузить за секунду будет
55 1331747
>>31741
128 точек sizeof(float) + sizeof(long) = (128 4) + 8 = (520 100кк) / (1024 1024) = 49591МБ
Т.е. всего тебе нужно 50ГБ ОЗУ для 100кк записей которые состоят из 128ми точек + ключа (айдишника профиля в БД). Скажем средний сервер будет иметь 8гб оперативы итого тебе нужно 50 / 8 = всего лишь 7 серверов.
56 1331748
>>31747

>128 точек (умножить на) sizeof(float) + sizeof(long) = (128 (умножить на) 4) + 8 = (520 (умножить на) 100кк) / (1024 (умножить на) 1024) = 49591МБ

57 1331774
>>31747
лол. Если уж на то пошло, то можно и 1 сервер хоть со 128 гб взять. Правда стоят они пиздец
58 1331776
>>30859
Очевидно что сервис кешировал результаты и первая выборка всегда делалась по кешу.
От того и не 7 сек.
59 1331777
>>31776
Да ниче он там не кэшировал. Люди же всегда разных людей искали, а не только условного путина или еще кого
60 1331780
>>31777
Видел когда то прожки для состовления фотороботов?
Ну где срез глаз подставляется, причесочка, хуе мое?
61 1331788
>>31780
А причем тут финдфейс? Подбор размера глаз и прочее будет работать только если человек ровно в камеру смотрит и все масштабы известны. Тут другая система - какая - неизвестно, нейросеть сама какие то точки для себя определила, что они значат никто не знает. Ну если покопаться то думаю можно найти, но это всё равно что в чан с говном лезть
62 1331796
>>31788
Эта махия.
Обратный инженегринг в помощь.
63 1331880
В итоге файндфейс купила гэбня и теперь они будут пилить цифровой ГУЛАГ специально для вас с распознаванием лиц реалтайм.
64 1331892
>>30859

>1 ядро


считай на GPU, дурачок
65 1331894
>>31880
Так на ЧС нейроночка в реалтайме всех распознавала.
66 1332239
>>31445

>Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.


Вот же идиот. Написал ему открытым текстом ИСПОЛЬЗУЙ FAISS. Нет, опять возят сопли про то, как за o(n) изобрести велосипед.
>>31680

>А почему бы не хранить не всю инфу об аккаунте а только ключ, и потом по ключу из БД уже брать инфу об аккаунте?


Потому что он очень тупой.
>>31747

>Т.е. всего тебе нужно 50ГБ ОЗУ для 100кк записей которые состоят из 128ми точек + ключа (айдишника профиля в БД). Скажем средний сервер будет иметь 8гб оперативы итого тебе нужно 50 / 8 = всего лишь 7 серверов.


А дальше можно прикинуть, что 32-битный флоат это немного оверкилл и восьми бит будет достаточно. И получится, что все дерево влезет бытовой ПК с 16 гигами оперативки.
67 1332494
Файндфейс использовал алгоритм state of the art 2015, сейчас уже есть версия 2018 этого алгоритма
68 1336511
1) На ГПУ считать такой объем не получится, ну по крайней мере за разумное время. 11 гб в видеокарте максимум, надо будет 5-10 подходов делать, много времени займет. Хоть и написаны циферки 35 гб скорость оперативки и тд, но по факту оно не будет так быстро работать. Да когда данные в видеокарту уже попали, она рассчитывает всё моментально, но загрузить в видеокарту данные занимает время. Ладно еще 5-10 млн фоток сравнить, но если речь о 300 млн, то уйдет минимум пол минуты-минута.

2) Не знаю что там насчет FAISS, но с другими схожими плагинами у меня отказываются строиться такие большие деревья, просто вылетает, 2-3 миллиона по 128 точек ок, дальше всё, хоть и система 64 битная и оперативки хватает, да и жрет оно там по факту куда больше веса самих циферок, так что 200-300 млн фоток не влезут даже в 128 гб озу, не говоря уж о 64 и меньше

3) По 10-15-20 точкам искать не вариант, если объем будет в 100кк фоток, там погрешность пиздец будет, надо будет еще дополнительное миллионов 5 записей перебирать по 128 точкам, чтобы точные совпадения найти. Получается мы нашли 5кк схожих фоток по 20 точкам, надо эти 5кк фоток еще из бд выгрузить и проверить их уже, чтобы найти 10-20 самых похожих. Хрень полная
69 1336512
Вот если бы придумать, как поделить 128 мерное пространство на 100-1000 или хоть сколько-нибудь областей например, то было бы норм. Если с 1д, 2д, 3д это хотя бы визуально представить можно, то что там с 128 делать хуй знает, без четкой формулы это представить всё равно невозможно
70 1336515
Тащемта разрабы ФФ сами говорили, что у них на простом монгодб всё работает
71 1346577
Ты уже запилил и выложил на http://searchface.ru/?
72 1346677
>>46577
Я запилил, но сервис не мой, у меня мощности нет чтоб весь вк обрабатывать, а так теоретически мог бы запустить, но качество поиска похуже, надо нейронку обучать по новому, не собираюсь этим заниматься, заебало уже. Тестировал на 10млн фотках, ищет моментально
73 1346679
>>46677

>


На чём писал? Предоставишь код на гитхабе?
74 1346701
>>46679
Я и так все решения опенсорсные использовал. Бот на питоне, веб на пхп, база mysql, определение лиц dlib, кнн дерево annoy
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 7 марта 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски