Design of face recognition system based on LDA and KNN

SLAM

假设有一个家用扫地机器人。没有 SLAM,它只会在房间里随机移动,无法打扫整个地面空间。此外,这种方法会消耗更多功率,因此电池会更快耗尽。相反,采用 SLAM 的机器人可以使用滚轮转数等信息以及来自相机和其他成像传感器的数据,确定所需的移动量。这称为定位。机器人还可以同步使用相机和其他传感器创建其周围障碍物的地图,避免同一区域清洁两次。这称为建图。
在这里插入图片描述
SLAM 还可用于许多其他应用场景中,例如让一队移动机器人在仓库中移动并整理货架,让自动驾驶汽车停泊到空车位,或者让无人机在未知环境中完成送货。
MATLAB 和 Simulink 提供了 SLAM 算法、函数和分析工具来开发各种应用。
您可以在实现同步定位与地图构建的同时,完成传感器融合、目标跟踪、路径规划和路径跟随等其他任务。
大致说来,实现 SLAM 需要两类技术。一类技术是传感器信号处理(包括前端处理),这类技术在很大程度上取决于所用的传感器。另一类技术是位姿图优化(包括后端处理),这类技术与传感器无关。

概念

SLAM是Simultaneous localization and mapping缩写,意为“同步定位与建图”,主要用于解决机器人在未知环境运动时的定位与地图构建问题,为了让大家更多的了解SLAM,以下将从SLAM的应用领域、SLAM框架、SLAM分类(基于传感器的SLAM分类)来进行全面阐述,本文仅对没有接触过SLAM的新人进行的科普。
机器人定位导航领域:地图建模。SLAM可以辅助机器人执行路径规划、自主探索、导航等任务。国内的科沃斯、塔米以及最新面世的岚豹扫地机器人都可以通过用SLAM算法结合激光雷达或者摄像头的方法,让扫地机高效绘制室内地图,智能分析和规划扫地环境,从而成功让自己步入了智能导航的阵列。
国内思岚科技(SLAMTEC)为这方面技术的主要提供商,SLAMTEC的命名就是取自SLAM的谐音,其主要业务就是研究服务机器人自主定位导航的解决方案。目前思岚科技已经让关键的二维激光雷达部件售价降至百元,这在一定程度上无疑进一步拓展了SLAM技术的应用前景。
VR/AR方面:辅助增强视觉效果。SLAM技术能够构建视觉效果更为真实的地图,从而针对当前视角渲染虚拟物体的叠加效果,使之更真实没有违和感。VR/AR代表性产品中微软Hololens、谷歌ProjectTango以及MagicLeap都应用了SLAM作为视觉增强手段。
无人机领域:地图建模。SLAM可以快速构建局部3D地图,并与地理信息系统(GIS)、视觉对象识别技术相结合,可以辅助无人机识别路障并自动避障规划路径,曾经刷爆美国朋友圈的Hovercamera无人机,就应用到了SLAM技术。、
无人驾驶领域:视觉里程计。SLAM技术可以提供视觉里程计功能,并与GPS等其他定位方式相融合,从而满足无人驾驶精准定位的需求。例如,应用了基于激光雷达技术Google无人驾驶车以及牛津大学MobileRoboticsGroup11年改装的无人驾驶汽车野猫(Wildcat)均已成功路测。

架构

在这里插入图片描述

SLAM按误差函数的形式可以分为两类:最小化光度误差;最小化重投影误差。
最小化光度误差也称直接法,误差函数的形式是两个像素的灰度值相减;
最小化重投影误差也称特征点法,误差函数的形式是像素的坐标值相减。

整理近几年国内外SLAM的方案,根据误差函数形式可分为三类:

直接法:LSD、DSO
特征点法:ORB_SLAM
半直接法:SVO、VIO、MSCKF、OKVIS、VINS、ROVIO

分类

目前用在SLAM上的传感器主要分为这两类,一种是基于激光雷达的激光SLAM(Lidar SLAM)和基于视觉的VSLAM(Visual SLAM)。

1.激光SLAM

