Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
73 4 24

У кого есть предположения, как работал финд фейс, Аноним 19/01/19 Суб 17:50:53 13301901
image.png (1452Кб, 1500x670)
1500x670
У кого есть предположения, как работал финд фейс, а точнее как он так быстро искал? Я вообще нихуя не пойму.

Судя по интервью с разрабами, у них нейросеть выделяла то ли 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, но это будет только на одной и той же фотографии. Что значат эти точки - не известно, нельзя сказать что эти точки описывают глаза, а эти нос. Если например закрасить рот на одной фотке и сравнить их, то ВСЕ точки немного поменяются
Аноним 19/01/19 Суб 18:15:10 13302132
>>1330190 (OP)
>У кого есть предположения
Ну наверное по фичам распределяет, на этапе препроцессинга можно кучу инфы получить
А нейронки для пидоров, думаю там они их для маркетинга приплели
Аноним 19/01/19 Суб 18:23:55 13302303
image.png (131Кб, 600x246)
600x246
>>1330213
Типа такого что ли? В случае с лицами не будет работать. К тому же нейронка распознает лицо под углом, повернутое и тд, главное чтоб оба глаза видны были
Аноним 19/01/19 Суб 18:29:42 13302364
>>1330230
> В случае с лицами не будет работать
Кококо, у меня древний фотик ебало находит без всяких твоих нейронок, ставлю литр пивчана, что там нихуя не нейронки
Аноним 19/01/19 Суб 18:32:59 13302385
>>1330236
Одно дело просто лицо найти, хули там надо то, 2 глаза да рот определить. Другое дело найти похожие лица, а в идеале одного и того же человека, да еще и на разных фотках
Аноним 19/01/19 Суб 18:38:04 13302436
>>1330238
>Одно дело просто лицо найти
Ну ебись с нейронками тогда
Аноним 19/01/19 Суб 18:40:28 13302477
5ee4b-clip-31kb.jpg (33Кб, 682x437)
682x437
image.png (1333Кб, 1920x1080)
1920x1080
>>1330243
Другого варианта и нет. Разве что у них сама нейронка какой то хэш генерировала, ну это хз. Твой же фотик так не мог, правильно?
Аноним 19/01/19 Суб 18:45:40 13302518
>>1330247
Чет я нихуя не понял, там разные челы и у всех совпадение 100%, лол.
Аноним 19/01/19 Суб 18:47:00 13302559
>>1330251
Просто дети Коржа на аватарку поставили
Аноним 19/01/19 Суб 18:51:12 133026010
>>1330255
Понятно, а что за сервис? Почему ты считаешь, что там не наебка?
Аноним 19/01/19 Суб 18:59:01 133026711
>>1330260
Потому что это тот сайт который я и делал?
Аноним 19/01/19 Суб 19:06:41 133027412
>>1330267
>сайт
поиск Макса Коржа?
Аноним 19/01/19 Суб 19:08:39 133027513
Аноним 19/01/19 Суб 19:21:45 133028714
>>1330275
>Кого угодно
А вот вопрос, почему лиц? Какая алгоритму на хуй разница, по идее должен распознавать все что угодно, любые объекты в различных ракурсах.
Аноним 19/01/19 Суб 19:36:17 133029615
>>1330190 (OP)
Возможно супералгоритм работает не на "обычных" CPU, которые можно в любом магазине купить, а ребята ради этого заморочились и перенесли "алгоритм" на железо, т.е. на FGPA.
Аноним 19/01/19 Суб 19:40:17 133029716
>>1330287
Ну если обучить на дорожные знаки, то будет знаки распознавать и тд

>>1330296
Они писали, что финд фейс на 4 серверах стоял не самых мощных. У меня есть только еще идея перенести базу на blazingDB какую нибудь, больше нет вариантов
Аноним 19/01/19 Суб 19:57:53 133030617
>>1330297
>Ну если обучить на дорожные знаки, то будет знаки распознавать и тд
Тогда почему они не обучают? Нахождение лиц менее перспективно, чем оценивание дорожной обстановки.
Аноним 19/01/19 Суб 20:15:51 133031618
>>1330306
>Тогда почему они не обучают? Нахождение лиц менее перспективно, чем оценивание дорожной обстановки
лол че? почти все современные машины знаки на панель приборов выводят
Аноним 19/01/19 Суб 20:22:58 133032519
>>1330316
> почти все современные машины знаки на панель приборов выводят
давай пруфвидосик
Аноним 19/01/19 Суб 20:53:48 133037320
>>1330325
В гугле забанили что ли блять? У мерседеса такое есть, у ауди и бмв вроде тоже, про теслу молчу
Аноним 19/01/19 Суб 21:04:08 133038421
>>1330373
> У мерседеса такое есть, у ауди и бмв вроде тоже, про теслу молчу
У хуерса, ты рекламных роликов насмотрелся?
Аноним 19/01/19 Суб 21:13:42 133039722
>>1330384
Ты раздел с /б не перепутал?
Аноним 20/01/19 Вск 14:08:26 133078723
Подписался на интересный тред.
мимодаун, который в этом ничего не смыслит
Аноним 20/01/19 Вск 14:13:42 133079124
>>1330397
То есть пруфоф нет.
Теперь можешь пройти нахуй.
Аноним 20/01/19 Вск 14:39:14 133080625
>>1330190 (OP)
>Максимум который мне удалось добиться, это 7 секунд (!!!!) для поиска среди 1 млн фотографий.
Насколько быстро надо?
Аноним 20/01/19 Вск 14:51:11 133081626
ОП, лучше скажи, как ты собрался выкачивать все эти миллионы миллиарды фото ВК для анализа? Особенно учитывая что VK API имеет пиздецовые ограничения по количеству запросов.
Аноним 20/01/19 Вск 15:00:06 133082227
>>1330816
Я уже всю беларусь выкачал

