2024.5.12 机器学习周报

引言

Abstract

文献阅读

1、题目

Deep High-Resolution Representation Learning for Human Pose Estimation

2、引言

在本文中,我们感兴趣的是人类姿态估计问题,重点是学习可靠的高分辨率表示。大多数现有的方法从由高到低分辨率网络产生的低分辨率表示中恢复高分辨率表示。相反,我们提出的网络在整个过程中保持高分辨率表示。我们从一个高分辨率的子网络开始作为第一阶段,逐步增加高分辨率到低分辨率的子网络,形成更多的阶段,并将多分辨率的子网络并行连接。我们进行重复的多尺度融合,使得每个从高到低的分辨率表示一遍又一遍地接收来自其他并行表示的信息,从而产生丰富的高分辨率表示。因此,所预测的关键点热图潜在地更准确且在空间上更精确。我们通过两个基准数据集:COCO关键点检测数据集和MPII人体姿势数据集的上级姿势估计结果实证证明了我们的网络的有效性。此外,我们展示了我们的网络在PoseTrack数据集上的姿态跟踪的优越性。

3、创新点

  • 提出了High-Resolution Net (HRNet)用于人体姿势估计,通过保持高分辨率表示整个过程,而不需要恢复高分辨率。
  • 引入了多次多尺度融合,使得每个高分辨率表示都能反复接收来自其他并行表示的信息,从而产生可靠的高分辨率表示。

4、姿态估计基于深度学习的方法

对于Human Pose Estimation任务,现在基于深度学习的方法主要有两种:

  1. 基于regressing的方式,即直接预测每个关键点的位置坐标。
  2. 基于heatmap的方式,即针对每个关键点预测一张热力图(预测出现在每个位置上的分数)。

当前检测效果最好的一些方法基本都是基于heatmap的,所以HRNet也是采用基于heatmap的方式。

5、HRNet网络结构

5.1、总体架构

通过上图可以看出,HRNet首先通过两个卷积核大小为3x3步距为2的卷积层(后面都跟有BN以及ReLU)共下采样了4倍。然后通过Layer1模块,这里的Layer1其实和ResNet中的Layer1类似,就是重复堆叠Bottleneck,注意这里的Layer1只会调整通道个数,并不会改变特征层大小。

下面是实现Layer1时所使用的代码

# Stage1
downsample = nn.Sequential(nn.Conv2d(64, 256, kernel_size=1, stride=1, bias=False),nn.BatchNorm2d(256, momentum=BN_MOMENTUM)
)
self.layer1 = nn.Sequential(Bottleneck(64, 64, downsample=downsample),Bottleneck(256, 64),Bottleneck(256, 64),Bottleneck(256, 64)
)

接着通过一系列Transition结构以及Stage结构,每通过一个Transition结构都会新增一个尺度分支。比如说Transition1,它在layer1的输出基础上通过并行两个卷积核大小为3x3的卷积层得到两个不同的尺度分支,即下采样4倍的尺度以及下采样8倍的尺度。在Transition2中在原来的两个尺度分支基础上再新加一个下采样16倍的尺度,注意这里是直接在下采样8倍的尺度基础上通过一个卷积核大小为3x3步距为2的卷积层得到下采样16倍的尺度。Transition2应该是通过融合不同尺度的特征层得到的(下图用红色矩形框框出的部分)。但根据源码的实现过程确实就和我上面图中画的一样,就一个3x3的卷积层没做不同尺度的融合。

简单介绍完Transition结构后,在来说说网络中最重要的Stage结构。这里以Stage3为例,对于每个尺度分支,首先通过4个Basic Block,没错就是ResNet里的Basic Block,然后融合不同尺度上的信息。对于每个尺度分支上的输出都是由所有分支上的输出进行融合得到的。比如说对于下采样4倍分支的输出,它是分别将下采样4倍分支的输出(不做任何处理) 、 下采样8倍分支的输出通过Up x2上采样2倍 以及下采样16倍分支的输出通过Up x4上采样4倍进行相加最后通过ReLU得到下采样4倍分支的融合输出。其他分支也是类似的,图中右上角的x4表示该模块(Basic Block和Exchange Block)要重复堆叠4次。

对于所有的Up模块就是通过一个卷积核大小为1x1的卷积层然后BN层最后通过Upsample直接放大n倍得到上采样后的结果(这里的上采样默认采用的是nearest最邻近插值)。Down模块相比于Up稍微麻烦点,每下采样2倍都要增加一个卷积核大小为3x3步距为2的卷积层(注意下图中Conv和Conv2d的区别,Conv2d就是普通的卷积层,而Conv包含了卷积、BN以及ReLU激活函数)。