特点:精度高,但是密度不高。
激光SLAM采用2D或3D激光雷达(也叫单线或多线激光雷达),2D激光雷达一般用于室内机器人上(如扫地机器人),而3D激光雷达一般使用于无人驾驶领域。激光雷达的出现和普及使得测量更快更准,信息更丰富。激光雷达采集到的物体信息呈现出一系列分散的、具有准确角度和距离信息的点,被称为点云。通常,激光SLAM系统通过对不同时刻两片点云的匹配与比对,计算激光雷达相对运动的距离和姿态的改变,也就完成了对机器人自身的定位。
激光雷达测距比较准确,误差模型简单,在强光直射以外的环境中运行稳定,点云的处理也比较容易。同时,点云信息本身包含直接的几何关系,使得机器人的路径规划和导航变得直观。激光SLAM理论研究也相对成熟,落地产品更丰富。
在这里插入图片描述
光探测与测距(激光雷达)方法主要使用激光传感器(或距离传感器)。

对比相机、ToF 和其他传感器,激光可以使精确度大大提高,常用于自动驾驶汽车和无人机等高速移动运载设备的相关应用。激光传感器的输出值一般是二维 (x, y) 或三维 (x, y, z) 点云数据。激光传感器点云提供了高精确度距离测度数据,特别适用于 SLAM 建图。一般来说,首先通过点云匹配来连续估计移动。然后,使用计算得出的移动数据(移动距离)进行车辆定位。对于激光点云匹配,会使用迭代最近点 (ICP) 和正态分布变换 (NDT) 等配准算法。二维或三维点云地图可以用栅格地图或体素地图表示。

但就密度而言,点云不及图像精细,因此并不总能提供充足的特征来进行匹配。例如,在障碍物较少的地方,将难以进行点云匹配,因此可能导致跟丢车辆。此外,点云匹配通常需要高处理能力,因此必须优化流程来提高速度。鉴于存在这些挑战,自动驾驶汽车定位可能需要融合轮式测距、全球导航卫星系统 (GNSS) 和 IMU 数据等其他测量结果。仓储机器人等应用场景通常采用二维激光雷达 SLAM,而三维激光雷达点云 SLAM 则可用于无人机和自动驾驶。

2.视觉SLAM

【相机可以提供大量信息,成本相对来说更加低廉,】
眼睛是人类获取外界信息的主要来源。视觉SLAM也具有类似特点,它可以从环境中获取海量的、富于冗余的纹理信息,拥有超强的场景辨识能力。早期的视觉SLAM基于滤波理论,其非线性的误差模型和巨大的计算量成为了它实用落地的障碍。近年来,随着具有稀疏性的非线性优化理论(Bundle Adjustment)以及相机技术、计算性能的进步,实时运行的视觉SLAM已经不再是梦想。
1、非线性的误差模型和巨大 的计算量—滤波理论
2、具有稀疏性的非线性化理论(Bundle Adjustment)
视觉SLAM的优点是它所利用的丰富纹理信息。例如两块尺寸相同内容却不同的广告牌,基于点云的激光SLAM算法无法区别他们,而视觉则可以轻易分辨。这带来了重定位、场景分类上无可比拟的巨大优势。同时,视觉信息可以较为容易的被用来跟踪和预测场景中的动态目标,如行人、车辆等,对于在复杂动态场景中的应用这是至关重要的。
在这里插入图片描述
顾名思义,视觉 SLAM(又称 vSLAM)使用从相机和其他图像传感器采集的图像。视觉 SLAM 可以使用普通相机(广角、鱼眼和球形相机)、复眼相机(立体相机和多相机)和 RGB-D 相机(深度相机和 ToF 相机)。
视觉 SLAM 所需的相机价格相对低廉,因此实现成本较低。此外,相机可以提供大量信息,因此还可以用来检测路标(即之前测量过的位置)。路标检测还可以与基于图的优化结合使用,这有助于灵活实现 SLAM。
使用单个相机作为唯一传感器的 vSLAM 称为单目 SLAM,此时难以定义深度。这个问题可以通过以下方式解决:检测待定位图像中的 AR 标记、棋盘格或其他已知目标,或者将相机信息与其他传感器信息融合,例如测量速度和方向等物理量的惯性测量单元 (IMU) 信息。vSLAM 相关的技术包括运动重建 (SfM)、视觉测距和捆绑调整。
视觉 SLAM 算法可以大致分为两类。稀疏方法:匹配图像的特征点并使用 PTAM 和 ORB-SLAM 等算法。稠密方法:使用图像的总体亮度以及 DTAM、LSD-SLAM、DSO 和 SVO 等算法。

