Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cluster analysis 如何在多个嵌入标识上使用FaceNet和DBSCAN?_Cluster Analysis_Cluster Computing_Dbscan_Facenet - Fatal编程技术网

Cluster analysis 如何在多个嵌入标识上使用FaceNet和DBSCAN?

Cluster analysis 如何在多个嵌入标识上使用FaceNet和DBSCAN?,cluster-analysis,cluster-computing,dbscan,facenet,Cluster Analysis,Cluster Computing,Dbscan,Facenet,我有以下设置: 监控系统拍摄人们的面部照片(每个人的照片数量不同) 我为每张照片运行FaceNet,并获得每个人的嵌入向量列表(每个人由嵌入列表表示,而不是由单个嵌入列表表示) 问题是: 我想使用DBSCAN对观察到的人进行聚类,但我需要保证来自同一个人的人脸嵌入到同一个聚类(记住,我们可以有同一个人的多张照片,我们已经知道他们必须属于同一个聚类) 一个解决方案是为每个人获得一个“平均”或平均嵌入,但我相信这种数据丢失会产生不好的结果 另一种解决方案可能是在单个向量中连接N个嵌入(带有N个常量)

我有以下设置:

  • 监控系统拍摄人们的面部照片(每个人的照片数量不同)
  • 我为每张照片运行FaceNet,并获得每个人的嵌入向量列表(每个人由嵌入列表表示,而不是由单个嵌入列表表示)
  • 问题是:

    我想使用DBSCAN对观察到的人进行聚类,但我需要保证来自同一个人的人脸嵌入到同一个聚类(记住,我们可以有同一个人的多张照片,我们已经知道他们必须属于同一个聚类)

    一个解决方案是为每个人获得一个“平均”或平均嵌入,但我相信这种数据丢失会产生不好的结果

    另一种解决方案可能是在单个向量中连接N个嵌入(带有N个常量),并将该512xN向量传递给DBSCAN,但问题是嵌入附加到该向量的顺序将产生不同的结果


    有人面临过同样的问题吗?

    deepface包装了facenet人脸识别模型。常规人脸识别过程如下所示

    #!pip install deepface
    from deepface import DeepFace
    
    my_set = [
       ["img1.jpg", "img2.jpg"],
       ["img1.jpg", "img3.jpg"],
    ]
    obj = DeepFace.verify(my_set, model_name = 'Facenet')
    
    for i in obj:
       print(i["distance"])
    
    如果需要facenet生成的嵌入,也可以采用deepface

    from deepface.commons import functions
    from deepface.basemodels import Facenet
    
    model = Facenet.loadModel() 
    
    #this detects and aligns faces. Facenet expects 160x160x3 shaped inputs.
    img1 = functions.preprocess_face("img1.jpg", target_size = (160, 160))
    img2 = functions.preprocess_face("img2.jpg", target_size = (160, 160))
    
    #this finds embeddings for images
    img1_embedding = model.predict(img1)
    img2_embedding = model.predict(img2)
    
    对于Facenet,嵌入将是128维向量。您可以运行任何聚类算法来嵌入。我已经将k-means应用于这类研究。我对dbscan没有任何经验,但如果您有嵌入,您可以应用它


    此外,您可以在deepface中采用不同的人脸识别模型,如vgg人脸、openface、facebook deepface、deepid和dlib。

    deepface包装了facenet人脸识别模型。常规人脸识别过程如下所示

    #!pip install deepface
    from deepface import DeepFace
    
    my_set = [
       ["img1.jpg", "img2.jpg"],
       ["img1.jpg", "img3.jpg"],
    ]
    obj = DeepFace.verify(my_set, model_name = 'Facenet')
    
    for i in obj:
       print(i["distance"])
    
    如果需要facenet生成的嵌入,也可以采用deepface

    from deepface.commons import functions
    from deepface.basemodels import Facenet
    
    model = Facenet.loadModel() 
    
    #this detects and aligns faces. Facenet expects 160x160x3 shaped inputs.
    img1 = functions.preprocess_face("img1.jpg", target_size = (160, 160))
    img2 = functions.preprocess_face("img2.jpg", target_size = (160, 160))
    
    #this finds embeddings for images
    img1_embedding = model.predict(img1)
    img2_embedding = model.predict(img2)
    
    对于Facenet,嵌入将是128维向量。您可以运行任何聚类算法来嵌入。我已经将k-means应用于这类研究。我对dbscan没有任何经验,但如果您有嵌入,您可以应用它

    此外,您可以在deepface中采用不同的人脸识别模型,如vgg人脸、openface、facebook deepface、deepid和dlib