deepinsight / insightface

State-of-the-art 2D and 3D Face Analysis Project
https://insightface.ai
23.58k stars 5.43k forks source link

Face identification in real-time application #1140

Closed pourfard closed 1 year ago

pourfard commented 4 years ago

Hi,

I'm am trying to use face biometrics to identify peoples. I have a few questions:

1- How can we use multiple images of a person to better identification?

2- What is the best threshold for identification. I mean how should I choose a threshold for similarity to get a 95% accuracy. If I set it 0.6 False-Positive rate is high (false person is accepted) and when it is 0.8 False-Negative rate is high (true person is rejected). I know that it depends on application, but after trying different thresholds in different places, with different peoples, cameras, and hardware resource (different frame rated) I still cannot get a fix number for my application which is using face biometrics for access control with a 95% accuracy.

bartolootrit commented 4 years ago

I wouldn't use a face recognition system for biometrics if it works with flat images. Apple "Face ID" and "Windows Hello" use depth cameras.

If there are 512-D feature vectors of several faces, then we may create a cluster for each face. If we get a new feature vector, we may compute a distance to the centers of clusters. If the new feature vector is close enough to one of them, then it belongs to it, otherwise, we create a new cluster or reject the feature vector as unknown. If it's close enough to more than one center - something is wrong - a network trained with ArcFace should discourage such embeddings.

Correct me if I'm wrong.

pourfard commented 4 years ago

I think depth image is mostly used for liveness or spoof detection, if not so, what are the applications of 2d face recognition models such as insight face or facenet?

siddharthshah3030 commented 4 years ago

@pourfard

Would like to know how you chose threshold further and what conclusions you made for real-time application

pourfard commented 4 years ago

It really depends, but for verification I used 0.85 cinsidering distance of two embeddings as the measure meaning if the distance of two embeddings is less than this value I verify them. For identification I used similarity measure and for most of the applications 80% is good enough meaning if two persoms are 80% similar to each other, they are the same.

In some papers for example facenet, the authors have used 1.24 as the threshold. This threshold depends on the verification dataset.

siddharthshah3030 commented 4 years ago

I understand seems I'll need to gather data and measure ideal threshold value for best performance

Thanks for sharing