SGANPose | 自对抗人体姿态估计网络

Self Adversarial Training for Human Pose Estimation

论文地址:https://arxiv.org/pdf/1707.02439.pdf

代码地址:https://github.com/roytseng-tw/adversarial-pose-pytorch

   1.背景分析

由于人体的遮挡和拥挤等现象,现有的人体姿态估计网络很难解决此类情况下的准确估计,且此类现象会导致网络估计的关键点不符合正常的人体姿态,失去了人体固有的形态。比如下图中第二行图片所示,相较于第一行,很显然有部分关节是违背事实的。作者希望即使在拥挤状态下,网络预测得到关键点也能够符合关节所固有结构。基于此作者提出使用生成对抗的方式来解决这个问题。

   2.自对抗网络结构

与传统的GAN模型类似,本文的模型分为两个网络,生成器和鉴别器。第一个网络生成器是一个卷积网络,生成器经过前向计算,得到一组热图,它指示每个关键点的每个位置的置信度得分。第二个网络鉴别器,具有与生成器相同的架构,但它将热图与RGB图像一起编码输入,并将其解码为一组新的热图,以便区分真实的热图和虚假的热图。本文提出的自对抗网络结果如下图所示。在最终做关键点前向推理时,会将鉴别器从整体的结果中剔除。自对抗人体姿态估计网络最终能够将对抗生成网络应用到人体关键点估计任务中,在不增加模型推理时间的前提下,有效提升任何现有姿态估计模型的性能。

   3.生成器

生成器主要的作用是生成准确的人体关键点信息。当然作为生成对抗中的一环,生成器最主要的功能就是能够让生成的关键点欺骗最终的鉴别器,使得鉴别器无法区分当前关键点热图是GT还是生成器生成的。因此,如下图所示,训练生成器时,其通过两部分进行优化,分别为反向传播来自生成器的损耗Lmse和来自鉴别器的对抗损耗Ladv。

整体的loss如下所示,公式1的损失Lmse目的是使得生成器最终生成的人体关键点能够更加接近标签。公式2的对抗性损失Ladv,该对抗损失的目的是使得生成器最终生成的关键点符合更加合理的姿态。更直接的说,Ladv的目的是使得生成器生成的虚假热度图能够尽可能的糊弄鉴别器,使其无法区分GT热图和虚假热图。生成对抗的过程就体现在这里。最终利用公式3所示的损失来优化生成器。其中lamda是一个超参数。

   4.鉴别器

鉴别器的目标是区分输入进来的热图是GT还是生成器生成的虚假热图。鉴别器最终的训练目标就是能够把生成器生成的数据尽可能和GT区分出来。从而和生成器形成一个对抗博弈的过程。因此,如下图所示,训练鉴别器时,其通过两部分进行优化,分别为反向传播来自鉴别器的损耗Lreal和来自鉴别器的损耗Lfake。

整体的loss如下所示,公式(4.1)表示将GT热图输入鉴别器得到编码后的新热图,并计算新热图和GT热图的距离,进行Lreal损失计算。公式(4.2)表示将生成器生成的虚假热图输入鉴别器得到编码后的新热图,并计算新热图和生成器生成的虚假热图之间的距离进行Lfake损失计算。正如前述提到过的,鉴别器的目的是尽可能的将虚假热图和GT热图区分开来,也就是说鉴别器希望GT热图输入后的输出重构热图尽可能和GT接近,希望虚假热图输入后的输出重构热图尽可能和虚假热图不同。从loss上来说就是希望Lreal越来越小,希望Lfake越来越大。基于此,鉴别器的loss如公式(4.3)所示。

上述公式中的kt是用来约束鉴别器的能力,通过公式(5)约束kt能够使得网络更容易训练。正如许多论文中提到的那样,GAN不稳定且难以训练,因为鉴别器过快收敛,导致网络很容易崩溃,训练出无效的生成器。鉴别器过快收敛,从loss来分析就是:Lfake小于Lreal,生成器生成的热图足够真实以欺骗鉴别器。此时,kt将增加,以使Lfake更具优势,从而使得鉴别器进行更多的训练才能识别生成的热图。它在Lfake上加速训练的比例取决于鉴别器落在与生成器的差距。当Lfake大于Lreal时原理类似。

   5.SGANPose训练流程

