2、数学基础回顾(一):线性代数核心——向量、矩阵、特征值与特征向量,在姿态估计中的意义。
各位同学,咱们今天聊聊线性代数。我知道,一提起数学,很多人头就大了。说实话,我当年上学时也觉得这玩意儿抽象得要命。直到后来做姿态估计项目,才发现——嗯,原来那些公式全是用得上的。
咱们这门课讲的是行人姿态估计。说白了,就是让计算机看懂人的骨架。那线性代数在这中间扮演什么角色?我打个比方:你看到的每一张图片,在计算机眼里就是一堆数字。而处理这些数字,靠的就是向量、矩阵这些东西。
2.1 向量:姿态的“坐标语言”
先说说向量。向量是什么?你可以把它理解成“带方向的数量”。比如我说“往前走3步”,这就是一个向量——有方向(前),有大小(3步)。
在姿态估计里,每个关键点(比如肩膀、手肘、膝盖)都是一个向量。为什么?因为它在图像上有坐标啊。比如左肩在像素位置 (120, 340),这就是一个二维向量。
关键点向量表示:
一个行人骨架通常有 17 个关键点。每个关键点用 (x, y) 表示。那么整个人的姿态,就是一个 34 维的向量(17个点 × 2个坐标)。
我在做第一个姿态估计项目时,犯过一个低级错误。我把关键点的 x 和 y 坐标直接拼在一起,忘了归一化。结果模型训练出来,对图像大小特别敏感。后来才意识到——向量是有尺度的,不同尺度的向量不能直接比较。
我的建议:处理关键点向量时,一定要做归一化。把坐标缩放到 [0,1] 区间,或者减去均值除以标准差。否则模型会“偏心”——它会更关注数值大的那个维度。
2.2 矩阵:批量处理的艺术
向量是一个点,矩阵就是一堆点。你想想看,一张图片上有好几个人,每个人有 17 个关键点。如果一个个处理,效率太低了。矩阵就是用来干这个的——批量处理。
举个例子。假设一张图上有 5 个人,每个人 17 个关键点。我们可以用一个 5×34 的矩阵来表示所有人的姿态。每一行是一个人,每一列是一个坐标维度。
# 伪代码:姿态矩阵
# 5个人,34维(17个点 × 2坐标)
pose_matrix = [
[x1, y1, x2, y2, ..., x17, y17], # 人1
[x1, y1, x2, y2, ..., x17, y17], # 人2
...
[x1, y1, x2, y2, ..., x17, y17] # 人5
]
矩阵乘法在姿态估计里更是无处不在。我记得有一次做多人姿态估计,需要把不同人的关键点关联起来。用的就是矩阵乘法——计算所有关键点之间的亲和力。说白了,就是算一个矩阵,看哪些关键点更可能属于同一个人。
注意:矩阵运算虽然方便,但要注意维度匹配。我见过太多新手把矩阵维度搞错,结果程序报错半天找不出原因。我的习惯是:写代码前先在纸上画出矩阵形状,标清楚行和列的含义。
2.3 特征值与特征向量:姿态的“灵魂”
这部分可能是最抽象的。特征值和特征向量,到底在姿态估计里有什么用?
我换个角度解释。你观察一个人的走路姿态,会发现有些动作模式是重复出现的。比如摆臂的幅度、迈步的节奏。这些“模式”就是特征向量,而“这个模式有多重要”就是特征值。
在姿态估计中,我们经常用主成分分析(PCA)来降维。PCA 的本质就是找特征值和特征向量。为什么要降维?因为 34 维的向量太复杂了,很多维度其实是冗余的。比如肩膀和手肘的运动是相关的,没必要用两个维度去描述。
实际案例:我曾经做一个跌倒检测项目。原始姿态是 34 维,用 PCA 降到 6 维后,准确率反而提升了。为什么?因为降维去掉了噪声,保留了最核心的运动模式。那 6 个主成分,其实就是特征向量,对应的特征值表示它们解释了多少数据方差。
特征值还有一个妙用——判断姿态的“异常程度”。正常情况下,人的姿态变化是平滑的。如果某个时刻的特征值突然剧烈变化,很可能就是跌倒或者碰撞。我在项目中就用这个思路做过一个简单的异常检测模块,效果还不错。
| 概念 | 姿态估计中的意义 | 我的经验 |
|---|---|---|
| 向量 | 表示单个关键点或单个人体姿态 | 一定要归一化,否则模型会“偏心” |
| 矩阵 | 批量处理多人姿态或帧序列 | 写代码前先画矩阵形状,避免维度错误 |
| 特征值/特征向量 | 提取核心运动模式,降维去噪 | 降维后准确率可能更高,别怕丢信息 |
2.4 这些数学工具怎么串起来用?
咱们捋一下。一个姿态估计系统的典型流程是这样的:
- 输入图像:图像本身就是一个巨大的矩阵(像素值)。
- 特征提取:用卷积神经网络把图像矩阵变成特征图(还是矩阵)。
- 关键点检测:从特征图中找出每个关键点的位置(向量)。
- 姿态表示:把所有关键点拼成一个姿态向量(34维)。
- 行为分析:对姿态向量做 PCA 降维(特征值/特征向量),提取核心模式。
- 预测输出:用降维后的特征做分类或回归。
你看,从输入到输出,每一步都离不开线性代数。我刚开始学的时候也觉得这些数学工具是割裂的。后来做项目多了才发现——它们是一环扣一环的。向量是基础单元,矩阵是批量处理工具,特征值帮你找到最重要的信息。
一个小技巧:如果你觉得数学公式看着头疼,先别硬啃。找个开源姿态估计项目跑一遍,看看代码里哪些地方用了矩阵乘法、哪些地方做了降维。带着问题回头看数学,会轻松很多。
好了,这一章就到这里。线性代数是姿态估计的“语法”,掌握了它,你才能读懂计算机眼中的姿态语言。下一章咱们聊概率论——为什么模型会“不确定”?
公众号:蓝海资料掘金营,微信deep3321