>>1330806
100 млн за 1 секунду c:
Аноним 20/01/19 Вск 15:01:18 133082328
>>1330822
Ну ладно, если не за 1, то за 7 хотя бы, в 100 раз быстрее то есть. Пока только blazingdb и mapd нагуглил, надо будет убунту второй системой ставить, пока ебаться лень с этим, через пару дней может попробую
Аноним 20/01/19 Вск 15:01:33 133082529
>>1330822
Сколько у тебя реально получается запросов к API в секунду пока не сработает ограничение? Сколько весят фотки беларуси?
Аноним 20/01/19 Вск 15:03:07 133082730
>>1330825
в апи всё написано. 4 запроса в секунду. но это по аццесс токену, а не по ип
Аноним 20/01/19 Вск 15:54:08 133085631
>>1330190 (OP)
>Максимум который мне удалось добиться, это 7 секунд (!!!!) для поиска среди 1 млн фотографий.
Ну и? А среди 100к фотографий? Распараллелил на сколько тебе нужно - получил те самые 0.5 секунд на ответ, или как быстро там он работал.

Пока что вопрос масштабирования. Ну и да, наверняка они ебались с оптимизацией.
Аноним 20/01/19 Вск 16:02:09 133085932
>>1330856
1 ядро ищет в 1 млн за 7 сек. В 100 млн надо будет 100 ядер, лол. И это еще учесть что тесты были на core i7, а на серверах ставят зеоны с отключенным бустом на 2 ггц, то есть надо будет 150 ядер. А если 300 млн фоток, то говорить даже нечего
Аноним 20/01/19 Вск 16:37:36 133087933
Нужен алгоритм который каким то образом будет разделять миллионы дескрипторов лиц на типы и подтипы, например по ширине глаз, соотношению размеров носа и рта и тд. А дальше бинарное дерево поиска.
Аноним 20/01/19 Вск 16:48:10 133088034
>>1330879
Такое не сделать, я пробовал сделать некие опорные точки, например лицо со всеми координатам 0, или 10000000 и тд, всё равно чушь выдает всякую. Пробовал взять 10 разных лиц за эталон, думал что лицо определенного человека всегда будет похоже на лицо одного из эталонных, а хуй там. Вообще лица разных людей всегда в одном и том же диапазоне разницы, то есть взять 3 разных людей у них всегда будут примерно одни и те же расстояния друг от друга. По сути нейронка лишь может сказать на сколько процентов один человек похож на другого и всё, даже если жирного с тощим сравнивать, или тощего с тощим и тд
Аноним 20/01/19 Вск 16:49:26 133088135
>>1330879
ну и да, у людей настолько ничтожная разница в расстояниях глаз, носа и тд, что по фотке это просто нереально высчитать. Разве что в студийных условиях, но у нас то фотки то с мобильника, то еще какие
Аноним 20/01/19 Вск 17:43:54 133091336
4550.jpg (31Кб, 979x512)
979x512
>>1330822
Наговнякал на шарпе поиск n минимальных расстояний среди 100млн восьмиточечных записей. В однопоточном режиме на ноутбучном процессоре 2012 года работает за 4.6 секунды. Опчик, на каком тормозном говне ты кодишь?
Аноним 20/01/19 Вск 18:33:15 133093537
Аноним 20/01/19 Вск 18:57:00 133096338
Аноним 20/01/19 Вск 20:05:30 133101739
>>1330963
>>1330913
Ну и еще, допустим даже 13 точек я смогу в ОЗУ хранить, но по 13 точкам я найду например 10.000 похожих лиц, которых надо будет еще по 128 точкам прогнать. Тут то что делать? Мускул обосрется наверное отдавать 10к строк по 10к айдишникам
Аноним 20/01/19 Вск 20:46:20 133107740
>>1330963
https://pastebin.com/L7aUVbW2
100 млн записей по 8 точек за 1.8 секунды на моем ноутбуке. Перепиши нормально и на быстром языке да запусти на современном железе.
Аноним 20/01/19 Вск 21:48:25 133116641
>>1331077
я чето не понял, твой код из массива минимальное значение просто находит что ли?
Аноним 20/01/19 Вск 22:13:33 133119942
>>1331166
Этот код считает минимальное расстояние до образца. Поиск нескольких ближайших ничего принципиально не меняет, тысяча ищется за 2.5 секунды. Полная проверка по 128 точкам нескольких тысяч выполняется за десятки микросекунд. Суть в том, что подобный код на С на современном железе с avx-512 прекрасно вписывается в требуемую производительность, если даже неоптимальный код на шарпе с кучей переаллокаций на голимом sse4 работает несколько секунд.
Аноним 20/01/19 Вск 22:15:12 133120143
возможно тебе подойдет seq2seq. Это когда система сама подбирает минимальный размер хеша, который однозначно кодирует какое-то лицо. То есть не ты подбираешь features, а система делает минимально возможный набор, по которым однозначно идентифицируется сэмпл среди таких же других
Аноним 20/01/19 Вск 22:40:58 133124444
>>1331199
Хочешь сказать что питон к примеру в 1000 раз медленнее? Я могу допустить что он в 2, 3, 5 раз медленнее, но не 1000 жеж.

Попробуй abs(1-1)+1 128кк раз прогнать
Аноним 20/01/19 Вск 23:46:54 133129545
Задача называется 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.
Аноним 20/01/19 Вск 23:48:16 133129646
>>1330879
Вот чувак почти придумал kd-tree. Оставшийся шаг понять, что нам не нужна ширина глаз и т. д., нам достаточно осей в нашем 128-мерном пространстве для деления на типы и подтипы.
Аноним 21/01/19 Пнд 07:35:44 133140347
>>1330190 (OP)
Уменьшить количество точек автоэнкодером?
Аноним 21/01/19 Пнд 09:12:16 133144548
>>1331244
>Попробуй abs(1-1)+1 128кк раз прогнать
0.5 секунды
>>1331295
Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.
Аноним 21/01/19 Пнд 10:30:54 133148349
>>1331445
>Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.
Не придется, за O(log n) делается добавление в сбалансированное k-d дерево.
Аноним 21/01/19 Пнд 13:25:37 133164550
>>1331445
>0.5 секунды
Хм. Видимо потому что у тебя в озу сразу данные. А мне их с диска читать надо. Ну все равно это не выход, 128 точек и инфу об аккаунте в озу хранить очень дорого. А хранить например 14 точек, искать 40.000 ближайших аккаунтов = очень долгий запрос по выборке 128 точек у этих аккаунтов для детального подсчета. Надо будет эти деревья глянуть, где то вчера на библиотеку от спотифай натыкался
Аноним 21/01/19 Пнд 13:55:02 133168051
>>1331645
> 128 точек и инфу об аккаунте в озу хранить очень дорого
А почему бы не хранить не всю инфу об аккаунте а только ключ, и потом по ключу из БД уже брать инфу об аккаунте?
Аноним 21/01/19 Пнд 14:32:30 133170552
>>1331199
> Я могу допустить что он в 2, 3, 5 раз медленнее

