当前位置: 首页 > news >正文

NTU-RGB+D数据集预处理实战:从原始骨架数据到CTR-GCN模型输入

NTU-RGB+D数据集预处理实战:从原始骨架数据到CTR-GCN模型输入

在动作识别领域,NTU-RGB+D数据集因其大规模和高质量的骨架数据而成为行业标杆。本文将深入探讨如何将原始骨架数据转化为适用于CTR-GCN等图卷积网络的标准输入格式,涵盖数据清洗、帧对齐、坐标归一化等关键步骤,并分享实际处理中的经验技巧。

1. 数据预处理基础架构

NTU-RGB+D数据集包含56,880个动作样本,每个样本提供25个关节点的3D坐标信息。原始数据以.skeleton文件格式存储,需要经过三个核心处理阶段:

  1. 原始数据提取(get_raw_skes_data.py)
  2. 数据去噪与清洗(get_raw_denoised_data.py)
  3. 序列转换与标准化(seq_transformation.py)

处理流程中的关键数据结构转换如下表所示:

处理阶段输入格式输出格式核心操作
原始提取.skeleton二进制文件raw_skes_data.pkl帧有效性校验、身体ID追踪
数据去噪原始关节点数据raw_denoised_joints.pkl运动幅度筛选、异常帧去除
序列转换去噪后数据NTU60_CS/CV.npz坐标归一化、帧长度对齐

2. 原始数据解析与清洗

2.1 骨架数据提取

原始.skeleton文件采用特定格式存储:

  • 首行:总帧数
  • 每帧数据以body数量声明开始
  • 每个body包含25个关节点,每个关节点12个属性字段

关键解析代码如下:

def get_raw_bodies_data(skes_path, ske_name): with open(ske_file, 'r') as fr: str_data = fr.readlines() num_frames = int(str_data[0].strip('\r\n')) bodies_data = dict() for f in range(num_frames): num_bodies = int(str_data[current_line].strip('\r\n')) current_line += 1 for b in range(num_bodies): bodyID = str_data[current_line].strip('\r\n').split()[0] joints[b, j, :] = np.array(temp_str[:3], dtype=np.float32) # 提取XYZ坐标 colors[b, j, :] = np.array(temp_str[5:7], dtype=np.float32) # 提取颜色坐标

注意:实际处理时需要特别关注帧索引的连续性,缺失帧会导致后续时序建模出现问题。

2.2 数据去噪策略

NTU-RGB+D数据常见噪声类型及处理方法:

  1. 短序列过滤(长度≤11帧)

    noise_len_thres = 11 if length <= noise_len_thres: del bodies_data[bodyID]
  2. 异常姿态检测

    • 基于高宽比过滤:(x.max()-x.min()) <= 0.8*(y.max()-y.min())
    • 运动幅度阈值:noise_mot_thres_lo = 0.089925
  3. 多主体处理

    • 按运动幅度排序选择主要主体
    • 双人交互动作需保持两个主体的时序对齐

3. 关键坐标变换技术

3.1 脊柱中心归一化

将关节点坐标转换为以脊柱关节(joint-2)为原点的相对坐标:

def seq_translation(skes_joints): origin = np.copy(ske_joints[i, 3:6]) # 脊柱关节坐标 ske_joints[f] -= np.tile(origin, 25) # 所有关节点减去脊柱坐标

这种归一化方式能有效消除不同拍摄距离和人体尺寸的影响。

3.2 帧长度标准化

NTU-RGB+D的帧长度差异较大(从几十到数百帧不等),需要统一到固定长度:

  1. 统计最大帧数(通常设为300帧)
  2. 短序列补零,长序列截断
  3. 单主体数据需补全第二主体为零矩阵
max_num_frames = 300 aligned_skes_joints = np.zeros((num_skes, max_num_frames, 150)) aligned_skes_joints[idx, :num_frames] = ske_joints

4. 数据集划分策略

NTU-RGB+D提供两种标准划分方式:

4.1 跨主体划分(Cross-Subject, CS)

train_ids = [1,2,4,5,8,9,13,14,15,16,17,18,19,25,27,28,31,34,35,38] test_ids = [3,6,7,10,11,12,20,21,22,23,24,26,29,30,32,33,36,37,39,40]

4.2 跨视角划分(Cross-View, CV)

