使用新的计算机视觉技术学习姿态估计

介绍

在图像或视频序列中找到并跟踪重要身体关节或关键点的位置是姿态检测的任务,通常称为姿态估计或关键点检测。它旨在理解和描述场景中人或其他物品的定位和空间排列。姿态检测在各个领域具有重要作用,包括机器人技术和自动化、游戏、安全和监控、以及体育和健身监测。它通过提供有关人类动作和空间关系的见解信息,使得各种涉及人机交互、分析、动画、医疗保健、安全和机器人技术的应用成为可能。

在本文中,我们将使用新的计算机视觉技术研究一些令人兴奋的姿态检测算法。作为初学者,我们将了解如何在实际环境中使用它们。这些算法包括:

  • OpenPose
  • PoseNet
  • MoveNet

我们还将研究谷歌最近贡献的两种利用MobileNet V2架构的新算法。这两个算法分别是MoveNet Lightning和MoveNet Thunder。

学习目标

  • 基础知识:了解姿态估计的概念及其对计算机视觉的重要性。
  • 关键点检测的理解:熟悉关键点检测方法,包括在图像或视频中定位特定身体部件或关键点。
  • 关键点关联和跟踪:学习如何通过使用关键点关联和跟踪来跟踪关键点并将它们与帧关联起来,从而估计一个人的连续姿态。认识在此过程中的困难和方法。
  • 数据预处理:通过使用注释数据集训练姿态估计模型来开发建模技能。确定涉及收集和标记训练数据、选择合适的损失函数以及提高模型性能的步骤。
  • 应用和集成:了解计算机视觉中姿态估计在增强现实、手势识别、人机交互以及人类动作识别等领域的不同应用方式。

本文是数据科学博客马拉松的一部分。

模型的结构

1. OpenPose

OpenPose姿态检测模型具有复杂的结构,由多个阶段和部分组成。为了在图像或视频中找到和估计多个人的关键点,使用了一个多阶段的管道。该模型首先检查输入图像,并努力理解其特征。该模型将这些特征映射到表示图像的各个方面,包括形状、颜色和纹理。在随后的阶段中,该模型着眼于理解不同身体部位之间的联系。

它产生了另一组地图,说明了不同身体部位之间的潜在联系,例如手腕和肘之间的连接或肩膀和臀部之间的连接。为了确定每个人的真实姿态,该模型采用算法来解读连接地图。它分析地图以建立身体部件之间的关系,并建立每个姿态的全面骨骼模型。

这些步骤使得OpenPose模型能够以精确和高效的方式实时检测和跟踪多个人的姿态。

2. PoseNet

卷积神经网络(CNN)是PoseNet姿态检测模型设计的基础。为了提取有用信息,它将输入图像通过多层卷积处理。这些卷积层有助于捕捉图像的各种模式和结构。PoseNet使用的单人姿态估计方法专注于估计单个人的姿态关键点。CNN架构可以直接回归身体关键点的2D坐标。这意味着模型在训练过程中能够预测手腕、肘部、膝盖和踝关节等身体关节的X和Y坐标。

由于PoseNet架构的简单性,姿态估计快速简便,非常适合具有受限处理资源的应用,如Web浏览器或智能手机。它为确定图像或视频中一个人的姿态提供了快速简单的方法。

3. MoveNet

MoveNet姿势检测模型的架构也是使用深度卷积神经网络(CNN)构建的。它采用了一种移动友好的设计,经过优化,可以在嵌入式系统和其他资源有限的设备上操作。MoveNet使用单人姿势估计方法,旨在估计人的姿势关键点。它从简单的骨干网络开始,然后转向关键点关联和关键点检测阶段。骨干网络处理输入图像,隔离出重要的特征。关键点关联步骤通过考虑它们的依赖性和地理关系来进一步细化关键点。关键点检测阶段预测身体关键点的置信度评级和精确位置。

MoveNet设计平衡了效率和精度,使其适合于具有受限计算能力的设备上进行实时姿势估计。在许多应用中,例如健身追踪、增强现实和手势交互,它提供了一种实用的方法来识别和跟踪人类位置。

姿势检测中的闪电和雷电

作为MoveNet模型系列的专业版本,Google创建了闪电和雷电姿势检测模型。2021年,闪电团队推出了特别设计的闪电版本,用于快速姿势估计。它非常适合具有严格延迟限制的应用程序,因为它利用模型压缩技术和架构升级来减少计算要求并实现极快的推理时间。另一方面,2022年发布的雷电则聚焦于多人姿势估计。它增加了MoveNet在现场情况下精确识别和跟踪多个人位置的能力。

闪电和雷电模型都通过提供精确的姿势估计区别于竞争方法,并且适用于特定用例:闪电用于极快的推理和通用设备支持,雷电用于改善准确性和性能。这些模型展示了Google致力于开发姿势检测技术以满足一系列应用需求的承诺。

实施姿势检测

为了在图像上使用MoveNet闪电模型进行姿势检测,我们需要遵循一些程序。首先确保您已安装必要的软件库和依赖项。 TensorFlow和PyTorch是两个广泛使用的深度学习框架的例子。然后,加载MoveNet Lightning模型权重,通常以预训练格式提供。加载模型后,通过将其缩放到适当的输入大小并应用任何必要的规范化来预处理输入图像。提供预处理图像后,使用前向推理来获取结果。各种身体区域的预测关键点,通常显示为(x,y)坐标,将组成输出。