Ну на голой математике без оптимизаций у меня в среднем в 60-90 раз медленнее получается
Аноним 21/01/19 Пнд 15:10:51 133174153
>>1331680
Ну так, считай в базе условно 10 млн лиц, 13 поисковых точек держим в озу. Мы при первом грубом отборе нашли например 40.000 похожих лиц, далее надо более точно найти по 128 точкам уже, это уже надо будет из базы выгружать. Сколько там времени займет выгрузка 40к лиц по айдишнику причем, а не всех подряд. Я думаю не меньше 30 сек, или минуты, не тестил
Аноним 21/01/19 Пнд 15:13:32 133174354
>>1331741
А если 200 млн лиц, или 300 даже, то при грубой выборке мы получим например 1млн похожих лиц, такое из базы уже точно не выгрузить за секунду будет
Аноним 21/01/19 Пнд 15:17:37 133174755
>>1331741
128 точек sizeof(float) + sizeof(long) = (128 4) + 8 = (520 100кк) / (1024 1024) = 49591МБ
Т.е. всего тебе нужно 50ГБ ОЗУ для 100кк записей которые состоят из 128ми точек + ключа (айдишника профиля в БД). Скажем средний сервер будет иметь 8гб оперативы итого тебе нужно 50 / 8 = всего лишь 7 серверов.
Аноним 21/01/19 Пнд 15:18:20 133174856
>>1331747
>128 точек (умножить на) sizeof(float) + sizeof(long) = (128 (умножить на) 4) + 8 = (520 (умножить на) 100кк) / (1024 (умножить на) 1024) = 49591МБ
Аноним 21/01/19 Пнд 15:57:49 133177457
>>1331747
лол. Если уж на то пошло, то можно и 1 сервер хоть со 128 гб взять. Правда стоят они пиздец
Аноним 21/01/19 Пнд 15:59:00 133177658
>>1330859
Очевидно что сервис кешировал результаты и первая выборка всегда делалась по кешу.
От того и не 7 сек.
Аноним 21/01/19 Пнд 15:59:57 133177759
>>1331776
Да ниче он там не кэшировал. Люди же всегда разных людей искали, а не только условного путина или еще кого
Аноним 21/01/19 Пнд 16:08:11 133178060
>>1331777
Видел когда то прожки для состовления фотороботов?
Ну где срез глаз подставляется, причесочка, хуе мое?
Аноним 21/01/19 Пнд 16:17:58 133178861
>>1331780
А причем тут финдфейс? Подбор размера глаз и прочее будет работать только если человек ровно в камеру смотрит и все масштабы известны. Тут другая система - какая - неизвестно, нейросеть сама какие то точки для себя определила, что они значат никто не знает. Ну если покопаться то думаю можно найти, но это всё равно что в чан с говном лезть
Аноним 21/01/19 Пнд 16:31:17 133179662
>>1331788
Эта махия.
Обратный инженегринг в помощь.
Аноним 21/01/19 Пнд 17:44:56 133188063
В итоге файндфейс купила гэбня и теперь они будут пилить цифровой ГУЛАГ специально для вас с распознаванием лиц реалтайм.
Аноним 21/01/19 Пнд 17:55:30 133189264
>>1330859
>1 ядро
считай на GPU, дурачок
Аноним 21/01/19 Пнд 17:56:40 133189465
>>1331880
Так на ЧС нейроночка в реалтайме всех распознавала.
Аноним 22/01/19 Втр 02:03:29 133223966
>>1331445
>Дерево хороший вариант, но его придется перестраивать каждый раз при добавлении новой фотографии.
Вот же идиот. Написал ему открытым текстом ИСПОЛЬЗУЙ FAISS. Нет, опять возят сопли про то, как за o(n) изобрести велосипед.
>>1331680
>А почему бы не хранить не всю инфу об аккаунте а только ключ, и потом по ключу из БД уже брать инфу об аккаунте?
Потому что он очень тупой.
>>1331747
>Т.е. всего тебе нужно 50ГБ ОЗУ для 100кк записей которые состоят из 128ми точек + ключа (айдишника профиля в БД). Скажем средний сервер будет иметь 8гб оперативы итого тебе нужно 50 / 8 = всего лишь 7 серверов.
А дальше можно прикинуть, что 32-битный флоат это немного оверкилл и восьми бит будет достаточно. И получится, что все дерево влезет бытовой ПК с 16 гигами оперативки.
Аноним 22/01/19 Втр 13:46:54 133249467
Файндфейс использовал алгоритм state of the art 2015, сейчас уже есть версия 2018 этого алгоритма
Аноним 28/01/19 Пнд 03:07:25 133651168
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 самых похожих. Хрень полная
Аноним 28/01/19 Пнд 03:09:53 133651269
Вот если бы придумать, как поделить 128 мерное пространство на 100-1000 или хоть сколько-нибудь областей например, то было бы норм. Если с 1д, 2д, 3д это хотя бы визуально представить можно, то что там с 128 делать хуй знает, без четкой формулы это представить всё равно невозможно
Аноним 28/01/19 Пнд 03:39:22 133651570
Тащемта разрабы ФФ сами говорили, что у них на простом монгодб всё работает
Аноним 13/02/19 Срд 00:20:48 134657771
Аноним 13/02/19 Срд 09:28:57 134667772
>>1346577
Я запилил, но сервис не мой, у меня мощности нет чтоб весь вк обрабатывать, а так теоретически мог бы запустить, но качество поиска похуже, надо нейронку обучать по новому, не собираюсь этим заниматься, заебало уже. Тестировал на 10млн фотках, ищет моментально
Аноним 13/02/19 Срд 09:38:35 134667973
>>1346677
>
На чём писал? Предоставишь код на гитхабе?
Аноним 13/02/19 Срд 10:35:33 134670174
>>1346679
Я и так все решения опенсорсные использовал. Бот на питоне, веб на пхп, база mysql, определение лиц dlib, кнн дерево annoy
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Топ тредов
Избранное