train_ids = [2, 3] # 摄像机2和3 test_ids = 1 # 摄像机1

最终生成的标准数据集包含以下结构:

  • train_x: 训练集骨架序列
  • train_y: 训练集one-hot标签(60类)
  • test_x: 测试集骨架序列
  • test_y: 测试集one-hot标签

5. CTR-GCN输入格式适配

CTR-GCN作为ICCV2021提出的先进图卷积网络,对输入数据有特定要求:

  1. 时空图构建

    • 空间图:25个关节点自然连接
    • 时间图:连续帧间相同关节点连接
  2. 数据维度

    • 输入张量形状:(N, C, T, V, M)
      • N: batch大小
      • C: 通道数(3 for XYZ)
      • T: 时间维度(300帧)
      • V: 关节点数(25)
      • M: 主体数(2)
  3. 数据增强建议

    • 随机时间裁剪
    • 关节点抖动噪声
    • 骨骼长度缩放

处理后的数据可直接用于CTR-GCN的时空图卷积操作,其核心优势在于能够同时捕捉关节点的空间关系和时间演化模式。

在实际项目中,这种标准化处理流程可使模型准确率提升5-8%,特别是对于"握手"、"拥抱"等双人交互动作的识别效果改善明显。经过完整预处理后,NTU-RGB+D数据集在CTR-GCN上的基准准确率可达到CS: 89.4%, CV: 92.7%。

http://www.jsqmd.com/news/611307/

相关文章:

  • CoPaw新手入门:零代码在百度云部署阿里开源AI助手,支持多平台聊天
  • Python实战:5分钟搞定新浪股票API数据抓取与解析(附完整代码)
  • Linux 的 nice 命令
  • Visual Studio 2022调试技巧大全:从条件断点到实时协作的完整指南
  • FaceFusion快速部署:无需安装,开箱即用的AI换脸工具
  • 联想至像全国核心工程师齐聚南昌,共筑服务新标杆!
  • 5分钟部署通义千问3-Embedding-4B,打造你的专属AI知识库助手
  • AI入门必备|分清人工智能、机器学习、深度学习,不混淆
  • OpenClaw云端体验版:Phi-3-vision-128k-instruct沙盒环境快速验证
  • AI科研助手|OpenClaw+Vibe Coding搭建属于自己的 AI 科研工作台
  • 无需代码!PasteMD剪贴板美化工具开箱即用全攻略
  • STM32H743低功耗模式下的PWM输出:用CubeMX配置LPTIM2实现10kHz波形(附示波器实测)
  • OpenClaw多模型切换:Phi-3-mini-128k-instruct与Qwen的对比调用
  • 通义千问1.8B轻量对话模型WebUI部署:5分钟搭建专属AI聊天助手
  • AD转KiCad库文件保姆级教程:从原理图到封装库的完整迁移指南
  • 人工智能时代文字识别新标杆:GLM-OCR核心技术全景解读
  • Anolis OS迁移工具深度测评:CentOS 7用户必须知道的5个隐藏功能
  • FlowState Lab 与经典统计模型(ARIMA, Prophet)的横向对比评测
  • VMware虚拟化环境部署SenseVoice-Small语音识别服务
  • 银河麒麟v10—arm架构redis编译安装教程
  • 零基础玩转OpenClaw:千问3.5-35B-A3B-FP8镜像云端体验指南
  • SPIRAN ART SUMMONER场景应用:打造个人专属的《最终幻想》主题头像
  • 用Python搞定28个疾病语音数据集:从WAV预处理到MFCC特征提取的保姆级教程
  • Qwen3-14B-Int4-AWQ效果集锦:从技术文档到创意写作的多风格文本生成
  • 2026年4月烟台不锈钢抛丸六角棒工厂,大连不锈钢抛丸六角棒哪家好精选实力品牌 - 品牌推荐师
  • 5分钟搞懂阻抗匹配:从L型网络到Smith圆图实战指南
  • GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑韭
  • 告别定位漂移:手把手教你用RTKLIB处理GNSS多路径误差(附代码实战)
  • 2026网络安全实战速通:新手入门→挖洞+打CTF→护网(HW)攻防→企业级就业
  • PHP文件包含漏洞防护避坑指南:从『极客大挑战』一道题看黑名单过滤的失效