通过对比我们发现,激光SLAM和视觉SLAM各擅胜场,单独使用都有其局限性,而融合使用则可能具有巨大的取长补短的潜力。例如,视觉在纹理丰富的动态环境中稳定工作,并能为激光SLAM提供非常准确的点云匹配,而激光雷达提供的精确方向和距离信息在正确匹配的点云上会发挥更大的威力。而在光照严重不足或纹理缺失的环境中,激光SLAM的定位工作使得视觉可以借助不多的信息进行场景记录。
近年来,SLAM导航技术已取得了很大的发展,它将赋予机器人和其他智能体前所未有的行动能力,而激光SLAM与视觉SLAM必将在相互竞争和融合中发展,使机器人从实验室和展厅中走出来,做到真正的服务于人类。

常见挑战

虽然 SLAM 已在某些场景下投入实际应用,但是仍面临诸多技术挑战,因此难以得到更为广泛的应用。不过,每项挑战都可以凭借特定的对策加以克服。

1.定位误差累积,导致与实际值产生偏差
SLAM 会估计连续移动,并容许一定的误差。但是误差会随着时间累积,导致与实际值产生明显偏差。误差还会导致地图数据瓦解或失真,让后续搜索变得困难。我们来看一个绕正方形通道行驶的例子。随着误差累积,机器人的起点和终点对不上了。这称为闭环问题。这类位姿估计误差不可避免。我们必须设法检测到闭环,并确定如何修正或抵消累积的误差。
在这里插入图片描述
对策之一是记住之前到过的某处的某些特征,将其作为路标,从而最小化定位误差。构建位姿图有助于修正误差。将误差最小化问题视为优化问题进行求解,以生成更准确的地图数据。这种优化在视觉 SLAM 中称为捆绑调整。
在这里插入图片描述
2.定位失败,地图上的位置丢失。
图像和点云建图不考虑机器人的移动特征。在某些情况下,这种方法会生成不连续的位置估计。例如,可能会有计算结果显示,以 1 米/秒速度移动的机器人突然向前“瞬移”了 10 米。避免这种定位失败的办法有两种:一是使用恢复算法;二是将运动模型与多个传感器融合,以基于传感器数据计算。

有多种方法可以实现运动模型的传感器融合。一种常见方法是使用卡尔曼滤波进行定位。由于大部分差速驱动机器人和四轮车辆一般都使用非线性运动模型,因此通常会使用扩展卡尔曼滤波器和粒子滤波器(蒙特卡罗定位)。某些情况下,也可以使用无迹卡尔曼滤波器等更加灵活的贝叶斯滤波器。一些常用传感器是惯性测量装置,例如惯性测量单元 (IMU)、航姿参考系统 (AHRS)、惯性导航系统 (INS)、加速度计传感器、陀螺仪传感器和磁力传感器。安装到车辆的轮式编码器通常用于测距。

定位失败时,一种恢复对策是记住之前经过的某个位置的关键帧,将其作为路标。搜索路标时,会以特定方法进行特征提取以便高速扫描。有些方法基于图像特征,例如特征袋 (BoF) 和视觉词袋 (BoVW)。近年来,人们也使用深度学习来比较特征距离。

3.图像处理、点云处理和优化带来高计算成本
在车辆硬件上实现 SLAM 时,计算成本是个问题。计算通常在处理能力有限的紧凑型低功耗嵌入式微处理器上执行。为了实现准确定位,必须高频率执行图像处理和点云匹配。此外,闭环等优化计算都是高成本计算流程。此处的挑战在于如何在嵌入式微处理器上执行这种高成本处理。

