开启辅助访问
 找回密码
 立即注册

NTU-RGB+D 人体骨骼数据集解读

lTbOsUfm 回答数10 浏览数1009
人体动作数据集概述

该数据集分为有两个版本,"NTU RGB+D" 和 "NTU RGB+D 120".
"NTU RGB+D" 包含56,880个样本数据,60种动作。
"NTU RGB+D 120" 这个版本是上一台版本的补充版,涵盖之前的所有数据,并增加了额外的60个类别,总的样本数目为114,480。
这两个数据集都包含每个样本的 RGB 视频、深度图序列、3D 骨骼数据和红外 (IR) 视频。 每个数据集由三个 Kinect V2 摄像头同时捕获。
RGB 视频的分辨率为 1920x1080,深度图和 IR 视频均为 512x424,3D 骨骼数据包含每帧 25 个身体关节的 3D 坐标。
官网下载地址:
GitHub下载地址:
Paper:
下载并解压之后的文件如下,两个数据集中的每个文件/文件夹名称都采用 SsssCcccPpppRrrrAaaa 格式(例如,S001C002P003R002A013),其中 sss 是设置编号(相机设置的角度),ccc 是相机 ID,ppp 是动作执行者(人物)ID,rrr 是动作重复次数(重复1 或 2次),aaa 是动作类标签。

解压之后的NTU-RGB+D-skeletons 数据

其中需要注意的是,数据里有骨骼缺失的样本,“NTU RGB+D”数据集中的 302 个样本和“NTU RGB+D 120”数据集中的 535 个样本有缺失或不完整的骨架数据。 如果您正在进行基于骨架的分析,请在训练和测试过程中忽略这些文件。
此处提供了“NTU RGB+D”数据集中这些样本的列表。
此处提供了“NTU RGB+D 120”数据集中这些样本的列表。
skeleton文件转 txt文件的python脚本可以在这里下载。
skeleton文件转 txt文件的matlab脚本可以在这里下载。
样本数据分析



第一行:该动作的帧数为103
第二行:该动作里面含有的人的数目
第三行:'bodyID', 'clipedEdges', 'handLeftConfidence','handLeftState', 'handRightConfidence', 'handRightState','isResticted', 'leanX', 'leanY', 'trackingState' 这些内容在matlab代码内可以发现。

matlab code 来自官网数据处理样本代码

第四行:关节的个数
第5~29行:每行有11个参数,每个参数表示的意义如下(参考)。一般只考虑人体骨骼的话,就只需要前三个值就行了。

数据可视化

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
class Viewer(object):
    def __init__(self, data,  J1=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25],
J2=[2, 21, 21, 3, 21, 5, 6, 7, 21, 9, 10, 11, 1, 13, 14, 15, 1, 17, 18, 19, 23, 8, 25, 12]) -> None:
        super().__init__()
        self.data = data
        self.J1 = J1
        self.J2 = J2
        
    def draw_animation(self):
        prmd = self.data

        x = prmd[:,:,0]
        y = prmd[:,:,1]
        z = prmd[:,:,2]

        print(x.shape, np.min(x))

        fig = plt.figure(tight_layout=True)
        # o = [2,0,1]
        o = [2,0,1]

        def update_points_lines(num):
            # Remove the previous frame
            ax.cla()
            # set x,y,z limits
            ax.set_xlim(np.min(z), np.max(z))
            ax.set_ylim(np.min(x), np.max(x))
            ax.set_zlim(np.min(y), np.max(y))

            # load data
            df = prmd[num]

            # draw points
            ax.scatter3D(df[:, o[0]], df[:, o[1]], df[:, o[2]], cmap='Greens', linewidth=0.2)

            # draw line
            line = [[] for _ in range(len(self.J1))]
            for j in range(len(self.J1)):
                point1 = df[self.J1[j]-1]
                point2 = df[self.J2[j]-1]
                line[j] = ax.plot3D([point1[o[0]],point2[o[0]]],[point1[o[1]],point2[o[1]]],[point1[o[2]],point2[o[2]]], 'gray')
            return line



        df = prmd[0]
        ax = plt.axes(projection='3d')
        point_ani = ax.scatter3D(df[:, o[0]], df[:, o[1]], df[:, o[2]], cmap='Greens', linewidth=0.2)
        line = [[] for _ in range(len(self.J1))]
        for j in range(len(self.J1)):
                point1 = df[self.J1[j]-1]
                point2 = df[self.J2[j]-1]
                line[j] = ax.plot3D([point1[o[0]],point2[o[0]]],[point1[o[1]],point2[o[1]]],[point1[o[2]],point2[o[2]]], 'gray')   

        ani = animation.FuncAnimation(fig, update_points_lines, range(1, len(prmd)), interval=100, blit=False)
        plt.show()


测试数据要求:(frames, joints, 3d)
使用道具 举报
| 来自广东
特码由我开 | 来自北京
skeleton文件转 txt文件的python脚本可以在这里下载。
文中指出的这个代码不是将txt转成numpy的npy文件格式吗,并不是将skeleton文件转 txt文件。
回复
使用道具 举报
52330 | 来自北京
请问下cameraX和cameraY的坐标数据还能大概猜到,但是Z的数据是怎么归一化啊?
回复
使用道具 举报
11022219870404 | 来自北京
对的skeleton转npy文件,不过转npy文件适合python处理,也可以修改一下里面的代码直接转成txt。
回复
使用道具 举报
senmao | 未知
归一化,原格式(N, C, T, V, M) 转换成(N, M, V, C, T)然后再改shape(NM, VC, T ), 之后对这个数据进行batch normalization就行了,主要是对每个关节的x,y,z进行normalization。
回复
使用道具 举报
zhangyu8_0000 | 来自北京
NM,VC,T就分别是x y z的坐标吗
回复
使用道具 举报
碧海蓝 | 来自吉林
N是batch size, M是member的个数是2,V是vertices就是joints的个数,T是temporal的个数在该数据集是300,C是dimension为3。假设batch size为5, 那么(NM, VC, T)就是(10,75,300),对这个形状的数据集进行batch normalization。建议看一下源代码
回复
使用道具 举报
呵气成冰 | 未知
哦哦,我直接用的处理成st gcn可是用的格式,最后一纬直接就是x y z的坐标
回复
使用道具 举报
bevd4252 | 来自北京
请问“skeleton文件转 txt文件的python脚本可以在这里下载。”这个py文件里面的深度坐标和RGB坐标的顺序是不是反了?代码里面第4-第5列是深度坐标,第6-第7列是RGB,但是跟您截取的“第5~29行:每行有11个参数,每个参数表示的意义如下(参考)。一般只考虑人体骨骼的话,就只需要前三个值就行了。”是相反的
回复
使用道具 举报
bgby789 | 来自北京
回复
使用道具 举报
12下一页
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影