在过去的几周里,我学到了很多关于神经网络的知识。现在,我期待创建一个可以识别个人人脸的神经网络程序。我尝试在网上搜索,但只能找到一小部分信息。
从头开始实施这样一个程序的步骤是什么?
用于检测个人人脸的神经网络
我假设你对这一切都不熟悉。您可以从进行基本的人脸检测开始。训练程序以非常准确的方式检测人脸。这将帮助您熟悉与图像处理和基本机器学习相关的编码基础。
之后训练你的程序来识别只有 2-3 个人的面孔。一开始就尝试太多不是一个好主意。在不同情况下测试您的程序的准确性,使用不同数量的人群等。
如果它运行良好,那么您可以为更多人训练您的程序。除此之外,还可以从代码经验中学习。有些代码只学习一次,他们一生都在执行同样的事情。这种类型的一个很好的例子是OCR. 如果错误地检测到一张脸,或者您的程序检测到一张它不知道的新脸。然后你应该能够告诉程序并且它应该将它包含在它的数据库中。我认为某种形式的强化学习会有所帮助。虽然不太确定。
现在
我强烈推荐你学习python并熟悉OpenCV的实现。您可以将 OpenCV 视为库的集合。我发现它们对图像处理和机器学习非常有帮助。另一个好处是您可以根据需要在 python、Java 或 C++ 中导入 OpenCV。
OpenCV 有一个内置功能,允许它为正面和负面图像训练神经网络。您的程序的成功很大程度上取决于您对正面和负面图像的选择,因此请明智地选择它们。训练结果存储为haar 级联文件。此级联文件可在您的程序中使用,以使用经过训练的数据并相应地发挥作用。
对于基本的人脸检测,你可以在网上找到级联文件并实现这样的代码
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml');
为了检测个人面孔,您需要进行不同的分类。类的数量将代表您在开始时要检测的单个人脸的数量。你可以在这里
找到 OpenCV 教程。
如果你想实现识别,你只需在很多有人脸的图像上训练一个卷积神经网络或 CNN,然后如果有人脸,则将其分类为 1,如果没有,则将其分类为 0。如果要进行检测,则必须使用不同的方法,例如 CNN 的级联分类器或 YOLO 或 SSD 等对象检测网络。