对策之一是并行运行多个不同流程。例如,用于匹配流程前处理的特征提取就相对适合并行运行。使用多核 CPU 进行处理时,单指令多数据 (SIMD) 计算和嵌入式 GPU 在某些情况下可以进一步提升速度。而且,由于位姿图优化可以在相对长的周期里执行,降低其优先级并以规律间隔执行也能提高性能。

PCA无监督学习

无监督学习是训练机器使用既未分类也未标记的数据的方法。 这意味着无法提供训练数据,机器只能自行学习。 机器必须能够对数据进行分类,而无需事先提供任何有关数据的信息。 其理念是先让计算机与大量变化的数据接触,并允许它从这些数据中学习,以提供以前未知的见解,并识别隐藏的模式。
本文详细介绍PCA原理,主要参考PRML一书。
PCA也叫Karhunen-Loève transform(KL变换),或Hotelling transform(霍特林变换),是一种无监督学习方法,常用于高维数据的降维,通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量。
PCA的原理有两种等价解释:最大方差和最小投影误差,两种解释都通过一组正交投影,将原始数据投影到低维线性子空间,即主元子空间,最大方差讲求数据投影之后,在投影方向上保持最大方差,最小投影误差需要投影数据重构后和原始数据之间的均方差最小,前者由Hotelling于1933年提出,后者由Pearson于1901年提出。
在这里插入图片描述
1、最大方差。
最大方差的直观理解可以从一个简单的实例解释,如我们的手掌在灯光下的投影,手掌是立体结构,属于三维空间,形成的影子在一个平面内,属于二维空间,首先达到了降维的目的,当手垂直于灯光时,完整的手的影子可以照射在地面上,该方向可保留手的最大特征,如果将手掌直立,平行于灯光,在地面上的影子就是一段很粗的线,无法判断是什么物体。再如图1,两个数据集由两个高斯分布生成,

由图可以看出,数据在line B上的投影保持了两类数据的聚类结构,在line B的投影方差也更大,而方差是数据分散程度的度量,所以方差大的投影方向有利于保持数据的聚类特征。
数据投影后的低维子空间叫做主元子空间,主元子空间相对于原始空间的补空间为残差子空间,主元子空间要求能保持数据的主要特征,方差作为数据分散程度的度量,是决定投影方向的重要统计量,下面通过推导公式加深对最大方差法的理解。

2、最小投影误差法
最小投影误差比较容易理解,其原理是最小化数据重构误差。首先,假设是一组相互正交的单位向量,其中,,即,(为Kronecker函数),因此,是空间的一组基,该空间中的任意一点都可以表示为这组基的线性组合,如

PCA是人脸识别领域的经典算法,其优点是运算速度快,因为PCA通过选取主元,将人脸图像降维,降维后的数据仍能保持人脸的主要特征,对降维后的数据进行识别,可大大降低计算量。基于PCA的人脸识别算法的主要步骤如下:

(1) 读取训练集图像的像素值,将每个图像的像素值转化为一个行向量,将所有的数据保存为一个二维矩阵,每一行为一个图像的数据;
(2) 数据中心化处理,将第一步得到的矩阵,每一列减去其所在列的均值,使整个数据集的均值为0;
(3) 计算协方差矩阵,协方差矩阵表示不同随机变量之间的相互关系,两个随机变量的协方差越大,表示其相关性越大;
(4) 选择主元子空间,将协方差矩阵的特征值按照从大到小的顺序排列,按照精度要求选择合适数量的前k个特征向量构成投影矩阵;
(5) 将训练集和测试集均进行降维,即投影到主元子空间;
(6) 人脸识别,将降维后的测试集的每一个图像与降维后的训练集的每一个图像进行匹配,将其分类到距离最小的训练集类别中。基于PCA人脸识别的前提是测试集的图像必须包含在训练集中,否则不能从训练集中识别测试集所对应的图像。
以下两组图为采用PCA进行人脸识别的两组结果,每组图的左侧为要识别的图像,即测试集,右侧为从训练集中识别出的图像,第一行为原始图像,第二行为重构后的图像,可以看出,重构后的图像仍能保持原始人脸图像的主要特征。