最后,在关键点上执行任何必要的后处理,例如链接关键点以创建骨架表示或应用置信度标准。这个后处理阶段可以提高姿势估计的结果。通过使用MoveNet Lightning模型对图像进行姿势检测,您可以通过以下步骤估计和分析图像中人的姿势。

检测说明

此处提供了关于输入图像姿势检测的详细说明。

让我们开始构建一个MoveNet闪电模型来在视频数据上实现实时姿势检测。

首先,导入必要的库。

import tensorflow as tf
import numpy as np
from matplotlib import pyplot as plt
import cv2

然后是最重要的一步,加载我们的MoveNet Lightning单人姿势模型。这里的单姿势描述了模型将仅检测一个人的姿势,而其另一个版本称为多姿势,在一个帧中检测多人的姿势。

interpreter = tf.lite.Interpreter(model_path='lite-model_movenet_singlepose_lightning_3.tflite')
interpreter.allocate_tensors()

模型的关键点

您可以从TensorFlow Hub下载此模型。现在,我们将定义模型的关键点。关键点是人体上独特的区域或地标,在动作检测模型(如MoveNet)的背景下被识别和监测。这些关键点代表重要的关节和身体部位,使我们能够全面理解身体姿势。腕部,肘部,肩部,臀部,膝盖和踝关节通常是使用的关键点,除此之外头部,眼睛,鼻子和耳朵也是。

EDGES = {
    (0, 1): 'm',
    (0, 2): 'c',
    (1, 3): 'm',
    (2, 4): 'c',
    (0, 5): 'm',
    (0, 6): 'c',
    (5, 7): 'm',
    (7, 9): 'm',
    (6, 8): 'c',
    (8, 10): 'c',
    (5, 6): 'y',
    (5, 11): 'm',
    (6, 12): 'c',
    (11, 12): 'y',
    (11, 13): 'm',
    (13, 15): 'm',
    (12, 14): 'c',
    (14, 16): 'c'
}

#绘制关键点的函数
def draw_keypoints(frame, keypoints, confidence_threshold):
    y, x, c = frame.shape
    shaped = np.squeeze(np.multiply(keypoints, [y,x,1]))
    
    for kp in shaped:
        ky, kx, kp_conf = kp
        if kp_conf > confidence_threshold:
            cv2.circle(frame, (int(kx), int(ky)), 4, (0,255,0), -1) 

上述关键点的字典如下,

nose:0, left_eye:1, right_eye:2, left_ear:3, right_ear:4, left_shoulder:5, right_shoulder:6, left_elbow:7,  right_elbow:8, left_wrist:9, right_wrist:10, left_hip:11, right_hip:12, left_knee:13, right_knee:14, left_ankle:  15, right_ankle:16

在绘制连接后,让我们看看如何通过OpenCV库捕获视频。

cap = cv2.VideoCapture(0)
while cap.isOpened():
    ret, frame = cap.read()
    
    cv2.imshow(frame)

cv2.VideoCapture是OpenCV的一个重要功能,用于读取输入视频。在此情况下,0指定从笔记本电脑的主相机捕获视频,而1用于使用外部网络摄像头的人。要使用自定义输入视频,只需将图像路径括在引号中。

在计算机视觉中估算姿势时,填充、帧处理和调整大小非常重要。它提供了以下功能:

  • 通过调整帧大小,使输入图片或视频帧符合模型的预期大小。
  • 通过添加填充来解决原始帧尺寸小于模型所需输入大小的情况。添加填充可将帧放大以适应所需的输入大小,确保无论输入大小如何都能进行统一处理。

详细的代码请参阅此处。

结论

那么,我们从本文中学到了什么?让我们从本文中学习一些重要的要点。

  • 研究视角:姿势估计是一个高度研究的主题,每天都会出现新的发展和困难。您可以通过研究新的计算机视觉算法、改进现有技术或解决特定的姿势估计相关问题来推进这个领域。
  • 意义:姿势估计在人机交互中显著地促进了更自然、更直观的交互。通过本文的帮助,您可以利用自己的专业知识构建和创建能够对物理手势、姿势或身体运动做出反应的交互式系统。
  • 学术项目:姿势估计是一个非常适合学术项目的主题,无论是独立完成还是合作完成。姿势估计相关的挑战、数据集或应用程序都可以被探索,您可以创建一个展示您理解和实际应用能力的项目。
  • 广泛的应用领域:姿势估计在各个领域都有广泛的应用,包括运动、医学、监视、动画和娱乐产业。

MoveNet姿态检测模型是一种强大的方法,可在实时应用中精确预测人体姿势,尤其是其增强形式MoveNet Lightning。这些模型可以使用深度卷积神经网络检测和跟踪准确表示不同身体部位的关键点。由于其简单性和高效性,它们非常适合部署在资源有限的设备上,例如移动电话和嵌入式系统。MoveNet模型为各种应用提供了灵活的解决方案,包括健身追踪、增强现实、基于手势的交互和人群分析。它们可以处理单人和多人姿势估计。它们在姿势识别领域做出了重大贡献,展示了计算机视觉技术的发展以及改善人机交互和运动理解的承诺。

常见问题

本文中显示的媒体不归Analytics Vidhya所有,仅由作者自行决定使用。