Avi,尼希米MathWorks
人脸识别是通过将捕捉到的图像中的人脸与数据库中的人脸进行比较,从而在图像或视频中识别人的过程。人脸识别有许多应用,从安全和监视到生物识别,再到访问安全设备。
在这个网络研讨会,探索如何利用计算机视觉和机器学习技术来识别图像和视频的面孔。涉及本次会议的主题包括:
现有MATLAB用户将学习模式分类、数据回归、特征提取、人脸检测和人脸识别的新特性。
的主持人
Avi Nehemiah在MathWorks从事计算机视觉在技术营销中的应用。在加入MathWorks之前,他花了7年时间作为算法开发人员和研究人员,设计用于医院安全和视频监控的计算机视觉算法。他拥有卡内基梅隆大学的MSEE学位。
欢迎到本次网络研讨会上的人脸识别与MATLAB。我的名字是阿维纳什尼希米记,和我在MathWorks公司是计算机视觉的产品营销经理在这里。我对这个研讨会今天三个目标。首先,我想给你的面部识别工作流程步骤的概述。我想向您展示在MATLAB一些新的功能,使脸部识别。我想教你如何解决一些共同的挑战,如大型数据集处理和视频流或流处理进行面部识别。
首先让我们来定义脸部识别只是为了确保我们都在同一页上。给定一个画廊或者你想认识的人,当输入图像呈现,就像我的公司头炮的这一形象的面部图像的数据集,人脸识别算法从库中输入图像中的脸部相匹配的人。
我想指出,面部识别和面部识别是一回事。你们可能会注意到我在整个网络研讨会中都使用了这两个术语。人脸识别在我们的日常生活中有很多应用。它最常用于视频监控,将监控录像中的人的身份与现有数据库进行匹配。它被用作你的笔记本电脑和智能手机的生物识别密码,与指纹识别的使用方式非常相似。最近,它被社交网站用来执行面部识别,自动标记朋友的照片。
我想指出的是,脸部识别就被称为目标识别的面积较大,其中系统能够识别它已被训练来识别不同的对象区别对待的例子。物体识别利用计算机视觉和机器学习技术,并在机器人,在那里它被用来帮助导航已知检查站像充电站应用。在自动驾驶汽车或驾驶员辅助系统,物体识别用于检测行人和交通标志,就像我在我的幻灯片在这里。
在这个研讨会,我将使用面部识别作为例子,但我会告诉你的技术是解决其他物体识别的问题,比如在幻灯片上都非常有用。MATLAB用户已经解决人脸识别问题很多,很多年了。其结果是,我们得到了很多关于这个主题的问题。
我列出幻灯片上的四种最常见的问题,而这些都是什么来执行脸部识别所需的步骤?如何在MATLAB做到这一点?如何处理大数据的大图片收藏?我如何与视频直播执行此?通过此次研讨会的过程中,我会回答所有这些问题给你。
下面就让我们来看看我们今天的议程。我会花我的大部分时间通过面部识别工作流程去。然后我会谈谈如何处理大型数据集,以及如何进行实时人脸识别和视频流。然后我会花一点时间来谈论人脸验证,这是人脸识别的一个子集,并确定两个图像呈现属于同一个人。这应该给我们足够的时间让我回答你的问题。
因此,让我们跳进脸部识别工作流程。你需要创建一个人脸识别系统的第一件事情就是要认识人,也被称为面部画廊面部图像的数据库。然后,执行一个处理步骤,称为特征提取,存储关于在一个紧凑的特征向量中的每个面的辨别信息。
在此之后,你有学习或当机器学习算法来适应在画廊的面的外观的模型建模步骤,让你可以在不同的人在数据库中的面孔区分。该阶段的输出是一个分类器,将用于识别输入图像的模型。
当您有一个输入查询图像时,将使用一个人脸检测算法来查找该图像中人脸的位置。然后裁剪、调整大小并使其标准化,以匹配训练脸部图库中使用的图像的大小和姿态。然后形成与人脸库相同的特征提取步骤,并通过分类器或模型运行该步骤。输出是一个标签或一个指示器,用来表示来自数据库、图库和查询图像的那个人属于哪个。
我将开始与特征提取步骤,因为这是新来了很多谁感兴趣的人脸识别人,但没有使用过计算机视觉,或机器学习在过去的技术。有一个问题我被问了很多问题,这是一个我问自己,当我在人脸识别第一的工作,如果是在特征提取步骤是甚至是必要的?
为了说明这一点,我使用简单的图像差异度量和不进行特征提取的方法,尝试识别左边的人,得到了识别结果。如你所见,他和右边的人不匹配。这是因为原始像素信息没有足够的鉴别信息来区分这两张脸。下图显示了正确的识别结果。现在,我要承认这些图像来自AT&T的数据库,这是一个测试人脸识别算法的标准数据库。
那么,什么是特征提取?特征提取是维数降低的表示的图像的在一个紧凑的特征向量的辨别或感兴趣的部分的方法。现在,MATLAB具有您可以使用许多识别任务,因为我已经在这张幻灯片上所示的特征向量的广泛。最密集的特点是明显的图像像素本身。
在它的左边,有一个名为梯度方向或HOG特征的直方图特征类型。现在,这代表一个对象的结构。如果你把在该图像仔细一看,你可以看到,你能辨别自行车的结构,但现在你有一个表示这是不变的照明和图像的图像像素。在它的左边,你有SURF功能,这是局部特征提取的一种形式,在有关围绕这些有趣点的区域中的图像和编码信息发现许多有趣的点。
而到了最左边,你有稀疏的介绍,也被称为视觉词袋,那里的自行车已被表示为视觉部分的总和。所以,一个特点是车把。另一个特征是在车轮和座位。这种方法的最大优点是,如果自行车的一部分,甚至是隐藏的,你仍然可以找到自行车或看到一个或两个其他视觉部分是可见的认识自行车。
因此,随着中说,让我们跳进MATLAB,并开始解决一些人脸识别问题。我通过将面部图像的人我想认识到MATLAB数据库会启动。在这个例子中,我将使用AT&T人脸数据库,我在我的上一张幻灯片引用。我这里有保存在该文件夹人脸数据库ATT数据库。和我有过40名为S1的数据库上的每个主题独立的子目录。
每个子目录有每个人的10个图像。现在我要用到的把这些数据引入MATLAB的结构叫做图像集它被用来管理大量的图像。它不仅将数据带入MATLAB。它维护了图像之间的层次关系,所以我有40个图像集,一个对应于数据库中的每个人。
现在,我有这个在MATLAB,我可以访问数据库中的单个图像,我可以同时图像也访问组,这样的蒙太奇同一个人在数据库中的所有图像。现在,有一两件事我想指出的是AT&T人脸数据库是一个相当干净的数据库。已侦测到的脸部。照明是恒定的。唯一的变化是在姿势和表情的细微变化。
在面部识别圈,这被普遍认为是一个非常简单的数据库处理。现在,对于那些你们谁没有在使用了一段时间MATLAB,或从未使用MATLAB,我想指出的MATLAB的优势,这正是在这些地方的几行代码,我已经能够一个带来一个完整的数据库,MATLAB,我已经能够想象我的数据库的部分。
因此,让我们建立我们要在这个例子中要解决的问题。因此,在这个例子中,我们要尝试和认识左边的人,匹配他有人在40人的数据库,我在右边的蒙太奇。现在,提取特征并学习如何给这些人之间说之前,我要我的数据库分成训练集,以了解如何在面孔,测试集区分,这样我就可以对测试我的算法。
我要用80-20分割来绘制数据库。这就引出了特征提取。要了解MATLAB中有哪些特征提取方法,我要做的是浏览产品文档,然后搜索特征提取。
这将列出MATLAB中所有的特征提取方法以及与特征提取相关的内容。如果我点击这里的第一个结果,它会向我展示所有由计算机视觉系统工具箱提供的特征提取方法,我用它们来从图像中提取特征,就像我们这里的这些。
当我向下滚动的时候,让我打开这个例子。现在,这个例子向我展示了所有的步骤和大量的文本解释了发生了什么,以及如何识别图像中的数字。所以这是一个非常类似于我们试图识别人脸的问题,所使用的特征被称为HOG特征。
现在,HOG代表方向梯度直方图,在这里,这个函数提取HOG特征提取HOG从训练图像的特征。因此,让我们可视化。现在,HOG特征,如果你看一下在底部的可视化,它们所编码的边缘信息和边缘信息的方向性,所以他们是获取有关对象的结构信息,脸部的真的很好,在这种情况下,。
现在,我要做的下一件事是我可以提取HOG所有在我的训练集图像的功能。现在,这样做了,让我告诉你已创建了两个变量。首先是这个矩阵的训练功能,而如果我在工作区看,是一个巨大的320 4,680矩阵。现在,320个对应于我的训练集图像的数量。所以,我有每一个40人的八张图像。4680是对于每个图像由HOG中提取的特征向量的大小的特征。
现在,320通常被认为是这个问题的观测值。4680被称为问题的维数。我还有一个叫做训练标签的列表,它基本上只告诉我哪些特性对应于数据库中的哪些人。
现在我已经从面部数据库中提取了有区别的边缘信息,为了真正测试特征提取的效果如何,我需要使用机器学习技术来了解每个人的脸长什么样,以及如何区分他们。现在,这涉及到我们工作流程的下一步。这就是建模的训练。
现在,造型为目标识别和分类问题一步的训练解决了数据拟合的问题。因此,假如我们有红点,蓝点简单的数据集,而这些点被称为训练数据或训练的功能,就像我们刚才解压的那些,如果我适合使用机器学习算法模型,我结束了一个这里决策边界的红点和蓝点之间进行区分。
现在,这个决策边界被称为分类器,我可以通过判断它位于决策边界的哪一边来对后续的点进行分类或识别,不管它是红点还是蓝点。MATLAB有各种各样的机器学习技术,但是有一件事我们已经做了,为了让发现新技术变得容易,也为了在不同的机器学习技术之间交换,我们创建了一个恒定的界面来使用所有这些不同的技术。
现在,界面是这样的。因此,要创建一组数据的模型,您将使用文本fit,后面跟着字母[?这取决于你使用的是分类模型还是回归模型。然后在后面加上模型本身的名称。它可以是k-NN或SVM,这是不同的机器学习技术。
它有两个输入,x是训练特性,y是将特性映射到数据库中的类的标签。所以分类器来创建一个阶段,我将使用这行代码,这是阶段分类器,这是适合为分类,其次是C和ECOC,这是我用的方法,我要喂它在我的培训特点及标签,我生成了猪的特性。
现在,使用该模型,您使用的预测方法。所以,你叫预测。您通过模型,你从训练数据训练,和你输入的功能。而输出是一个标签。因此,在这种情况下,我将通过阶段分类和查询功能中,输出是一个标签,上面写着迪马,这是一个人在我的数据库之一的名称。
让我们回到MATLAB。现在,为了学习如何区分不同的面孔,我将使用ECOC分类器。要了解更多这方面的知识,我可以右键点击它,并在选择上寻求帮助。MATLAB给了我如何使用这个函数的文档,并告诉了我更多关于它的信息。它也有我如何使用这个函数的例子,这使得在MATLAB中使用新方法非常容易,因为它有很好的文档。
所以我要通过我的训练特点和我的训练标签。我要学习如何在我的数据库中的40人区别对待。因此,让我运行。而当训练做了,我要测试我的分类,看看它是否工作。所以我有这个人在左边左侧的查询图像,和我有比赛类,在这种情况下,正确地匹配他右边的合适人选。
现在,只是为了让我们的算法是否正常工作的更好的感觉,让我们试从测试集的图像数据库中的第一个五人看到这是如何工作好。因此,让我只运行。你可以在这里看到的输出显示我的查询相左边的测试集,并在右边的匹配类。因此,它的第一人准确地匹配。
哦,还有第二个人,你看到一个图像已被精确匹配,但第二次测试图像,还有的地方这位女士已经在这里匹配的这位先生有轻微不匹配。让我们看看其他3人。所以这位先生已经正确匹配,这其中也是如此。所以有这一个。
因此,如果10倍的图像,我们已经通过,9人被正确识别,和一个已经认识到错误。因此,我们在大约90%的准确运行。如果你做这种分类或与此学习技术测试整个数据库,它为您提供了约91%的准确率,这是什么,我们只是一个小的测试一套10张的看到。
现在我们已经在这里创建了一个简单的识别系统,使用HOG特性,在一个简单的数据库中有大约90%的准确率,让我们在一个稍微有挑战性的数据库中尝试一下。我把这里的脚本打开。现在,我们的脸部图库是一组我在MathWorks收集的人们的照片。这是我们的计算机视觉开发团队,我在第二排。
还有一两件事,我想为你在看这些图片要指出的是有一个在面部的姿势变化相当数量。其中一些图片实际上已经花费数年时间分开。另外,照明是非常,在这些图像的非常不同。现在,让我提取我的HOG从我的训练数据集功能。
让我再创建一个合适的ECOC分类。现在,让我来测试它针对一个独立的测试集,我收集的原班人马。让我们展开。现在,你可以在左边的列中看到的五个输入图像对于更复杂的数据库,只有他们两个人,第二个和第三个被匹配到正确的人,迪马,在那里,和其他三被错误归类,再次为迪马。所以,同样简单的技术,给我90%的准确率相当容易的数据库,如AT&T的数据库,一旦我移动到更复杂的数据库,准确度已经从90%下降到40%。
现在,有几件事情我们可以做,以提高我们系统的识别性能。但在此之前,我到的是,让我们退后一步,回顾一下到目前为止我们已取得的经验教训。于是又回到了我们的面部识别的工作流程,我们买了我们的脸的数据集,我们要认识到MATLAB,您使用了用于管理图像的大集合的图像集合构建。然后,我们使用面向梯度的直方图进行特征提取,或HOG特征。我们学到的判别信息和模型,使用fitceCOC分类,然后我们测试对我们的测试组分类,看看它是如何很好地进行。
所以我们学习了特征提取来寻找不受外观和光照变化影响的表示法。我想指出的是,我在今年早些时候创建了一个名为“计算机视觉”的网络研讨会,该研讨会对一些不同的特征提取技术进行了深入研究。我建议你去看看。我们还使用机器学习来创建一个模型来区分不同的面孔。还有一个很好的网络研讨会是由一个数学同事创建的,叫做MATLAB机器学习,它更深入地研究了这些不同的机器学习技术。我想承认,我使用的图像来自AT&T的面部数据库,我在下面的链接中找到了它。
这就引出了下一个问题,在这个问题中,我们想要提高这个新数据库的准确性这个数据库是我和计算机视觉开发团队在MathWorks中得到的。现在,在这个数据库中,光照的变化是相当大的,很多图片都是几年前拍摄的。所以脸看起来很不一样。
让我们回到MATLAB,试着做一下。所以现在,让我们试着提高我们的识别系统的准确性,从我们刚刚得到的可怜的40%。所以我要打开我写在这里的不同的脚本。让我清除所有旧的变量,打开图像。让我再读一遍并展示我的图库。并读取一个查询图像。
您将看到,在这张图像中,检测脸部和裁剪它的预处理步骤还没有完成。我想指出的另一件事是这张照片的光照很差,而且我看起来和我自己在脸部画廊里的照片很不一样。所以我们在外观和照明方面有很大的变化。
为了检测人脸,我将使用一种叫做级联物体探测器的东西,它带有几个预先训练好的探测器,包括一个用来检测人脸的。你也可以训练这个探测器来探测任何感兴趣的物体,使用计算机视觉系统工具箱附带的应用程序。一旦我运行这个和定位的脸,我可以裁剪出来,并使用IM裁剪和IM大小调整功能正常化的脸。现在我有了一个我自己的面部图像它的大小和我脸部图库中的所有图像一样。
现在让我为这张我自己的脸提取特征。我使用不同特征类型的组合来创建所谓的面部向量。我稍后会提供一些参考资料。现在,我想指出的一件事是这个查询面部向量的维数——让我们看看工作空间——比我之前使用的HOG特征的维数要高得多,HOG特征的维数在4到10000之间。这个特征的维数是66,000。
现在,我有一个预先训练好的人脸分类器。让我运行一下,看看它识别我的脸有多好。正如你所看到的,它保护了我正确的身份。这是在我的外表和测试图像的照明有很大变化的情况下。
现在,让我们来运行该法对相同的测试图像,我们跑了简单的系统对更高的维度。一旦这样做了,你会看到我们有一个显着改进的精度。所以,现在,该系统一直能够正确地认识自己的两个查询图像和迪马的第二排和第三排的图像已被正确识别为好。因此,我们已经从我们的40%的准确度了,使用HOG的低维特征准确率为80%,其中五个测试四个图像已被正确识别。
现在,这个形象[?郑?]还没有被正确识别。还有的几件事情我们可以做从80%进一步提高识别效果,我们在这里。除了尝试不同的特征提取方法,你可以尝试不同的机器学习算法。但是,对于这样的问题,最常见的修复之一是使用更多的训练数据。在三到五年的图像,我对每个人是不充分认识到人们提供了大量的变化,特别是随着时间的推移,当人们外观的变化。因此,让我告诉你这个巧妙的方法产生大量的MATLAB中的训练数据。
现在,我在做什么这里是我修改的一个例子附带计算机视觉系统工具箱检测和跟踪脸部由上[跟踪标记点?郑的?]脸在那里。和修改我的文件夹中取得存储这些图像,以便然后我就可以用作为训练图像。
所以,如果我打开这个文件夹在这儿,我保存的训练数据,你会看到[?郑?]自己,我已经约了近1000个训练图像生成。我已经做了我自己和迪马相同。所以,我已经约1000个图像对我们每个人的产生。因此,我们有关于三人3000个训练图像,这是达from--我认为我们有三个自己的,三[呢?郑?]五迪马的,这是在训练图像的数量大幅增加。
现在,让我们转到下一个主题,即处理大数据集。对于商业人脸识别系统,通常每个人都有数千张训练图像,数据库中也有数千人。但是在讨论如何处理大型数据集之前,让我们回顾一下到目前为止所做的工作。
因此,要提高识别的准确率,我们所做的是我们用更高的维度特征提取。我使用的是由以下引用的论文的启发,虽然我们也做了一些细微的变化,而我们使用的方法?子?]设有代替[?筛选?]功能。我们还推测,使用更多的训练数据将提高识别。
所以到目前为止,我们已经讨论了整个面部识别工作流程。我们已经讨论了前处理步骤,其正在在输入帧,检测面部,并对其进行注册或正火它。我们已经谈到训练阶段,这是晕晕的脸库,进行特征提取,并以某种方式建模的面孔,你可以在一个分类的形式,它们之间区别,最后,这是识别阶段,这需要一个特征从输入图像,使其通过分类器,并返回所述人的标签。
现在,我们的下一个主题是处理大数据集。现在,这里的挑战是,即使我想训练一个分类器使用成千上万的图像,如果我的特征提取方法需要5秒钟来处理每张脸,而我有3000张图像,它会花费我超过4个小时来处理这些数据。
MATLAB有几种处理类似问题的方法。并行计算工具箱提供显式多线程,以帮助您最大限度地利用您的多核处理器。它还为许多功能和领域提供GPU加速,例如通过图像处理工具箱进行图像处理。
MATLAB分布式计算服务器将相同的功能扩展到集群中的更多核心,而不需要对算法代码做任何更改。现在让我们进入MATLAB看看如何解决这个问题。现在,让我打开我写在这里的脚本来帮助讨论如何在MATLAB中处理大数据集。该脚本所做的就是运行240张训练图像,并执行一些密集的特征提取,每个图像大约需要5到7秒。
因此,所有的一切,这240幅图像花了大约20到25分钟,我的笔记本电脑处理。现在,如果我要速度了,我可以简单地改变本作的PARFOR。这马上让我用我的笔记本电脑额外的核心来处理此。这给了我一个1.5×2或2倍速,但仍然是不够的。
要真正地将此提升到下一个级别,我希望在集群或我在网络上设置的服务器上运行此处理。现在,让我把您的注意力放在这行代码上,这样您就可以看到我的所有数据都存储在网络的一个共享位置上。所以我改变了网络上所有共享位置的路径。我要做的下一个步骤是将这个处理卸载到一个集群中。
因此,要做到这一点,我会去到首页标签,在我的工具条。我打算去并行选项,然后选择我已经设置了集群之一。现在,接下来要做的是使用批处理命令来批量处理这个脚本的大型数据集的特征向量,你看。所以,当我按下回车键,这将这项工作卸载到,我只是指出集群。
一旦这项工作已经被卸载,有一件事你会发现我的MATLAB会话已经释放了,所以我可以做其他的东西,而这个工作正在处理中。我可以检查作业的状态,只需键入出来的工号。你可以看到,作业仍在运行。
让我们来看看再次证明,看看它的完成。它看起来像它的完成。让我们看看如何长时间,走上过程。所以你去。于是花了大约一分钟41秒的过程,花了我的本地机器上20至25分钟的工作。所以这是一个巨大的速度,以处理这一点,当我不得不做的是点在我的网络上的集群,把我的数据在共享位置,并在集群上运行它,我能得到这个巨大的速度起来。
这是我们在MATLAB中使用的一个工具,你可以把处理任务转移到一个集群中,只需要对你的算法代码几乎不做任何修改,这使得它很容易使用。现在,让我们回到ppt来回顾一下我们在演示中看到的东西。我们从这个演示中学到了什么?
第一,您可以使用并行计算来加速您自己机器上的工作流。您还可以使用我们的分布式计算工具将处理工作转移到一个集群中,从而进一步加速,只需对您的算法代码进行很少的更改。我还想指出的是,在2014B版本中,MATLAB支持其他大数据功能,包括Hadoop文件系统和map生成框架。万博1manbetx
请点击这个链接了解更多信息。这就引出了我们的下一个话题。这就是如何在视频流或流处理中进行实时人脸识别。现在,这里的挑战是这些算法的识别部分或特征提取和分类步骤通常需要更长的时间来执行帧间周期,通常是30毫秒。这可能会在处理下一帧时造成很大的延迟,或者如果你开始丢弃中间的帧,就会造成数据丢失。
你可以从这一系列的图像中看到,在三秒钟内,这是一些识别算法的正常执行时间,很多事情会发生。脸可以改变大小,因为它们出现在图像中。第二个主题可能会出现。在执行识别算法时,三秒钟内可以发生很多事情。现在让我们进入MATLAB看看如何在MATLAB中解决这个问题。
所以,我要运行脚本,我这里有,这是再次,人脸检测的修改和跟踪的例子,我用来生成训练向量。所以,我有我的脸画廊在这里。我有我的输入视频在这里。所以,我已经检测到面部,并将其传递给在并行处理的识别算法。所以你可以看到它的处理在屏幕的左上方的角落,但继续得到视频的下一帧,并跟踪通过跟踪这些标志点用在脸上。
然后识别算法完成。如果你看视频的左上方的角落,它显示从哪个是我的名字在那里,[分类输出标签?AVI,?]在左上角屏幕的角落。所以,你可以在这里看到,我可以不顾我的识别算法需要几秒钟没有任何延迟,通过并行运行识别过程的事实来处理视频流。
现在,让我向你们展示我在MATLAB中用来实现这个的结构。现在,我做的第一件事是我使用了parfeval结构来并行运行这个函数识别人脸。我们打开parfeval,或者帮助parfeval我们在健康浏览器中打开它,看看它能做什么。
基本上,parfeval所做的就是让我们在并行工作或并行执行流上异步地执行一个函数。所以我要做的就是用这个parfeval来运行这个函数,在并行的执行流中识别人脸。然后我检查它是否完成了,当它完成的时候,我只要抓取人脸的标签,分类算法的输出,然后打印在屏幕的左上角。
让我们再次运行该脚本只是看到整个过程。所以,我有我的脸画廊在这里。这是我的视频流,并传递到人脸识别算法的图像。正如你所看到的,流继续处理每秒约30帧,并识别并行运行。而当这样做,它输出在屏幕的左上角角分类的标签。
因此,让我们收的说出来,总结回在PowerPoint中。所以在这里,我们使用parfeval并行异步执行耗时的识别任务。我们还使用对象跟踪只是为了保持面部在当前帧的位置。现在,这个对象跟踪的例子船舶与计算机视觉系统工具箱,可以在MATLAB帮助找到它。
这就引出了我们最后一个话题,那就是面部验证。人脸验证与标准人脸识别略有不同。人脸验证试图确定两个查询图像是否属于同一个人。它经常用于安全应用程序,比如生物识别密码。这个工作流程和我们目前学过的很多东西都非常相似,只是做了一点小小的修改。
因此,给定两幅图像,仍然执行特征提取步骤。在执行特征提取步骤之后,您可以对两个特征向量进行比较,或者查看这两个特征向量之间的差异。然后运行到分类器或模型。但是这个分类器或模型只是两个分类器,它们被训练来观察一组特征向量之间的差异,并决定这两个图像是相同的,还是不同的。
所以这个分类器的输出是+ 1,如果图像是相同的,如果图像不是。让我们进入MATLAB看看如何实现人脸验证,使用很多我们已经学过的工具。因此,让我们快速浏览一下人脸验证工作流中的步骤。
因此,让我开,我这里写的脚本。让我在我的数据加载,使用图像集,让我们展示它来谈谈这个问题。所以,我有三个图像在这里,我想比较这些相互的图像,以确定哪些图像属于同一个人,在这种情况下,将[?维特克在右边的两个图像?]。
所以,我希望有一个加1的结果,当我比较这两个图像。我想有一个负减1分的结果时,我比较休息。我将要做的下一件事就是我会做同样的面部矢量特征提取,我们确实和很多我们之前的例子。因此,让我跑的一段代码。
而当这样做了,让我们来看看在此处产生的[听不清]面部载体。所以,让我们对我们的工作区,并打开了。你会看到我有三个面部载体66,000三维面部载体,一个用于这些图像的每一个。现在,我要在本节接下来要做的事情就是在这里,我要带面部矢量和编码之间平方的差,所以所有这些对图像。
对于这三对,我只要把它们相减然后取平方。然后我将通过一个预先训练过的模型。我使用了一种不同的机器学习算法。我用过支持向量机。万博1manbetx我实际上用了[?适合?][?支持向量机函数来创建这个分类器。
所以,当我通过在每对面部向量之间的差异,它给我的标签加1,如果两个图像是来自同一人,负,如果他们从不同的人是。因此,让我们运行。正如你所看到的,该算法已经做了很好的工作。因此,对前两排的两个图像不匹配,因为他们从不同的人是。而对于最后一排的人,他们不匹配。所以我有一个加1分的结果,他说这些图像相匹配。
而这仅仅是对什么人脸验证是一个快速传情。你跟很多相同的步骤,你从脸部识别工作流程做到这一点,我们花了这么多时间来谈论,除了分类,你真的培训学习这些面部向量之间的差异,并决定他们来自同一个人或很不同的人。因此,而不是有40级分类像我们做了AT&T的数据库,我们对人脸验证一二级分类。
现在,只要给我们带来了我们的示威结束。现在我走之前,让我告诉你结束这次研讨会之前,一个快速的事。那么,你看是MATLAB文件交换。而这正是很多MATLAB用户共享自己的代码,并分享他们的想法,让我寻找人脸识别的地方。
你会看到有大约100个提交的不同的人脸识别算法和源代码,你可以尝试,我们的用户已经提交了关于人脸识别。这是一个学习主题的好方法去MATLAB中心,看看MATLAB社区已经在这个领域做了什么。你可以看到,在人脸识别领域,他们已经做了很多工作。所以有很多源代码可以利用。
综上所述,为什么要用MATLAB进行人脸识别呢?如果我们让访问和可视化数据变得非常容易。MATLAB有大量的方法和算法用于特征提取和机器学习,您可以利用这些方法和算法,而不需要自己编写。MATLAB有一些很好的结构来处理大数据,方法是将计算任务转移到集群中。我们还有一些很棒的、易于使用的并行执行结构,比如parfor和parfeval,我们在几个不同的示例中看到过。
当然,在MATLAB社区,有很多人脸识别工作流程的例子,在MATLAB中心,你可以查看,你可以尝试MATLAB用户提交的一些代码。现在,这里有一些行动的呼吁。让我们在MathWorks知道你正在解决什么对象识别问题,以及你想解决什么问题,这样我们就可以帮助你解决这个问题。
在MATLAB中尝试一些新的计算机视觉和机器学习功能。如果你还有其他问题,请发邮件至image-processing@mathworks.com。请参考这个网络研讨会,这样我就知道你的问题是从哪里来的。感谢您收看本次网络研讨会。
记录:2014年11月13日