在Stage4中的最后一个Exchange Block只输出下采样4倍分支的输出(即只保留分辨率最高的特征层),然后接上一个卷积核大小为1x1卷积核个数为17(因为COCO数据集中对每个人标注了17个关键点)的卷积层。最终得到的特征层(64x48x17)就是针对每个关键点的heatmap(热力图)。

5.2、预测结果(heatmap)的可视化

关于预测得到的heatmap(热力图)听起来挺抽象的,根据下面这幅图。首先,左边是输入网络的预测图片,大小为256x192,为了保证原图像比例,在两侧进行padding。右侧是我从预测结果,也就是heatmap(64x48x17)中提取出的部分关键点对应的预测信息(48x17x1)。网络最终输出的heatmap分辨率是原图的1/4,所以高宽分别对应的是64和48,接着对每个关键点对应的预测信息求最大值的位置,即预测score最大的位置,作为预测关键点的位置,映射回原图就能得到原图上关键点的坐标。

下面是源码中对应的实现,其中coords是每个关键点对应预测score最大的位置:

for n in range(coords.shape[0]):for p in range(coords.shape[1]):hm = batch_heatmaps[n][p]px = int(math.floor(coords[n][p][0] + 0.5))py = int(math.floor(coords[n][p][1] + 0.5))if 1 < px < heatmap_width-1 and 1 < py < heatmap_height-1:diff = np.array([hm[py][px+1] - hm[py][px-1],hm[py+1][px]-hm[py-1][px]])coords[n][p] += np.sign(diff) * .25

假设对于某一关键点的预测heatmap如下所示,根据寻找最大score可以找到坐标(3, 3)点,接着分别对比该点左右两侧(x方向),上下两侧(y方向)的score。比如说先看左右两侧,明显右侧的score比左侧的大(蓝色越深代表score越大),所以最终预测的x坐标向右侧偏移0.25故最终x=3.25,同理上侧的score比下侧大,所以y坐标向上偏移0.25故最终y=2.75。

关于COCO数据集中标注的17个关键点的顺序如下:

"kps": ["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"]

最后把每个关键点绘制在原图上,就得到如下图所示的结果。

5.3、损失计算

网络预测的最终结果是针对每个关键点的heatmap,根据标注信息我们是可以得知每个关键点的坐标的(原图尺度),接着将坐标都除以4(缩放到heatmap尺度)在进行四舍五入。针对每个关键点,我们先生成一张值全为0的heatmap,然后将对应关键点坐标处填充1就得到下面左侧的图片。如果直接拿左侧的heatmap作为GT去训练网络的话,会发现网络很难收敛(可以理解为针对每个关键点只有一个点为正样本,其他64x48-1个点都是负样本,正负样本极度不均),为了解决这个问题一般会以关键点坐标为中心应用一个2D的高斯分布(没有做标准化处理)得到如右图所示的GT(随手画的不必深究)。利用这个GT heatmap配合网络预测的heatmap就能计算MSE损失了。

 下面这幅图是某张真实训练样本(左侧)对应nose关键点的GT heatmap(右侧)

代码中在计算总损失时,并不是直接把每个关键点的损失进行相加,而是在相加前对于每个点的损失分别乘上不同的权重。下面给出了每个关键点的名称以及所对应的权重。

"kps": ["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"]
"kps_weights": [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.2, 1.2, 1.5, 1.5, 1.0, 1.0, 1.2, 1.2, 1.5, 1.5]

5.4、评价准则

在目标检测(Object Detection)任务中可以通过IoU(Intersection over Union)作为预测bbox和真实bbox之间的重合程度或相似程度。在关键点检测(Keypoint Detection)任务中一般用OKS(Object Keypoint Similarity)来表示预测keypoints与真实keypoints的相似程度,其值域在0到1之间,越靠近1表示相似度越高。

6、实验

6.1、COCO关键点检测 

COCO验证集的比较,通过对原始图像和翻转图像的头部图进行平均来计算热图。通过在从最高响应到第二高响应的方向上以四分之一偏移调整最高热值位置来预测每个关键点位置。在表1中报告了本文的方法和其他最先进方法的结果。本文的小型网络HRNet-W32,从头开始训练,输入大小为256 × 192,获得了73.4的AP分数,优于其他具有相同输入大小的方法。与Hourglass相比,本文的小型网络将AP提高了6.5个点,并且本文网络的GFLOP要低得多,不到一半,而参数数量相似,本文的略大。

