人脸识别 - 如何制作具有大量类的图像分类器?

数据挖掘 深度学习 美国有线电视新闻网 计算机视觉 法泰
2022-02-20 03:54:38

我打算制作一个图像分类器来识别英超联赛中每个球员的脸。我有几个问题(直到现在我只使用小型或学术数据集)。

我的问题:

  1. 如何下载这么多不同的图像?由于单独手动下载图片非常困难,有没有办法自动下载?
  2. 我正在关注这个平台,并且需要为每个玩家制作不同的课程。我应该如何为这么多玩家制作不同的课程?

PS:我是新手,如果我的问题含糊不清,我深表歉意。如果需要任何额外的说明,请发表评论。

2个回答

如何下载这么多不同的图像?由于手动下载所有人的图片非常困难,有没有办法自动化它?

首先,您需要了解您的分类器将如何分类,它将分类可变大小的图像还是固定大小的图像?它会只接收一张脸还是多张脸?它会对黑白图像进行分类还是对多个通道进行分类?它将是多输出分类器还是单输出分类器?

在开始之前,您必须回答这个问题和其他问题。根据后面的问题,您必须从不同的来源或以不同的方式获取数据。您可以搜索已经收集和组织并适应数据集的图像的数据集,而不是思考这些问题,Kaggle有很多公共数据集。自己收集训练数据可能是一件繁琐的工作,如果你需要数千个样本,我建议你制作一个数据挖掘应用程序,通过不同的页面爬取并自动下载图像,但你必须小心不要违反任何隐私法。

我正在使用 Fast.ai,我们需要为每个玩家制作不同的课程。我应该如何为这么多玩家制作不同的课程?

现在您拥有干净整洁的所有数据,您必须对图像进行分类。使用深度神经网络对图像进行分类的方法有很多,您可以使用简单的前馈神经网络或递归神经网络,但最常用的也是我推荐的一种是卷积神经网络。如果你没有很多图像分类经验,我建议你从一个更简单的项目开始,比如 MNIST 数据集,它由手写数字的黑白图像组成,这样你就可以练习不同的超参数并进行更好的实验,而不是从如此雄心勃勃的分类任务开始。无论哪种方式,要将图像分类为多个输出,您必须在神经网络中添加最后一层,其中隐藏神经元的数量等于要区分的类别数量,那么您应该向该层添加一个 softmax 激活函数。最后,为了让模型学习,您应该使用分类交叉熵损失/成本函数。

我不知道我是否回答了您的问题,所以请不要犹豫告诉我或提出更多问题。

无论哪种方式,很高兴提供帮助

完成人脸识别的一种方法是使用一次性学习连体网络您只收集了一个您想要识别的面孔示例。然后,您训练两个具有共享参数的 CNN,每个 CNN 能够编码一张图像。然后你将这两种编码输入到可以测量它们之间相似性的东西上,并将其与基本事实(是否是同一个人的照片)进行比较。

图片来自 Andrew Ng 的深度学习课程,您可以在其中实现人脸识别: 连体网

所以你训练网络有时给它两张同一个人的照片,有时给它不同人的照片。

当siamese网络被训练时,它可以用来建立一个所有玩家的编码数据库,当你得到一张新图片时,你会搜索这个数据库,直到找到给你最好的相似度分数的那个。

有许多方法可以以不同的难度和性能水平来实现这一点。这是一个非标准问题,因此它会比常规图像分类更难一些。我会给你一些参考:

即用型解决方案:

pip face_recoginition

文件:

有区别地学习相似度度量并应用于人脸验证

DeepFace:缩小人脸验证与人类水平性能的差距

教程:

在 PyTorch 中使用连体网络一次性学习 - 第 1 部分

在 PyTorch 中使用连体网络一次性学习 - 第 2 部分

使用 Keras 的连体网络一次性学习

BeautifulSoup 网页抓取简介

培训班

Andrew Ng 的 CNN 课程,这里是一个关于连体网络的示例视频