我是靠谱客的博主 深情雪碧,最近开发中收集的这篇文章主要介绍人体姿态检测—HRNet代码详解(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

论文原文链接:《Deep High-Resolution Representation Learning for Human Pose Estimation》

上一篇是介绍了HRNet的结构和理论知识,以及代码的运行过程。这篇接着详解一下Github代码:https://github.com/stefanopini/simple-HRNet

1.生成人体关键点的Ground Truth
对于人体姿态关键点的ground truth,采用二维高斯分布,在每个关键点的ground truth位置上以1个像素为中心,生成ground truth heatmpas。首先初始化target[17,width/4,height/4]表示每个关键点的heatmap,定义heatmap的生成方式为高斯,引入关键点可见度target_weight.然后遍历每个关键点,计算其高斯heatmap,首先求出对应关键点在heatmap中的坐标,这里定义feat_stride=4,即heatmap比原图的尺寸缩小4倍。然后检查对于此位置执行高斯操作时,是否会超过界限,若超出则将关键点的可见度置为0,跳出此次循环。若在范围内,则定义高斯size,执行高斯函数,将中心值设置为1。接着,分别计算出高斯和heatmap的有效范围,若此关键点的可见度大于0.5,则将对应区域的高斯值赋给heatmap。所以最后计算出了所有关键点的heatmap,若设置不同关键点加权,则执行权重与可见度相乘。
在这里插入图片描述
在这里插入图片描述

2.inference过程
人体姿态估计推导的过程如下。首先读入验证集数据,初始化预测关键点结果的矩阵和人体姿态边界框。在这个过程中将batch归一化和dropout都禁用。控制数据不计算梯度和反向传播。将所有数据导入设备当中。调用model分别对原始图片和反转后的图片执行正向传播过程,将所得到heatmap结果进行融合。然后计算output与target之间的loss,和进行评估得到准确率值。
对于在HRNet model中具体的执行步骤如下图。输入图片首先通过两组conv+bn+relu操作,然后建立新的分支得到两个子网,在stage2中有进行1次信息交换;再建立新的分支得到三个子网,在stage3中有4次信息交换;建立最后一个分支,得到4个子网,在stage4中有3次信息交换,最后通过卷积层输出。在建立分支过程中,特征分辨率逐渐减半。
在这里插入图片描述
在这里插入图片描述

3.下采样
输入网络的图片分辨率为256*192。在构建的实例化HRNet网络中共进行过5次下采样。分别是在输入时stem net中的2个conv操作的stride=2,每次使feature的分辨率减半;然后是在每次开辟新的网络分支时,此支路的卷积stride=2,新支路的分辨率为上一个支路的1/2,所以从第一个网络序列开始逐步降低分别率,总共降低3次。在resnet block中不改变feature的分辨率。

4.数据扩增
在代码中只在训练模型的时候进行了随机的数据扩增,具体操作步骤如下。首先在多种条件限制下,如随机数小于半身概率,关键点可见度总和大于8,求得半身变换的center and scale.然后将初始的缩放因子和旋转因子在随机区间内剪切,得到随机的缩放和旋转因子。在随机数的控制下,将图片和joints进行翻转。由上述得到的变换center,随机缩放因子和随机旋转因子计算得到仿射操作,用其对图片和joints执行相同的变换。
在这里插入图片描述
在这里插入图片描述

最后

以上就是深情雪碧为你收集整理的人体姿态检测—HRNet代码详解(二)的全部内容,希望文章能够帮你解决人体姿态检测—HRNet代码详解(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部