COCO测试开发集中,小型网络HRNet-W32实现了74.9的AP。它优于所有其他自顶向下的方法,并且在模型大小(#Params)和计算复杂度(GFLOPs)方面更有效。本文的大型号HRNet-W 48达到了最高的75.5 AP。与具有相同输入大小的SimpleBaseline [70]相比,我们的小型和大型网络分别获得了1.2和1.8的改进。通过AI Challenger [68]的额外数据进行训练,本文的单个大型网络可以获得77.0的AP。

6.2、MPII人体姿态估计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679839.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步

pdf2htmlEX&#xff1a;pdf 转 html&#xff0c;医学指南精细化处理第一步 单文件转换多文件转换 代码&#xff1a;https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker&#xff1a; docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&…

【教程】超简单!如何将“在VSCode中打开”添加到右键菜单中

按照以下步骤进行操作&#xff1a; 打开注册表编辑器&#xff1a; 按下 Win R 组合键打开运行对话框。输入 regedit 并按下 Enter 键打开注册表编辑器。 导航到适当的注册表项&#xff1a; 转到以下注册表项&#xff1a;HKEY_CLASSES_ROOT\Directory\Background\shell 创建…

Java进程排查CPU飙升方法

1. top查看CPU占用情况 # 使用top指令 top注&#xff1a; shftp按照cpu占用进行排序&#xff0c;按shiftm按照内存占用进行排序 如图&#xff1a; 2. 定位该进程的线程信息 top -Hp PID 如&#xff1a; top -Hp 10255解析&#xff1a; top&#xff1a;是一个实时的系统监视…

警情预测:天气、季节与节假日的交织影响

在预测未来七天的警情时&#xff0c;我们必须综合考虑多种因素&#xff0c;尤其是那些已知的对社会稳定具有潜在影响的警情类型&#xff0c;如交通事故、打架斗殴、赌博案件、盗窃案件以及矛盾纠纷。同时&#xff0c;不可忽视的是天气、季节和节假日等因素对警情发生概率的显著…

注意力机制篇 | YOLOv8改进之在C2f模块添加ParNetAttention注意力机制

前言:Hello大家好,我是小哥谈。ParNetAttention是一种用于自然语言处理任务的注意力机制,它是由谷歌在2019年提出的。ParNetAttention旨在解决传统注意力机制在处理长序列时的效率问题。传统的注意力机制在计算注意力权重时,需要对所有输入序列的位置进行逐一计算,这导致了…

【项目实战】使用Yolov8 + tesseract 实现身份证信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于实验,毕业设计参考等。整体效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录 一 数据集制作

洛谷 P4148:简单题 ← KD-Tree模板题

【题目来源】https://www.luogu.com.cn/problem/P4148【题目描述】 你有一个 NN 的棋盘&#xff0c;每个格子内有一个整数&#xff0c;初始时的时候全部为 0&#xff0c;现在需要维护两种操作&#xff1a; ● 1 x y A → 1≤x,y≤N&#xff0c;A 是正整数。将格子 (x,y) 里的数…

阿里云VOD视频点播流程(1)

一、开通阿里云VOD 视频点播&#xff08;ApsaraVideo VoD&#xff0c;简称VOD&#xff09;是集视频采集、编辑、上传、媒体资源管理、自动化转码处理、视频审核分析、分发加速于一体的一站式音视频点播解决方案。登录阿里云&#xff0c;在产品找到视频点播VOD &#xff0c;点击…

Java | Leetcode Java题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution {public void sortColors(int[] nums) {int n nums.length;int p0 0, p2 n - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {int temp nums[i];nums[i] nums[p2];nums[p2] temp;--p2;}i…

ElementUI Select选择器多选获取选中对象

html <el-form-item label"账户标签&#xff1a;" prop"tags"><el-selectstyle"width: 500px"value-key"tagId"v-model"form.tags"clearablefilterablemultipleplaceholder"请搜索选择账户标签"><…

为 Flutter 应用设置主题:ThemeData 和 ColorScheme 指南

在媒体和其他来源中有许多关于这个主题的文章&#xff0c;那么这篇文章的必要性是什么&#xff1f; 在本文中&#xff0c;我计划仅关注 ThemeData 小部件的关键点以及我的开发经验中最常用的参数&#xff0c;并且您将获得有关每个参数如何对您的应用程序执行操作的简要说明。 …

防火墙技术基础篇:什么是包过滤技术

什么是防火墙包过滤技术 当数据在网络中传输时&#xff0c;它们被分割成小的单元&#xff0c;称为数据包。防火墙的包过滤是一种基本的网络安全技术&#xff0c;用于检查这些数据包并根据预定义的规则决定是否允许它们通过防火墙。 防火墙包过滤是一种关键的网络安全技术&am…