SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection)

2023-05-16

弱透视投影 (Weak Perspective Projection)

弱透视投影假设焦距与物距足够大,此时物体在 z z z 轴(光轴)上的变化可以忽略。

SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影

首先,3D 关键点已经位于一个 [ − 1 , 1 ] 3 [-1, 1]^3 [1,1]3 的一个立方体内。且相机位于立方体中心(世界坐标系原点),相机坐标系与世界坐标系完全对齐。如下图所示:
在这里插入图片描述
图1. 初始状态

为了进行弱透视投影,需要将物距增大,按照下式进行增大
t z = 2 × f R e s × s t_z = \frac{2\times f}{Res \times s} tz=Res×s2×f
其中 f f f 是焦距; R e s Res Res 是 crop 并 resize 后图像大小,即输入图片大小,在文中一般设置为 224; s s s 是网络预测得到的 cam 参数中的一个, t x , t y , s = c a m tx, ty, s = cam tx,ty,s=cam t x , t y tx, ty tx,ty 表示关键点应该在 [ − 1 , 1 ] 3 [-1, 1]^3 [1,1]3 立方体内应该偏移的位置, s s s 表示人体在 224 × 224 224 \times 224 224×224 中的比例。可以按照下图来理解 t z t_z tz 的计算公式。
在这里插入图片描述
图2. 物距 t z t_z tz 计算示意图

投影步骤

  1. 对关键点按照 [ t x , t y , t z ] [t_x, t_y, t_z] [tx,ty,tz] 进行平移。
    在这里插入图片描述
  2. 构造相机内参矩阵,对关键点进行变换得到像素坐标。
    在这里插入图片描述
    注意: 从代码来看,与上述过程只有一点不同,代码中 u 0 u_0 u0 v 0 v_0 v0 都设置为了0,这是因为 GT 的 2D joints 已经已 crop 的图像中心为原点,归一化到了 [ 0 , 1 ] [0, 1] [0,1]
def projection(pred_joints, pred_camera):
    pred_cam_t = torch.stack([pred_camera[:, 1],
                              pred_camera[:, 2],
                              2 * 5000. / (224. * pred_camera[:, 0] + 1e-9)], dim=-1)
    batch_size = pred_joints.shape[0]
    camera_center = torch.zeros(batch_size, 2)
    pred_keypoints_2d = perspective_projection(pred_joints,
                                               rotation=torch.eye(3).unsqueeze(0).expand(batch_size, -1, -1).to(pred_joints.device),
                                               translation=pred_cam_t,
                                               focal_length=5000.,
                                               camera_center=camera_center)
    # Normalize keypoints to [-1,1]
    pred_keypoints_2d = pred_keypoints_2d / (224. / 2.)
    return pred_keypoints_2d

def perspective_projection(points, rotation, translation,
                           focal_length, camera_center):
    """
    This function computes the perspective projection of a set of points.
    Input:
        points (bs, N, 3): 3D points
        rotation (bs, 3, 3): Camera rotation
        translation (bs, 3): Camera translation
        focal_length (bs,) or scalar: Focal length
        camera_center (bs, 2): Camera center
    """
    batch_size = points.shape[0]
    K = torch.zeros([batch_size, 3, 3], device=points.device)
    K[:,0,0] = focal_length
    K[:,1,1] = focal_length
    K[:,2,2] = 1.
    K[:,:-1, -1] = camera_center

    # Transform points
    points = torch.einsum('bij,bkj->bki', rotation, points)
    points = points + translation.unsqueeze(1)

    # Apply perspective distortion
    projected_points = points / points[:,:,-1].unsqueeze(-1) # 提前除以 Z_c

    # Apply camera intrinsics
    projected_points = torch.einsum('bij,bkj->bki', K, projected_points)

    return projected_points[:, :, :-1]

参考

  • Beyond Weak Perspective for Monocular 3D Human Pose Estimation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection) 的相关文章