在这里插入图片描述

PCA作为经典方法在模式识别领域已经有了广泛的应用,但是也存在不可避免的缺点,总结如下:
(1) PCA是一个线性降维方法,对于非线性问题,PCA则无法发挥其作用;
(2) PCA需要选择主元个数,但是没有一个很好的界定准则来确定最佳主元个数;
(3) 多数情况下,难以解释PCA所保持的主元分量的意义;
(4) PCA将所有的样本作为一个整体对待,去寻找一个均方误差最小意义下的最优线性映射,而忽略了类别属性,而它所忽略的投影方向有可能刚好包含了重要的可分类信息,如下图所示,红色和蓝色的点为原数据,中间绿色的点为重构后的数据,由此可看出,这种情形下,主元方向不能保持数据的聚类信息。
在这里插入图片描述

PCA是一种无监督的数据降维方法,与之不同的是:LDA是一种有监督的数据降维方法。我们知道即使在训练样本上,我们提供了类别标签,在使用PCA模型的时候,我们是不利于类别标签的,而LDA在进行数据降维的时候是利用数据的类别标签提供的信息的。

从几何的角度来看,PCA和LDA都是将数据投影到新的相互正交的坐标轴上。只不过在投影的过程中他们使用的约束是不同的,也可以说目标是不同的。PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。样本的方差越大表示样本的多样性越好,在训练模型的时候,我们当然希望数据的差别越大越好。否则即使样本很多但是他们彼此相似或者相同,提供的样本信息将相同,相当于只有很少的样本提供信息是有用的。样本信息不足将导致模型性能不够理想。这就是PCA降维的目的:将数据投影到方差最大的几个相互正交的方向上。这种约束有时候很有用,比如在下面这个例子:
在这里插入图片描述

线性判别分析(Linear Discriminant Analysis, 以下简称LDA)是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同,PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概述,就是“投影后类内方差最小,类间方差最大”,什么意思呢?我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

可能这句话有点抽象,那我们先看看最简单的情况。假设我们有两类数据分别是红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

KNN 可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一。注意:KNN 算法是有监督学习中的分类算法,它看起来和另一个机器学习算法 K-means 有点像(K-means 是无监督学习算法),但却是有本质区别的。

KNN 的全称是 K Nearest Neighbors,意思是 K 个最近的邻居。从这个名字我们就能看出一些 KNN 算法的蛛丝马迹了。K 个最近邻居,毫无疑问,K 的取值肯定是至关重要的,那么最近的邻居又是怎么回事呢?其实,KNN 的原理就是当预测一个新的值 x 的时候,根据它距离最近的 K 个点是什么类别来判断 x 属于哪个类别。听起来有点绕,还是看看图吧。

KNN 和 K-means 的核心都是通过计算空间中点的距离来实现目的,只是他们的目的是不同的。KNN 的最终目的是分类,而 K-means 的目的是给所有距离相近的点分配一个类别,也就是聚类。

简单说,就是画一个圈,KNN 是让进来圈子里的人变成自己人,K-means 是让原本在圈内的人归成一类人。

至于什么时候应该选择使用 KNN 算法,Sklearn 的这张图给了我们一个答案:

简单来说,就是当需要使用分类算法,且数据比较大的时候就可以尝试使用 KNN 算法进行分类了。

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。

KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。

输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。

一般而言,我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的类别,作为新数据的分类。
在这里插入图片描述
数据分类就是把具有某种共同属性或特征的数据归并在一起,通过其类别的属性或特征来对数据进行区别。为了实现数据共享和提高处理效率,必须遵循约定的分类原则和方法,按照信息的内涵、性质及管理的要求,将系统内所有信息按一定的结构体系分为不同的集合,从而使得每个信息在相应的分类体系中都有一个对应位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值