公司动态

动作捕捉数据集语义聚类:fairmotion动能特征+KMeans+t-SNE完整实践

📅 2026/8/24 9:24:04
动作捕捉数据集语义聚类:fairmotion动能特征+KMeans+t-SNE完整实践
动作捕捉数据集语义聚类fairmotion动能特征KMeanst-SNE完整实践【免费下载链接】fairmotionTools to load, process and visualize motion capture data项目地址: https://gitcode.com/gh_mirrors/fa/fairmotionfairmotion是 MetaFacebook开源的动作捕捉工具箱提供加载、处理和可视化动作捕捉数据的完整工具链。这篇文章带你用它的动能特征 KMeans 聚类 t-SNE 可视化流程对大型动作捕捉数据集如 AMASS CMU做语义聚类——自动把成千上万段动作按语义走路、跑跳、挥手……归入不同簇零基础也能跑通。上图是 fairmotion 的 BVH 动作可视化效果黄色小球是骨架关节彩色坐标轴表示空间朝向。聚类之前我们先把这些原始动作数据准备好。一、为什么需要动作捕捉语义聚类 大型动作数据集AMASS、CMU MoCap动辄几万段动作文件。想回答这些问题时人工筛选根本不可能哪些动作片段属于跳跃哪些是慢走如何快速检索与某个动作相似的其他动作数据集里到底包含哪几类语义类别语义聚类的思路是把每段动作转成一个特征向量如关节动能统计量再用无监督聚类算法KMeans把相似的动作分到同一簇最后用 t-SNE 降维到 2D 平面直观查看。二、准备工作安装 fairmotion 并准备数据集 pip install fairmotion或从源码安装git clone https://gitcode.com/gh_mirrors/fa/fairmotion cd fairmotion pip install -e .然后把要聚类的.bvh动作文件集中放到同一个文件夹$PATH_TO_BVH_DATASET。fairmotion 支持 BVH、ASF/AMC、AMASS 等多种格式加载器位于fairmotion/data/目录下。三、步骤 1切分动作为等长片段完整的动作文件长短不一先把它们切成固定时长如 2 秒的重叠片段聚类粒度更均匀python fairmotion/tasks/clustering/split_bvh.py \ --folder $PATH_TO_BVH_DATASET \ --output-folder $PATH_TO_STORE_SPLIT_BVH \ --time-window 2核心脚本是fairmotion/tasks/clustering/split_bvh.py它内部用fairmotion.ops.motion.cut按帧窗口切割并保存为 BVH。四、步骤 2提取动能特征kinetic features⚡这是语义聚类的关键一步——给每段动作生成特征向量。脚本提供两套特征特征类型原理来源kinetic推荐对每个关节计算平均动能水平/垂直与能量消耗加速度FMDistance (Eurographics 2008)manual基于关节几何启发式移动、平面、角度Müller et al. SIGGRAPH 2005python fairmotion/tasks/clustering/generate_features.py \ --type kinetic \ --folder $PATH_TO_BVH_DATASET \ --output-folder $PATH_TO_STORE_FEATURES \ --cpu 10脚本用多进程并行处理--cpu指定核数输出 TSV 格式的特征文件features.tsv每行是文件名:特征值1 特征值2 ...。动能特征的实现见fairmotion/tasks/clustering/features/kinetic.py其中的KineticFeatures类基于滑动窗口计算关节平均速度与加速度。五、步骤 3KMeans 聚类fairmotion/tasks/clustering/clustering.py封装了 scikit-learn 的 4 种聚类算法kmeans、hierarchical层次聚类、optics、dbscan并支持特征归一化和按百分位截断去掉异常值python fairmotion/tasks/clustering/clustering.py \ --features $FEATURES_FILE \ --type kmeans \ --num-clusters 8 \ --normalize-features \ --clip-features 90 \ --output-file $OUTPUT_CSV_FILE输出的 CSV 中每行包含簇编号、簇内排名、到簇中心的距离距离越小越典型。例如想找标准走路的代表动作取走路簇中 score 最小的那条即可。参数小贴士--num-clusters没有标准答案可试 416 不同值结合 t-SNE 图观察簇的分离度再定。六、步骤 4t-SNE 可视化一图看懂聚类效果 用fairmotion/viz/tsne.py把高维特征降到 2D按簇着色python fairmotion/viz/tsne.py \ --features-file $FEATURES_FILE \ --clusters-file $OUTPUT_CSV_FILE \ --algorithm tsne \ --output-file tsne_result.png下面是 AMASS CMU 数据集 8 个 KMeans 簇的 t-SNE 嵌入效果图——每个颜色就是一类语义动作簇内点越密集说明该类动作在特征空间中越一致七、完整流程一图总结 ✅BVH数据集 → split_bvh切分 → generate_features提特征 → clustering.py聚类 → tsne.py可视化切分split_bvh.py生成等长重叠片段特征generate_features.py提取动能特征向量聚类clustering.py执行 KMeans 等算法并输出簇信息可视化viz/tsne.py绘制 t-SNE 散点图这套流水线全部位于fairmotion/tasks/clustering/目录配合fairmotion/data/的数据加载器和fairmotion/ops/的矩阵操作是学习无监督动作检索的绝佳入门范例。想验证实现细节可运行fairmotion/tasks/clustering/test_generate_features.py单元测试。下一步可以探索换hierarchicalaveragelinkage 对比效果或把聚类结果喂给fairmotion/tasks/changepoint_detection/做动作片段切分。动手试试吧【免费下载链接】fairmotionTools to load, process and visualize motion capture data项目地址: https://gitcode.com/gh_mirrors/fa/fairmotion创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考