千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > MPII数据集:从图像到姿态估计

MPII数据集:从图像到姿态估计

来源:千锋教育
发布人:xqq
时间: 2023-11-24 22:54:57 1700837697

一、MPII数据集

MPII人体姿态数据集是一个常用的用于人体姿态估计和关键点检测的数据集,其中包含大量的人体姿态标注数据和图像数据。该数据集由德国马克斯·普朗克研究所计算机视觉小组提供。

该数据集包含超过25k个图像和对应的人体姿态标注。每个标注包括13个关键点(7个在躯干部分和6个在四肢),每个关键点包括一个坐标。此外,还提供了16个关键部位的二维边界框标注和6个关键部位的三维坐标。

二、Mpi数据

在MPI数据中,提供了训练和测试数据,并且还将训练数据分成了训练集、验证集和测试集。其中,训练集包括24985个图像和相应的注释,验证集包含2958个图像和相应的注释,测试集包括28678个图像和相应的注释。

该数据集提供了多种类型的注释,包括关节位置的二维坐标、关节位置的三维坐标、姿态角度和人体部件的细粒度标注。此外,还提供了图像前背景遮挡的标注、不同图像的相对深度和交互行为的标注。

三、MPII数据集图片选取

1、标注样例

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制姿态估计的关键点位置。


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

下面是代码运行的结果显示的图片,其中红色点表示姿态估计的关键点。

2、二维边界框标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制二维边界框标注。


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载边框密集区域注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['image'])
plt.imshow(img)

# 在图像上绘制边框
x1, y1, x2, y2 = data['objpos'] - data['bbox'][[1, 0, 3, 2]]
plt.gca().add_patch(plt.Rectangle((x1, y1), x2 - x1, y2 - y1, edgecolor='c', fill=False, linewidth=3))

下面是代码运行的结果显示的图片,其中蓝色矩形表示二维边界框标注。

3、三维坐标标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制三维坐标标注。


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载三维坐标注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
image_path = os.path.join(db.img_dir, data['image'])
img = db.load_image(image_path)

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 在图像上绘制关键点位置
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 获取每个关键点的三维坐标
joints_xyz = db.get_joints_xyz(joints_3d, image_path)

# 将三维坐标绘制成点云图
fig = plt.figure()
ax = Axes3D(fig)
ax.set_xlim3d([-1, 1])
ax.set_ylim3d([-1, 1])
ax.set_zlim3d([-1, 1])
ax.scatter(joints_xyz[:, 0], joints_xyz[:, 1], joints_xyz[:, 2], s=20, marker='o')

下面是代码运行的结果显示的图片,其中红色点表示三维坐标标注,蓝色点表示绘制的三维点云图。

4、姿态角度标注

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制姿态角度标注。


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载姿态注释
anno_file = 'mpii_human_pose_v1_u12_2/train/joint_data.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['image'])

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 绘制在图像上
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 获取每个关键点的姿态角度
theta = db.get_theta(data)

# 在图像旁边绘制姿态角度的文本说明
for i, t in enumerate(theta):
    plt.text(img.shape[1] + 10, 20 + i * 20, "{}: {:.2f}".format(db.joint_names[i], t))

下面是代码运行的结果显示的图片,其中红色点表示姿态角度标注,红色字表示姿态角度的文本说明。

5、人体部件细粒度注释

在下面的代码中,我们将加载一个MPII数据集的图像,并在图像上绘制人体部件细粒度注释。


import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('000001.png')
plt.imshow(img)

# 加载人体部件细粒度注释
anno_file = 'mpii_human_pose_v1_u12_2/train/mpii_human_pose_v1_u12_1.mat'
db = Mpii(anno_file)
data = db[0]
img = db.load_image(data['filename'])

# 获取在图像中对应的关键点位置
joints_3d = data['joints_3d']
joints_2d = data['joints']

# 绘制在图像上
for joint_id in range(16):
    plt.scatter(joints_2d[joint_id, 0], joints_2d[joint_id, 1], s=100, marker='.', color='r')

# 在图像旁边绘制人体部件的标签
for label_id, label_name in enumerate(db.body_part_names):
    center = db.get_body_part_center(data, label_id)
    plt.text(img.shape[1] + 10, 20 + label_id * 20, "{}: ({:.0f}, {:.0f})".format(label_name, center[0], center[1]))

下面是代码运行的结果显示的图片,其中红色点表示人体部件细粒度注释,红色字表示人体部件的标签。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT