【机器学习实验四】基于Logistic Regression二分类算法实现手部姿态识别
博主构想了一个自带界面的完整手势识别系统,该系统不仅能检测手部姿势,还能判断手势所代表的信息,比如进行空中绘画、操控游戏场景、控制鼠标、翻页PPT等。这一应用前景相当广阔。
概念构思
现有的开源手势识别算法主要分成两种思路:一种依赖传统数字图像处理方法,通过图像形态学处理、肤色检测、图像滤波等手段提取手部轮廓和特征,然后将测试数据与模式进行对比;另一种走深度学习路线,使用深度神经网络提取手部关键点及其特征,进行常规的手势识别操作或目标检测。
为了与正在学习的机器学习算法相匹配,在本篇博客中,我们不考虑手部关键点的回归问题,而是关注分类问题。因此,这里我们将基于Mediapipe开源深度学习工具包中的手部姿态检测算法提取关键点,然后利用这些关键点进行手势分类。
实现流程
数据收集与预处理
1. 手部关键点提取:利用Mediapipe工具包,自动标记出500帧手部关键点。每个关键点包括其空间坐标(x, y, z)。
2. 数据集构建:对每种手势采集500帧关键点数据,并整合为一个大型数据集。最后将数据全量保存为二进制文件。
关键点可视化:
通过可视化这500帧关键点的动态变化,我们能直观地理解手部运动的多样性。
关键点数据预处理
1. 绝对坐标转相对距离:将关键点的绝对坐标转换为相对距离矩阵,确保算法能够学习到姿势的相对性,而不是绝对位置变化的影响。
2. 距离矩阵生成:计算每一帧数据中关键点两两之间的距离,并形成一个包含了所有关键点对间的距离矩阵。直观表示为距离矩阵的可视化。
算法实现
使用Logistic回归进行二分类问题的解决。
Logistic回归细节
使用现有\( Training Dataset \)和标准归一化对数据进行预处理。
训练与测试:分割数据集,生成训练集和验证集。
参数初始化:对权值\( W \)进行学习率、迭代次数和批大小的设定。
训练流程:在每轮迭代中更新权重,评估在训练集和验证集上的损失和准确率。
配置代码:通过特定的路径管理` Weight.npy`、` std.npy`和` mean.npy`等重要参数。
训练与测试
使用` cloth_dist.npy`和` stone_dist.npy`数据集进行训练,跟踪损失函数和准确率的变化。使用这些数据集调整参数进行模型优化。
未来改进
目前的距离矩阵计算存在冗余问题,例如,计算的关键点与自身之间的距离和关键点与其他关键点之间的对称计算是不必要的。未来的改进可能包括:
去除冗余:仅计算上三角区域,或不计算主对角线上的值,以减少参数数量和计算复杂度。
噪声过滤:识别并去除非关键信息,集中于最具区分性的关键点对,提高模型泛化能力。
这个改写尝试保留了文章的核心内容和逻辑,同时进行了适当的简化和中文本土化的调整,意在提供一个清晰、有条理的概述。