随机推荐

  • 最简单的python 人脸检测

    本篇文章是最基本的人脸检测 xff0c 没有复杂的算法 xff0c 只是简单的运用了这三个库opencv xff0c numpy xff0c pillow 一 开发环境搭建 我们使用Python自带的IDLE进行编程 xff0c 我使用的电
  • FreeRtos 任务优先级和中断优先级

    首先打出这个标题是为了便于搜索 在这里赘述一下 这两者没有关系 只需要明白的是中断优先级高于任务的优先级 在单片机运行的过程中 中断来了就执行中断服务程序 在free rtos中 任务优先级设置的数值越大 任务的优先级越高 Unix任务优先
  • 嵌入式工程师的经典面试题目

    嵌入式工程师的经典面试题目 预处理器 xff08 Preprocessor xff09 1 用预处理指令 define 声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS P
  • rabbitmq版本升级

    目录 一 背景 二 部署新的mq 三 元数据备份和还原 四 消息数据备份和还原 五 注意 一 背景 因原来rabbitmq版本存在漏洞需升级至最新版本 原来是使用软件包部署 xff0c 升级我采用使用docker compose部署 xff
  • __attribute__

    前言 本文介绍 attribute 的使用方法 attribute 介绍 要了解Linux Kernel代码的分段信息 xff0c 需要了解一下gcc的 attribute 的编绎属性 xff0c attribute 主要用于改变所声明或定
  • 卡尔曼滤波(2):一个简单的例子

    为了说明离散性卡尔曼滤波器的用法 xff0c 我将用一个最简单的例子来进行说明 假设我们现在对一个房间内的温度进行测试 xff0c 房间内温度初值为25 c xff0c 每过一个时间周期 xff0c 温度x都将在上一个周期温度的基础上变动
  • 使用websocket连接Activemq,让前端接收MQTT消息

    使用websocket连接Activemq xff0c 让前端接收MQTT消息 Activemq简介准备工作简单示例 Activemq简介 Apache ActiveMQ is the most popular open source mu
  • Unix时间戳,GPS时间戳 ,UTC时间 , 本地时间

    本地时间 xff1a 计算机显示的时间 本地时间 61 UTC 时间 43 时区 xff08 北京时间是东八区 xff0c 也就是 43 8小时 xff09 unix 时间戳 xff1a UTC时间都是从 xff08 1970年01月01日
  • 详解PID控制算法 位置式和增量式区别 附代码详解

    1PID控制算法 什么是PID PID 控制器以各种形式使用超过了 1 世纪 xff0c 广泛应用在机械设备 气动设备 和电子设备 在工业应用中PID及其衍生算法是应用最广泛的算法之一 xff0c 是当之无愧的万能算法 PID 实指 比例
  • 虚拟机中打开Gazebo闪退的解决办法

    问题 xff1a 在vmware虚拟机中打开Gazebo闪退 原因 xff1a 开启了3D加速 xff0c 但分配的显存太小 xff0c 不足1G无法满足Gazebo的最低要求 解决办法如下 xff1a 1 关闭虚拟机 xff0c 在虚拟机
  • mysql插入千万条随机数据

    因为想测试sql在千万级数据下的优化 xff0c 准备在自己的阿里云数据库插入一千万条数据 xff0c 在网上搜了全是些乱七八糟的 xff0c 于是就自己动手 xff0c 同时也希望和大家分享 xff0c 不足之处还请各位指教 一 建表 1
  • linux C/C++ socket编程

    文章目录 前言linux socket api介绍简单客户端例子简单的服务端上述程序的问题epoll 前言 我们都知道socket编程实际上是使用tcp或者udp协议进行消息传输 xff0c 所以我们要更为的了解tcp udp协议 tcp三
  • 实现loading加载效果带百分比进度

    html lt div class 61 34 d loading 34 id 61 34 loading 34 gt lt div class 61 34 d loadVpic 34 gt lt div class 61 34 d opc
  • 什么是事件流?

    一 事件流的定义 页面触发一个事件时 xff0c 会按照一定的顺序来响应事件 xff0c 事件的响应过程为事件流 就我个人理解就是网页对点击事件的排序顺序就是事件流 二 事件流的分类 1 冒泡型的事件流 xff08 任何一款浏览器都支持 x
  • prometheus 学习(1)

    prometheus 配置文档 github地址 https github com prometheus prometheus blob master docs configuration configuration md 标签学习 glo
  • ROS订阅最新的消息及queue_size和buff_size的理解

    机器人应用中难免会遇到运算起来很费时间的操作 xff0c 比如图像的特征提取 点云的匹配等等 有时候 xff0c 不可避免地 xff0c 我们需要在ROS的Subscriber的Callback回调函数中进行这些费时的操作 Subscrib
  • NUC980第一篇:开发环境的搭建以及官方源码编译

    序言 之前参加了一个rtthread举办的活动 xff0c 拿到了一个新塘的NK IOT的板子 于是 xff0c 打算研究一下 xff0c 跑一跑linux 官方buildroot编译 下载地址 xff1a https gitee com
  • Linux系统安装Anaconda

    本文软件信息 xff1a 系统 xff1a RHEL8软件 xff1a Anaconda3 2022 10 Linux x86 64 sh Linux安装Anaconda的步骤都一样 xff0c 没啥差别 下载Anaconda的安装包 在官
  • apt-get vs aptitude

    apt get T 软件包管理工具 参数 h 帮助文件 q 输出到日志 无进展指示 qq 不输出信息 xff0c 错误除外 d 仅下载 不安装或解压归档文件 s 不实际安装 模拟执行命令 y 在需要确认的场景中回应 yes f 尝试修正系统
  • SPIN、VIBE 等 3D Human Pose Estimation 方法中的弱透视投影 (Weak Perspective Projection)

    弱透视投影 Weak Perspective Projection 弱透视投影假设焦距与物距足够大 xff0c 此时物体在 z z z 轴 光轴 上的变化可以忽略 SPIN VIBE 等 3D Human Pose Estimation 方