NTU-RGBD数据集下载及数据格式解析

本文提供了NTU-RGBD数据集的下载链接,并详细解析了数据格式,包括相机设置、人物ID、动作重复次数和动作标签等信息。此外,还提到了数据集中存在部分样本缺失骨骼数据的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<think>首先,用户的问题是:“我想了解如何制作2s-AGCN数据集请问2s-AGCNdataset如何构建和制作”。这是一个关于2s-AGCN数据集的构建和制作的问题。2s-AGCN指的是Two-Stream AdaptiveGraph ConvolutionalNetwork,通常用于动作识别任务,比如基于骨骼点的动作识别。 在我的知识库中,2s-AGCN是ST-GCN(SpatialTemporal GraphConvolutional Network)的改进版,用于处理骨骼数据。用户提到的“2s-AGCN dataset”可能指的是用于训练这个模型的数据集,通常涉及骨骼关键点数据。 从用户提供的引用中:-引用[1]是关于用户-物品交互和GNN的,与动作识别无关。 -引用[2]提到了3D零件分割、FCN、CRF等,与骨骼动作识别有些相关,但不是直接关于2s-AGCN。引用[2]中提到了“Kalogerakis等人[249]将FCN与基于表面的CRF组合,实现端到端的3D零件分割”,这涉及到3D数据处理,但用户的问题是具体关于2s-AGCN数据集的构建。2s-AGCN通常使用NTURGB+D或Kinetics数据集,这些数据集包含RGB视频、深度图和骨骼关键点。用户说“请尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,这是第一次交互,所以没有上一次的问题。我需要基于当前问题回答。关键点: -2s-AGCN数据集:通常指的是用于训练2s-AGCN模型的数据集,如NTU RGB+D60或120数据集-构建和制作:用户可能想知道如何准备这样的数据集,包括数据采集、预处理等。 标准流程: 1. **数据采集**:使用传感器(如Kinect)捕获RGB视频、深度图、红外图和骨骼关键点。2.**数据预处理**:-提取骨骼关键点:使用OpenPose或其他工具从视频中提取2D或3D骨骼点。-对于NTU数据集,骨骼点已经提供。3.**数据集格式**:通常包括骨骼序列文件(如.npy或.mat文件),包含关节坐标、时间序列。4.**构建图结构**:在2s-AGCN中,骨骼点被建模为图,其中关节是节点,骨骼是边。 5. **训练/测试划分**:按照标准划分(如cross-subject或cross-view)。对于“制作”数据集,用户可能想自己创建自定义数据集。所以,我需要指导如何从头构建。 回答结构:-根据系统指令,使用中文回答。 -结构清晰:逐步解释。 -使用LaTeX格式:行内数学表达式用$...$,独立公式用$$...$$。-生成相关问题:在末尾添加相关问题。-添加引用标识:如果引用内容,在末尾添加[^n]。可能的引用:-原始论文:Shiet al., "Two-Stream AdaptiveGraph ConvolutionalNetworksfor Skeleton-BasedAction Recognition", CVPR2019. -数据集NTU RGB+D,Kinetics-Skeleton.由于用户提供了引用,但它们是无关的,我应该忽略它们,除非相关。引用[2]提到3D数据处理,但不是很直接。最好基于一般知识回答。 步骤: 1. **理解2s-AGCN**:简要介绍。2.**数据集来源**:常见数据集。 3. **自定义数据集构建**:-数据收集:录制视频。-关键点提取:使用工具如OpenPose。-数据格式:组织为序列。-图构建:定义关节图。-预处理:归一化、填充等。4.**工具和代码**:提到相关库。生成相关问题: -例如:如何提取骨骼关键点?2s-AGCN的模型结构是什么?确保回答真实可靠:基于标准实践。</think>### 2s-AGCN数据集的构建与制作 2s-AGCN(Two-Stream Adaptive Graph Convolutional Network)是一种用于骨骼点动作识别的深度学习模型,常用于视频动作识别任务(如NTU RGB+D数据集)。构建其数据集涉及骨骼关键点数据的采集、预处理和图结构组织。以下是逐步指南,帮助您理解如何制作自定义2s-AGCN数据集。整个过程基于标准实践,参考了相关论文和开源实现[^1]。 #### 1. **理解2s-AGCN数据集的核心要素** - 2s-AGCN数据集通常包含骨骼关键点序列(joint coordinates),每个序列表示一个动作实例。 - 数据以图结构组织:关节(joints)作为节点,骨骼(bones)作为边。模型使用两个“流”(stream): - **关节流(Joint Stream)**:处理关节位置数据。 - **骨骼流(Bone Stream)**:处理骨骼向量数据(关节间的位移向量)。 - 数据集格式:常见为NumPy数组(.npy)或MATLAB文件(.mat),包含时间序列数据。每个样本的维度为$T \times V \times C$,其中: - $T$:时间帧数(序列长度)。 - $V$:关节数量(例如,25个关节)。 - $C$:坐标维度(2D或3D,如$x, y, z$)。 - 参考数据集NTU RGB+D 60或120是基准数据集,包含超过56,000个动作样本[^1]。如果您构建自定义数据集,需模拟其结构。 #### 2. **数据采集:获取原始骨骼关键点** - **来源选择**: - 使用传感器设备:如Microsoft Kinect或Intel RealSense,捕获RGB-D视频并实时提取3D骨骼点。 - 从现有视频提取:对普通RGB视频,使用开源工具(如OpenPose或MMPose)生成2D或3D骨骼关键点。 - 例如,OpenPose可输出JSON文件,包含每帧的关节坐标。 - 公开数据集:如果基于现有数据(如Kinetics-Skeleton),可直接下载预处理好的骨骼序列。 - **自定义录制**: - 录制视频:确保覆盖目标动作类别(如“走路”、“挥手”),每个动作由多个受试者执行,以增加多样性。 - 关键点提取:运行工具处理视频。例如: ```bash # 使用OpenPose提取骨骼关键点 ./build/examples/openpose/openpose.bin --video input_video.mp4 --write_json output_dir/ ``` 输出为每帧的JSON文件,包含关节坐标(如$ (x, y, \text{confidence}) $)。 #### 3. **数据预处理:准备骨骼序列** 预处理确保数据兼容2s-AGCN的输入要求。关键步骤包括: - **序列对齐和填充**: - 动作序列长度可能不同。使用填充(padding)或截断(truncation)使所有序列长度一致(例如$T=300$帧)。 - 对齐方法:基于时间插值或动态时间规整(DTW)。 - **坐标归一化**: - 将关节坐标归一化到$[-1, 1]$范围,以消除尺度差异。公式为: $$ x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}} \times 2 - 1 $$ 其中$x$是原始坐标,$x_{\min}$和$x_{\max}$是序列中的最小和最大值。 - **构建骨骼流数据**: - 从关节坐标计算骨骼向量。对于每个关节$i$和其父关节$j$,骨骼向量为: $$ \mathbf{v}_{ij} = \mathbf{p}_j - \mathbf{p}_i $$ 其中$\mathbf{p}_i$是关节$i$的坐标。 - 存储为独立数据流,维度与关节流相同。 - **数据增强**: - 提升模型鲁棒性:应用随机旋转、缩放或时间扭曲(time warping)。 - 例如,对3D坐标添加高斯噪声$ \mathcal{N}(0, 0.1) $。 #### 4. **数据集组织与图结构定义** - **文件格式**: - 保存为NumPy数组:一个文件存储所有样本(如`train_data.npy`),形状为$N \times T \times V \times C$,其中$N$是样本数。 - 配套标签文件:如`train_label.pkl`(使用Pickle存储),包含动作类别标签。 - **图结构构建**: - 定义关节图:基于人体拓扑(如OpenPose的25关节模型)。邻接矩阵$A$表示关节连接: $$ A_{ij} = \begin{cases} 1 & \text{if joint } i \text{ and } j \text{ are connected} \\ 0 & \text{otherwise} \end{cases} $$ - 在2s-AGCN中,邻接矩阵是自适应的,训练时动态学习,但初始图需预先定义。 - **数据集划分**: - 标准划分:训练集(70%)、验证集(10%)、测试集(20%),确保受试者或视角不重叠(cross-subject或cross-view)。 - 示例目录结构: ``` /custom_dataset/ ├── train_data.npy ├── train_label.npy ├── val_data.npy ├── val_label.npy └── graph.pkl # 存储初始邻接矩阵 ``` #### 5. **工具和代码实现** - **关键工具**: - OpenPose(骨骼提取):[GitHub链接](https://github.com/CMU-Perceptual-Computing-Lab/openpose) - Python库:NumPy、OpenCV、SciPy用于数据处理。 - 2s-AGCN官方代码:[GitHub仓库](https://github.com/lshiwjx/2s-AGCN),提供数据加载器示例。 - **完整流程代码示例**: ```python import numpy as np import json import os from scipy.interpolate import interp1d # Step 1: 从JSON文件加载骨骼关键点(假设每个视频对应一个JSON序列) def load_keypoints(json_dir): frames = sorted(os.listdir(json_dir)) keypoints_list = [] for frame in frames: with open(os.path.join(json_dir, frame), 'r') as f: data = json.load(f) # 提取25个关节的(x,y,z)坐标 keypoints = np.array(data['people'][0]['pose_keypoints_3d']).reshape(-1, 3) keypoints_list.append(keypoints) return np.array(keypoints_list) # 形状: T x V x C # Step 2: 预处理(归一化和填充) def preprocess_data(sequence, max_frames=300): T, V, C = sequence.shape # 归一化 min_val = np.min(sequence, axis=(0, 1)) max_val = np.max(sequence, axis=(0, 1)) sequence_norm = 2 * (sequence - min_val) / (max_val - min_val) - 1 # 填充到固定长度 if T < max_frames: padded_seq = np.pad(sequence_norm, ((0, max_frames - T), (0, 0), (0, 0)), 'constant') else: padded_seq = sequence_norm[:max_frames] return padded_seq # Step 3: 构建骨骼流数据 def create_bone_stream(joint_stream): bone_stream = np.zeros_like(joint_stream) # 假设关节0是根节点(如臀部),定义父子关系 parent_indices = [0, 1, 2, 0, 4, 5, 0, 7, 8, 9, 8, 11, 12, 8, 14, 15] # 示例OpenPose拓扑 for t in range(joint_stream.shape[0]): for v in range(1, joint_stream.shape[1]): parent = parent_indices[v] bone_stream[t, v] = joint_stream[t, v] - joint_stream[t, parent] return bone_stream # 主流程:处理所有视频 all_joint_data = [] all_bone_data = [] for video_dir in video_dirs: joint_seq = load_keypoints(video_dir) joint_seq_processed = preprocess_data(joint_seq) bone_seq = create_bone_stream(joint_seq_processed) all_joint_data.append(joint_seq_processed) all_bone_data.append(bone_seq) # 保存数据集 np.save('joint_data.npy', np.array(all_joint_data)) np.save('bone_data.npy', np.array(all_bone_data)) ``` #### 注意事项 - **数据质量**:确保骨骼关键点准确(高置信度点),否则影响模型性能。可过滤低置信度帧。 - **计算资源**:骨骼提取可能需GPU加速(OpenPose在GPU上运行更快)。 - **基准参考**:在NTU数据集上,2s-AGCN的准确率约88%,自定义数据集应包含类似多样性和规模[^1]。 - **伦理考虑**:如果涉及人体数据,需遵守隐私法规(如GDPR),匿名化处理。 ### 相关问题 1. 如何优化骨骼关键点提取的精度(例如使用OpenPose的参数调整)? 2. 2s-AGCN的模型结构和训练流程是怎样的? 3. 在自定义数据集中,如何处理数据不平衡问题(如某些动作样本过少)? 4. 与3D点云分割(如引用[2]中提到的VoxSegNet)相比,骨骼动作识别数据有何异同? [^1]: Shi et al., "Two-Stream Adaptive Graph Convolutional Networks for Skeleton-Based Action Recognition", CVPR 2019. [^2]: Kalogerakis et al., "3D Object Part Segmentation Using Multi-view Consistency", CVPR 2017.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值