首页 > 其他分享 >深度学习---单目标关键点检测网络Stacked Hourglass

深度学习---单目标关键点检测网络Stacked Hourglass

时间:2023-11-17 15:34:38浏览次数:39  
标签:Stacked 特征 网络 --- Hourglass 模块 hourglass 关键点

Stacked Hourglass Networks是2016年提出的一种用于单人人体姿态估计的网络,并取得了很好的效果。这里我们从网络结构以及一些实现细节简单分析下这个网络。
paper: https://arxiv.org/pdf/1603.06937.pdf
code: https://github.com/princeton-vl/pytorch_stacked_hourglass https://github.com/zhoujinhai/Stack_HourGlass

一、网络结构

1.1 网络整体结构

网络名字Stacked HourGlass(堆叠的沙漏)其实已经反应了网络的大致结构,由像沙漏一样的结构堆叠而成,每一个沙漏结构在文章称为Hourglass模块,hourglass模块之间还有一个中间监督层(Intermediate Supervision),用于衔接各个hourglass模块,通过这样的架构,不断重复进行自上而下,自下而上的推断机制,通过这种机制从而能够重新评估整张图像的初始估计和特征。

1.2 Hourglass模块

前面提到的hourglass模块如下图所示,其在论文中由4层组成,方格的大小表示特征的维度,每一个方格都表示一个残差块,大体逻辑是先降维然后通过残差块提取特征,再升维后进行特征融合。

由于其层级结构,所以在实现上采用了递归的方式。

残差块如下图所示。

1.3 中间监督层


上一个Hourglass的输出经过由残差块处理得到特征A,该特征经过两个分支,

  • 一个分支经过1*1的卷积得到相同的维度特征作为下一个hourglass模块的输入。
  • 另一个经过11的卷积输出得到中间层生成的heatmaps,可以和真实的标签计算loss,这些特征层再经过11的卷积输出和A相同的维度特征,然后也作为下一个hourglass模块的输入。

所以下一个hourglass模块的输入有三个,两个在上面提到,还有一个是输入到hourglass的特征。

为什么中间监督那么关键?
这是因为当通过每个Hourglass模块时,网络都将有机会在局部和全局上下文中处理特征,然后生成预测。 随后的Hourglass模块允许这些高级特征再次被处理,以进一步评估和重新评估更高阶空间关系。

二、实现细节

2.1 标签生成

假如有3个关键点,那真实的训练标签就有3张对应的HeatMap图。关键点由x,y坐标表示,那如何将其转换成训练用的HeatMap呢,采用高斯热力图,也就是越靠近关键点位置,其值越接近于1,越远越接近于0。

其中sigma用于控制高斯热力图的范围。越大形成的热力图范围越大。

2.2 结果解析

网络训练完成后,推理阶段输出的也是HeatMap图,那要得到关键点位置信息,就需要进行解析,其过程刚好和上面标签生成相反,即找出heatMap中最大值所在位置作为关键点位置。

三、模型部署

3.1 模型转换

将训练好的模型转换为ONNX格式

3.2 模型推理

推理可以采用前面提到过的OpenCV的DNN模块,或者采用NCNN进行推理。
大体思路是获取最后一个hourglass模块的输出,然后解析出每一个HeatMap最大点的位置,这些位置再转换到原图即检测到的关键点位置。

标签:Stacked,特征,网络,---,Hourglass,模块,hourglass,关键点
From: https://www.cnblogs.com/xiaxuexiaoab/p/17645841.html

