3 ms·
How are you doing tens of millions of faces per second per core, first of all assuming a 5ghz processor, that gives you 500 cycles per image if you do ten milli
by zipy124 1y ago
How are you doing tens of millions of faces per second per core, first of all assuming a 5ghz processor, that gives you 500 cycles per image if you do ten million a second, that's not nearly enough to do anything image related. Second of all L1 cache is at most in the hundreds of kilobytes, so the faces aren't in L1 but must be retrieved from elsewhere...??
- Keyframe 1y agoYou can't look at it like _that_. Biometrics has its own "things". I don't know what OP is actually doing, but it's probably not classical image processing. Most probably facial features are going through some "form of LGBPHS binarized and encoded which is then fed into an adaptive bloom filter based transform"[0]. Paper quotes 76,800 bits per template (less compressed) and with 64-bit words it's what, 1200 64-bit bitwise ops. at 4.5 Ghz it's 4.5b ops per second / 1200 ops per per comparison which is ~3.75 million recognitions per second. Give or take some overhead, it's definitely possible. [0] https://www.christoph-busch.de/files/Gomez-FaceBloomFilter-ICPR-2014.pdf https://www.christoph-busch.de/files/Gomez-FaceBloomFilter-I... Cache locality is a thing. Like in raytracing and the old confucian adage that says "Primary rays cache, secondary trash".
- reactordev 1y agoCorrect, it’s probably distance of a vector or something like that after the bloom. Take the facial points as a vec<T> as you only have a little over a dozen and it’s going to fit nicely in L1.
- bsenftner 1y agoNDA prevents me from saying anything beyond the compares are minimal representatives of a face template, and those stream through the core's caches.
- reactordev 1y agoQueue the “If I were to build it…” ;)
- bsenftner 1y agoA public report from the employer about the tech https://cyberextruder.com/wp-content/uploads/2022/06/Accuracy_vs_SystemPerformance_Whitepaper.pdf https://cyberextruder.com/wp-content/uploads/2022/06/Accurac... (I no longer work there.)
- dudeofea 1y agoI don't know the application, but just guessing that you don't need to compare an entire full-resolution camera image, but perhaps some smaller representation like an embedding space or pieces of the image
- ekidd 1y agoBack in the old days of "Eigenfaces", you could project faces into 12- or 13-dimensional space using SVD and do k-nearest-neighbor. This fit into cache even back in the 90s, at least if your faces were pre-cropped to (say) 100x100 pixels.
- bob1029 1y ago> assuming a 5ghz processor, that gives you 500 cycles per image if you do ten million a second Modern CPUs don't quite work this way. Many instructions can be retired per clock cycle. > Second of all L1 cache is at most in the hundreds of kilobytes, so the faces aren't in L1 but must be retrieved from elsewhere...?? Yea, from L2 cache. It's caches all the way down. That's how we make it go really fast. The prefetcher can make this look like magic if the access patterns are predictable (linear).
- whizzter 1y agoThe keyword is CAN, there can also be huge penalties (random main-memory accesses are over a cycles typically), the parent was probably considering a regular image transform/comparison and 20 pixels per cycle even for low resolution 100x100 images is way above what we do today. As others have mentioned, they're probably doing some kind of embedding like search primarily and then 500 cycles per face makes more sense, but it's not a full comparison.