整体算法每一个迭代过程如下:

  • 1.将GT热度图C,原始图像X输入到鉴别器,计算鉴别器的前向结果。为D(X,C)。同时计算鉴别器的loss,公式4.1,Lreal。

  • 2.将原始图像X输入到生成器,计算生成器的前向结果C^。同时计算生成器loss,公式1,Lmse。

  • 3.将虚假热度图C^,原始图像X输入到鉴别器,计算鉴别器的前向结果。为D(X,C^)。同时计算鉴别器的loss,公式4.2,Lfake。(累计Lreal和Lfake梯度值,并更新鉴别器参数,公式4.3)。

    4.有了虚假热度图C^和D(X,C^),利用公式2计算对抗loss,Ladv,并更新生成器。

   6.结果展示及分析

作者在LSP和MPII两个人体关键点数据集上对上述自对抗网络进行了结果分析,从下表可以看出,利用对抗生成的方式能够有效提升模型效果,且不会增加推理时间。


公众号近期荐读:

GAN整整6年了!是时候要来捋捋了! 

新手指南综述 | GAN模型太多,不知道选哪儿个?

数百篇GAN论文已下载好!搭配一份生成对抗网络最新综述!

有点夸张、有点扭曲!速览这些GAN如何夸张漫画化人脸!

天降斯雨,于我却无!GAN用于去雨如何?

脸部转正!GAN能否让侧颜杀手、小猪佩奇真容无处遁形?

容颜渐失!GAN来预测?

强数据所难!SSL(半监督学习)结合GAN如何?

弱水三千,只取你标!AL(主动学习)结合GAN如何?

异常检测,GAN如何gan ?

虚拟换衣!速览这几篇最新论文咋做的!

脸部妆容迁移!速览几篇用GAN来做的论文

【1】GAN在医学图像上的生成,今如何?

01-GAN公式简明原理之铁甲小宝篇


GAN&CV交流群,无论小白还是大佬,诚挚邀您加入!

一起讨论交流!长按备注【进群】加入:

更多分享、长按关注本公众号:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中实现机械臂的仿真可以使用Robotic System Toolbox来进行。Robotic System Toolbox包含许多工具和函数,可以实现机械臂的建模、控制和仿真。 首先,需要定义机械臂的模型。可以使用robotics.RigidBodyTree类来创建机械臂的刚体树结构。通过添加关节和刚体可以构建机械臂的结构。可以使用函数robotics.RigidBody来创建刚体,并使用函数robotics.Joint来创建关节。 接下来,可以使用robotics.RigidBodyTree类中的函数来定义机械臂的初始状态。可以设置每个关节的初始位置和速度。 然后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的运动控制。可以使用函数robotics.InverseKinematics来实现逆运动学,根据目标位置和姿态来求解关节角度。可以使用函数robotics.CartesianTrajectory来生成机械臂的轨迹,指定起始和目标位置以及运动时间。 最后,可以使用robotics.RigidBodyTree类中的函数来进行机械臂的仿真。可以使用函数robotics.Rate来指定仿真的频率,然后使用循环来更新机械臂的状态和控制输入,实现机械臂的运动。 以下是一个基本的机械臂仿真的示例代码: ```matlab % 创建机械臂模型 robot = robotics.RigidBodyTree; % 添加机械臂的关节和刚体 % 设置机械臂的初始状态 % 运动控制 % 仿真循环 % 绘制机械臂的运动轨迹 ``` 在实际的机械臂仿真中,可能还需要考虑机械臂的动力学、碰撞检测和路径规划等问题。可以使用Robotic System Toolbox中的其他工具和函数来处理这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值