我遇到了术语“子空间之间的主角”作为比较图像中对象的工具。我在互联网上找到的所有材料似乎都以高度数学的方式处理了这个想法,我无法理解这个术语背后的真正物理含义。
我有一些线性代数的知识。任何有助于理解该术语的物理意义及其在对象识别中的应用将不胜感激。
我遇到了术语“子空间之间的主角”作为比较图像中对象的工具。我在互联网上找到的所有材料似乎都以高度数学的方式处理了这个想法,我无法理解这个术语背后的真正物理含义。
我有一些线性代数的知识。任何有助于理解该术语的物理意义及其在对象识别中的应用将不胜感激。
让我们考虑一下您有两张照片的情况,一张是基础照片,另一张是基础照片的缩放版本。然后考虑您可以创建从基本照片到缩放照片的“映射”,由基本照片中每个像素的一组矢量变化定义。
也就是说,如果您在基本照片的点 (0,0) 处有一个像素,它将位于缩放照片上的位置 (0,0)。如果您在基本照片上的点 (0,1) 处有一个像素,则它将位于缩放照片上的点 (0,s) 处,其中 s 是它们之间的比例因子。对于 (1,0) 映射到 (s,0) 和 (1,1) 映射到 (s,s) 也是如此。
我们可以将这些像素中的每一个理解为“所有可能的像素”的向量空间上的子空间(根据其表示方式,每个像素的“值”可能包含一个包含向量作为第三维)。但请注意,它们是不同的子空间。缩放图片中存在大于 1 的比例因子的矢量,而这些矢量不在原始图片中。对于小于 1 的比例值,原始图片中的向量不在缩放图片中。对于等于一的比例向量,它基本上是同一性的,它们是同一张图片。
更重要的是,我们可以对旋转做同样的事情。如果您有基本照片和旋转照片,那么基本照片上的一个像素到旋转照片上的一个像素之间存在映射,我将把数学留给您。平移、倾斜甚至更改图像的颜色也是如此。每个都表示一种类型的映射,您可以从一个子空间到另一个子空间。
那么这是什么意思?好吧,您可以做的一件事是拍摄两张图像,一张“基本”照片和两张“缩放”照片,然后确定“这两张照片与基本照片有何不同”?也就是说,如果第一张缩放的照片的缩放因子为 10,而第二张的缩放因子为 100,那么您可以说较大的缩放照片离基础照片“更远”。也就是说,我们可以将两个映射一起比较,以确定哪个映射更接近原始映射。
更重要的是,这些映射函数通常是可组合的和可交换的。也就是说,如果您执行“缩放然后旋转”,这与执行“旋转然后缩放”非常相似,如果不完全相同的话。让我们来看看这是为什么。让我们考虑从任何一个中获取一个单位向量。然后我们应用“缩放”来缩放 x 和 y 分量,然后围绕某个轴旋转这个单位向量(让我们假设原点,尽管可能也会发生平移)。然后,您将产生一个代表所有这些应用更改的新向量。更重要的是,我们可以对“缩放然后旋转”函数和“旋转然后缩放”函数都这样做。
现在我们有两个向量,我们想确定它们是否相同。好吧,一种方法是计算两个向量之间的角度。如果角度为 0,那么我们可以说向量是相同的(假设它们也具有相同的大小)。在这种情况下,两者都会产生相同的向量,它们之间的角度是 0,所以我们可以说它们是相同的。
那么我们如何回到“这两个对象有多大不同”的问题呢?好吧,我们可以做到的一种方法是尝试回答“哪一组组合函数从一个对象映射到另一个对象?”这个问题。如果我们可以创建一个新的“向量”来表示从一张图片到另一张图片的全部变化,那么我们就可以尝试确定这两个对象的不同之处,正如它们图像的维度空间所表示的那样。
但是您可能会问的问题是“为什么这有用”?好吧,想象一下你是一个神经网络。你得到了一张照片,并负责回答“这是一只猫吗?”这个问题。你将如何回答这个问题?好吧,作为神经网络,你学到的一件事是“猫有耳朵”。您在神经网络的权重中编码了“猫耳”的规范表示,因此您开始查看图片的不同子集以说“这是猫耳”吗?您可以这样做,例如,通过截取图片的一部分,确定裁剪部分与您的规范“猫耳”之间的角度和尺寸,以及您的规范“猫耳”和您的样本之间的角度是否低于一定数量,您可以自信地说,您找到的是“猫耳朵”。一对猫耳朵、眼睛、鼻子、一些毛皮和一条尾巴(尽管尾巴可能被遮挡了),你可以确信你找到了一只“猫”。
(注意:这是一种过度简化,通常在深度网络中通过将图片分解成一系列连续组合的特征来完成,例如首先“线条”、“曲线”和“纹理”,然后产生“圆圈”和“矩形”与“交叉散列”,然后产生“眼睛”、“毛皮”与“皮肤”等。每个不同的层都可以用相同的方法通过自己的比较来实现!)