type
status
date
slug
summary
tags
category
icon
password
Property
May 5, 2023 08:02 AM
0x001 从人脸数据到检测。 在介绍之前,我们需要深入人心的去记住以下几个原则: (1):计算机能读懂的数据肯定不是我们肉眼所见的数据。| (2):所有的数据处理过程都可以看做是数学计算 从人脸面部特征数据检测开始,以基于神经网络卷积来实现的人脸识别,我们来分析一下他的步骤原理:
🤔 数据怎么识别的?Input Image -> Detect
输入:原始的可能含有人脸的图像。
输出:人脸位置的 bounding box
输入到检测,其实就是将肉眼所见的数据,转为计算机能识别的数据。
检测就是检查符合某种规范的数据,测试数据是否有效的过程,就是检测,Detect。
这里所说的规范,可以理解成我们定义得空间向量模型,以三维空间某一基准点构建空间坐标系,以点阵形式的空间坐标构建空间向量
空间向量所形成的区域就可以理解为是一个规范。
图片的组成部分中,最小单位是像素点。
通过标记每张图片的像素点空间坐标位置,来模拟圈选人脸局部位置。
🧐 之后便来到了第二个步骤:Detect -> Transform -> Crop
输入:原始图像 + 人脸位置bounding box
输出:“校准”过的只含有人脸的图像
对于输入的原始图像 + bounding box,这一步要做的事情就是要检测人脸中的关键点,然后根据这些关键点对人脸做对齐校准。
所谓关键点,就是下图所示的像素的的点,通常是眼角的位置、鼻子的位置、脸的轮廓点等等。有了这些关键点后,我们就可以把人脸“校准”,或者说是“对齐”。
解释就是原先人脸可能比较歪,这里根据关键点,使用仿射变换将人脸统一“摆正”,尽量去消除姿势不同带来的误差。这一步我们一般叫Face Alignment。
😬在之,就是Crop -> Representation
输入:校准后的单张人脸图像
输出:一个向量表示。
这一步就是使用深度卷积网络,将输入的人脸图像,转换成一个向量的表示。在OpenFace中使用的向量是128x1的,也就是一个128维的向量。在经过处理后,返回一个最终的向量。处理过程下文会仔细阐述:
图像数据经过神经网络卷积计算的流程如下所示:
以图像分类为例,假设我们要将一张大小为$28 \times 28$的手写数字图片输入卷积神经网络中进行分类。整个过程可以分为以下几步:
- 输入层:将$28 \times 28$的灰度图像作为网络的输入,输入层的神经元个数为$28 \times 28 = 784$。
- 卷积层:使用多个卷积核对输入层的图像进行卷积操作,提取图像的特征。假设使用了16个大小为$5 \times 5$的卷积核,卷积操作的步长为1,padding方式为same,那么卷积层的输出为$28 \times 28 \times 16$的特征图。
- 激活函数:对卷积层的输出进行非线性变换,增加网络的非线性拟合能力。常用的激活函数包括ReLU、sigmoid、tanh等。
- 池化层:对卷积层的输出进行下采样操作,减少参数数量,提高模型的鲁棒性。假设使用了$2 \times 2$的最大池化操作,步长为2,那么池化层的输出为$14 \times 14 \times 16$的特征图。
- 全连接层:将池化层的输出展开成一维向量,输入到全连接层中进行分类。假设全连接层有128个神经元,那么全连接层的输出为128维的特征向量。
- 输出层:对全连接层的输出进行softmax变换,将其转化为概率分布。假设我们需要分类10个数字,那么输出层的神经元个数为10。
- 损失函数:使用交叉熵损失函数来度量模型的分类性能,将模型预测的概率分布与真实标签的概率分布之间的差异最小化。 通过卷积神经网络,我们可以将手写数字图片进行分类,输出其所表示的数字类别。
释义:
(1)$28 \times 28$表示图像的像素大小。
在计算机中,图像可以看作是由一个个像素点组成的,每个像素点包含了图像在某个位置上的颜色信息。
在手写数字分类任务中,每张手写数字图片都是由$28 \times 28$个像素点组成的,因此可以用一个$28 \times 28$的矩阵来表示这张图片的像素信息。
在卷积神经网络中,我们将这个$28 \times 28$的矩阵作为输入层的输入,通过一系列卷积、激活、池化、全连接等操作,最终将其映射到输出层的类别概率分布上,实现对手写数字图片的分类。
(2)鲁棒性:
数据模型的鲁棒性(Robustness)是指模型对于输入数据中的噪声、异常值、缺失值等扰动的抵抗能力。
一个鲁棒性较强的模型能够在输入数据中存在一定程度的噪声、异常值、缺失值等干扰情况下,
仍能够保持较好的预测性能,不会因为少量的扰动而导致模型崩溃或者预测结果严重偏差。
在机器学习中,模型的鲁棒性是一个非常重要的性质,因为现实中的数据往往存在各种各样的噪声和异常值。
如果模型缺乏鲁棒性,那么它可能会对这些噪声和异常值过于敏感,从而导致预测结果的不可靠性。
而如果模型具有较强的鲁棒性,那么它能够通过对数据的学习和建模,尽可能地抵抗这些干扰,
提高其预测性能和泛化能力。 提高模型的鲁棒性可以从多个方面入手,例如使用正则化方法、
引入噪声数据进行训练、使用集成学习方法等。
在实际应用中,我们需要根据具体场景和任务的需求,综合考虑模型的鲁棒性和预测性能,选择适合的模型和优化方法。
🤌 欧几里得距离
欧几里得距离(Euclidean distance), 也称为欧氏距离, 是欧几里得空间中两点之间的距离。在二维和三维空间中,欧几里得距离可以直观地理解为两点之间的直线距离。在n维空间中,欧几里得距离可以表示为两点之间距离的平方和的平方根:
$$d(x, y) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2}$$
其中,$n$ 表示空间的维度,$x$ 和 $y$ 分别为两个向量。$是n维空间中的两个点。欧几里得距离的值越小,表示两个点越接近;距离越大,表示两个点越远离。欧几里得距离在机器学习、数据挖掘、图像处理等领域都有广泛应用,例如KNN算法中的距离度量,图像相似性度量等。
有关计算机视觉-人脸识别特征提取的问题,欢迎您在底部评论区留言,一起交流~
- 作者:fntp
- 链接:https://polofox.com/article/computer-vision-note-3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章