相关文章

  • RT-Thread Studio中添加软件包报错ImportError: No module named psutil
    经查,我这里是与RT-ThreadStudio一起的python2.7中没有psutil模块导致的,因此需要在python2.7中安装psutil模块。我这里已经安装了python3.8,于是先将环境变量替代为RT-ThreadStudio一起的python2.7(方便下面的命令行执行):然后安装psutil模块:然后就好了: ......
  • 启动open5GS的核心网和srsLTE的enodeB时遇到报错S1-Setup failure Cannot find Served
    问题的场景启动open5GS的核心网和srsLTE的enodeB、ue,遇到报错S1-SetupfailureCannotfindServedTAI,导致enodeB连接不上mme。报错信息S1-SetupfailureCannotfindServedTAICheck'mme.tai'configurationCause:misc-unknown-PLMN报错原因mme配置的PLMN和enodeB配......
  • AO3401-ASEMI低压N沟道AO3401参数、规格、尺寸
    编辑:llAO3401-ASEMI低压N沟道AO3401参数、规格、尺寸型号:AO3401品牌:ASEMI连续漏极电流(Id):4.2A漏源电压(Vdss):30V功率(Pd):700mW芯片个数:1封装:SOT-23工作温度:-50°C~150°C引脚数量:3类型:P沟道、低压MOS管AO3401描述:AO3401-ED采用先进的设计技术,提供出色的RDS(ON)、低栅......
  • sqlserver-cdc 自动清理时间设定
    1、默认cdc记录清理时间查询EXECsys.sp_cdc_help_jobs 2、修改cdc记录清理时间EXECUTEsys.sp_cdc_change_job@job_type=N'cleanup',@retention=4320; ......
  • SonarQube系列-通过配置扫描分析范围,聚焦关键问题
    在许多情况下,你可能不希望分析项目中每个源文件的各个方面。例如,项目可能包含生成的代码、库中的源代码或有意复制的代码。在这种情况下,跳过这些文件分析的部分或全部方面是有意义的,从而消除干扰并将焦点缩小到真正重要的问题上。如果SonarQube的结果不相关,那么没有人会想要使用它......
  • 关于 Angular SSR 应用 index.html 中的 serverApp-state script 元素
    首先,我们需要了解AngularSSR(Server-SideRendering)以及SSRTransferState。AngularSSR是Angular应用程序的服务端渲染技术,它允许Angular应用程序在服务器上渲染其组件,并生成静态HTML页面,再发送给客户端。这种方法可以提高首次加载速度,提升SEO效果。而SSRTransfe......
  • HTTP 响应字段 Transfer-Encoding 赋值成 chunked 的作用介绍
    Transfer-Encoding:chunked是HTTP/1.1协议中定义的一种数据传输方式。在HTTP/1.1之前,HTTP协议的响应数据通常是一次性发送的,也就是说,服务器必须把所有的响应数据准备好后,一次性发送给客户端。这种方式的缺点是,如果响应数据很大,或者数据的产生需要花费一定的时间,那么服务器......
  • CodeWhisperer--手把手教你使用一个十分强大的工具
    AmazonCodeWhisperer是一款能够帮助我们智能生成代码的工具。经过数十亿行代码的训练,可以根据提示和现有代码实时生成从片段到完整功能的代码建议。类似Cursor和GithubCopilot编码工具。目前,CodeWhisperer兼容Python、Java和JavaScript,支持各种IDE,包括JetBrains、Vis......
  • GoldenGate高可用管理组件-XAG部署与管理
    适用范围适用于OracleRAC集群环境,并在创建ACFS共享文件系统中部署GoldenGate软件前提下,部署xag高可用组件对GoldenGate进行高可用管理。实施步骤1.安装XAG#在安装OGG的节点安装xag#使用grid用户安装unzipxagpack_7b.zip-d/tmpcd/tmp/xag./xagsetup.sh--install--directo......
  • 无涯教程-D语言 - 基本语法
    D语言非常简单易学,让我们开始创建第一个D程序!D示例让我们编写一个简单的D程序,所有D文件都将具有扩展名.d。因此,将以下源代码放入test.d文件中。importstd.stdio;/*我在D中的第一个程序*/voidmain(string[]args){writeln("test!");}假设D环境设置正确,让......