Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Python 128维向量分类的最佳选择是什么。支持向量机还是随机森林?_Python_Svm_Random Forest - Fatal编程技术网

Python 128维向量分类的最佳选择是什么。支持向量机还是随机森林?

Python 128维向量分类的最佳选择是什么。支持向量机还是随机森林?,python,svm,random-forest,Python,Svm,Random Forest,背景资料: 我目前正在开发一款面部识别软件,该软件使用以下功能: -蟒蛇 -OpenVino人脸识别模型。 -优化了DLIB的人脸识别模型。 我目前有一张人脸照片,每个人都有相应的标签,总人数约为6000人 问题是: 在将一个人的面部图像传递给DLIB的神经网络后,输出结果将作为128维向量(64个值)显示。第一步是存储已知图片的矢量,每个人有一个矢量(总共6000个)。下一步是捕捉网络摄像头流上的人脸,并确定这张照片是否属于某个已知的人。这样做的方法是将存储的向量与捕获的向量进行比较。最合理的

背景资料: 我目前正在开发一款面部识别软件,该软件使用以下功能: -蟒蛇 -OpenVino人脸识别模型。 -优化了DLIB的人脸识别模型。 我目前有一张人脸照片,每个人都有相应的标签,总人数约为6000人

问题是: 在将一个人的面部图像传递给DLIB的神经网络后,输出结果将作为128维向量(64个值)显示。第一步是存储已知图片的矢量,每个人有一个矢量(总共6000个)。下一步是捕捉网络摄像头流上的人脸,并确定这张照片是否属于某个已知的人。这样做的方法是将存储的向量与捕获的向量进行比较。最合理的方法是使用某种分类器;现在我只是使用欧几里德距离,但我没有得到好的结果。对于我拥有的数据量和我已经解决的问题,在这种情况下,您能推荐一个好的分类器吗。最好使用SVM吗?还是随机森林?。再次提到这一点很重要,我没有很多每个人的照片,我只有一张

谢谢,
如果您有任何问题,请随时提问。

考虑到您的数据限制,训练分类器(SVM或随机森林)可能不是最好的方法,因为任何机器学习模型都需要查看一个类的多个实例来学习可以推广的内容。虽然训练6000类SVM分类器将是一个巨大的挑战,但Random Forest可能很容易找到一个技巧,通过生成特定的树对训练数据中的每个样本进行准确分类,但在测试期间可能根本无法执行

我建议你更多地使用一些距离度量——可能会尝试在较低的维度中绘制点,也可能会在进行分类时寻找信息更丰富的维度。决策树有时也用于特征选择,基于此,您可能可以选择一些维度,然后使用欧几里得距离度量


很抱歉给出了一个非常主观的答案。虽然我不能确切地说什么可以解决您的问题,但我可以肯定地说,培训上述任何分类器对于识别任务都是一个好主意。我希望这至少能回答你的选择问题

基于深度学习的方法是当今最先进的研究。使用SVM或随机林无法达到该级别

Dlib在后台使用ResNet模型。我建议您切换人脸识别模式。VGG Face和Google FaceNet是最健壮的。OpenFace、Facebook DeepFace和DeepID是其他的选择。它们都是由科技巨头和顶尖大学开发的

python包封装了所有这些模型

#!pip install deepface
from deepface import DeepFace
models = ["VGG-Face", "Facenet", "OpenFace", "DeepFace", "DeepID", "Dlib"]
obj = DeepFace.verify("img1.jpg", "img2.jpg", model_name = models[0])
print(obj["verified"])
这将验证img1和img2是同一个人还是不同的人。如果更改model\u name变量,则可以切换人脸识别模型


人脸验证需要一张照片作为身份证明。这就是为什么,这也满足了您的要求。

非常感谢,这非常有帮助。我确实查阅了许多不同的网站,但没有得到与这个具体案例类似的结果。我正在考虑在同一张图片上训练分类器模型,但是使用不同的设置,例如添加模糊、旋转图像等。也许这会帮助我获得更好的结果。嘿,很高兴你发现它很有用。在写这个答案的时候,我也想到了这一点,但我不太确定这是否会有很大帮助。OpenVino的face模块已经经过训练,能够真正适应这种变化,我认为对于不同的变化,你将得到的128维向量将非常相似。但尝试并没有什么坏处。:)向量值是数值(浮动)还是类别?如果向量值是分类的,欧几里德距离就没有任何意义。“0”和“1”之间的距离将与“1”和“3333”之间的距离相同。感谢您的评论,该向量由浮点组成,浮点64