当前位置: 首页 > news >正文

Stacked hourglass networks for human pose estimation代码学习

Stacked hourglass networks for human pose estimation
https://github.com/princeton-vl/pytorch_stacked_hourglass
这是一个用于人体姿态估计的模型,只能检测单个人
作者通过重复的bottom-up(高分辨率->低分辨率)和top-down(低分辨率->高分辨率)以及中间监督(深监督)来提升模型的性能

模型

残差

模型里的残差都是不改变分辨率的
在这里插入图片描述
在这里插入图片描述

class Conv(nn.Module):def __init__(self, inp_dim, out_dim, kernel_size=3, stride=1, bn=False, relu=True):super(Conv, self).__init__()self.inp_dim = inp_dimself.conv = nn.Conv2d(inp_dim, out_dim, kernel_size, stride, padding=(kernel_size - 1) // 2, bias=True)self.relu = Noneself.bn = Noneif relu:self.relu = nn.ReLU()if bn:self.bn = nn.BatchNorm2d(out_dim)def forward(self, x):assert x.size()[1] == self.inp_dim, "{} {}".format(x.size()[1], self.inp_dim)x = self.conv(x)if self.bn is not None:x = self.bn(x)if self.relu is not None:x = self.relu(x)return xclass Residual(nn.Module):def __init__(self, inp_dim, out_dim):super(Residual, self).__init__()self.relu = nn.ReLU()self.bn1 = nn.BatchNorm2d(inp_dim)self.conv1 = Conv(inp_dim, out_dim // 2, 1, relu=False)self.bn2 = nn.BatchNorm2d(out_dim // 2)self.conv2 = Conv(out_dim // 2, out_dim // 2, 3, relu=False)self.bn3 = nn.BatchNorm2d(out_dim // 2)self.conv3 = Conv(out_dim // 2, out_dim, 1, relu=False)self.skip_layer = Conv(inp_dim, out_dim, 1, relu=False)if inp_dim == out_dim:self.need_skip = Falseelse:self.need_skip = Truedef forward(self, x):  # ([1, inp_dim, H, W])if self.need_skip:residual = self.skip_layer(x)  # ([1, out_dim, H, W])else:residual = x  # ([1, out_dim, H, W])out = self.bn1(x)out = self.relu(out)out = self.conv1(out)  # ([1, out_dim / 2, H, W])out = self.bn2(out)out = self.relu(out)out = self.conv2(out)  # ([1, out_dim / 2, H, W])out = self.bn3(out)out = self.relu(out)out = self.conv3(out)  # ([1, out_dim, H, W])out += residual  # ([1, out_dim, H, W])return out  # ([1, out_dim, H, W])

最前面

首先模型使用了一个卷积核为7∗77*777步长为2的卷积,然后使用了一个残差和下采样,将图像从256∗256256*256256256降到了64∗6464*646464
接着接了两个残差

对应论文这一段
在这里插入图片描述

self.pre = nn.Sequential(  # ([B, 3, 256, 256])Conv(3, 64, 7, 2, bn=True, relu=True),  # ([B, 64, 128, 128])Residual(64, 128),  # ([B, 128, 128, 128])Pool(2, 2),  # ([B, 128, 64, 64])Residual(128, 128),  # ([B, 128, 64, 64])Residual(128, inp_dim)  # ([B, 256, 64, 64]))

在这里插入图片描述

单个Hourglass

在每一次最大池化之前,模型会产生一个分支,一条最大池化,另一条会接卷积(残差)
合并之前,走最大池化的的分支会做一次上采样,然后两个分支按元素加
(对应论文这两句)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
代码对应这个图
(然而论文的图里最前面的残差不知道怎么算。。。)
在这里插入图片描述

class Hourglass(nn.Module):def __init__(self, n, f, bn=None, increase=0):super(Hourglass, self).__init__()nf = f + increaseself.up1 = Residual(f, f)# Lower branchself.pool1 = Pool(2, 2)self.low1 = Residual(f, nf)self.n = n# Recursive hourglassif self.n > 1:self.low2 = Hourglass(n - 1, nf, bn=bn)else:self.low2 = Residual(nf, nf)self.low3 = Residual(nf, f)self.up2 = nn.Upsample(scale_factor=2, mode='nearest')def forward(self, x):  # ([1, f, H, W])up1 = self.up1(x)  # ([1, f, H, W])pool1 = self.pool1(x)  # ([1, f, H/2, W/2])low1 = self.low1(pool1)  # ([1, nf, H/2, W/2])low2 = self.low2(low1)  # ([1, nf, H/2, W/2])low3 = self.low3(low2)  # ([1, f, H/2, W/2])up2 = self.up2(low3)  # ([1, f, H, W])return up1 + up2  # ([1, f, H, W])

热力图

模型会接两个1∗11*111的卷积来产生热力图(heatmap)
在这里插入图片描述
(虽然不知道为啥代码里还有一个残差)
在这里插入图片描述

中间监督

将前一个Hourglass,heatmap,heatmap之前的特征通过2个1∗11*111的卷积加在一起
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://towardsdatascience.com/using-hourglass-networks-to-understand-human-poses-1e40e349fa15#:~:text=Hourglass%20networks%20are%20a%20type,image%20into%20a%20feature%20matrix.
https://medium.com/@monadsblog/stacked-hourglass-networks-14bee8c35678

相关文章:

Stacked hourglass networks for human pose estimation代码学习

Stacked hourglass networks for human pose estimation https://github.com/princeton-vl/pytorch_stacked_hourglass 这是一个用于人体姿态估计的模型,只能检测单个人 作者通过重复的bottom-up(高分辨率->低分辨率)和top-down&#xff0…...

SpringCloud(五)MQ消息队列

MQ概念常见消息模型helloworld案例实现实现spring AMQP发送消息实现spring AMQP接收消息工作消息队列实现发布订阅模型Fanout Exchange实现DirectExchange实现TopicExchange实现DirectExchange 和FanoutExchange的差异DirectExchange 和TopicExchange的差异基于RabbitListener注…...

SQL语法基础汇总

三年前的存稿 默认端口号 3306 超级用户名 root 登录 mysql -uroot -p / mysql -uroot -proot 退出 exit / quit 服务器版本 SELECT VERSION(); 当前日期 SELECT NOW(); 当前用户 SELECT USER(); 备份 mysqldump -uroot -p 数据库名称 > 保存的路径 还原 create database1-…...

惠普星14Pro电脑开机不了显示错误代码界面怎么办?

惠普星14Pro电脑开机不了显示错误代码界面怎么办?有用户电脑开机之后,进入了一个错误界面,里面有一些错误代码。重启电脑之后依然是无法进入到桌面中,那么这个情况怎么去进行解决呢?我们可以重装一个新系统&#xff0c…...

顺序表的构造及功能

定义顺序表是一种随机存储都结构,其特点是表中的元素的逻辑顺序与物理顺序相同。假设线性表L存储起始位置为L(A),sizeof(ElemType)是每个数据元素所占的存储空间的大小,则线性表L所对应的顺序存储如下图。顺序表的优缺点优点:随机…...

cesium: 绘制线段(008)

第008个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中绘制线段,左键点击开始绘制,右键点击取消绘制 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共139行)相关API参考:专栏目标示例效果 配置方式 1)…...

HTML、CSS学习笔记4(3D转换、动画)

目录 一、空间转换(3D转换) 1.空间位移 语法: 取值:(正负均可) 透视: 2.空间旋转 3.立体呈现 二、动画(animation) 1.动画的使用 先定义动画 再调用定义好的动画 …...

java的分布式锁

什么是分布式锁 分布式锁是指分布式环境下,系统部署在多个机器中,实现多进程分布式互斥的一种锁。为了保证多个进程能看到锁,锁被存在公共存储(比如 Redis、Memcache、数据库等三方存储中),以实现多个进程并…...

17- TensorFlow实现手写数字识别 (tensorflow系列) (项目十七)

项目要点 模型创建: model Sequential()添加卷积层: model.add(Dense(32, activationrelu, input_dim100)) # 第一层需要 input_dim添加dropout: model.add(Dropout(0.2))添加第二次网络: model.add(Dense(512, activationrelu)) # 除了first, 其他层不要输入shape添加输出…...

Polkadot 基础

Polkadot Polkadot联合并保护了一个不断增长的专业区块链生态系统,称为parachains。Polkadot上的应用程序和服务可以安全地跨链通信,形成真正可互操作的去中心化网络的基础。 真正的互操作性 Polkadot支持跨区块链传输任何类型的数据或资产,…...

spring源码编译

spring源码编译1、安装gradle2、拉取源码3、配置gradle文件来源及镜像仓库4、预编译5、验证6、可能遇到的报错6.1、jdk.jfr不存在6.2、checkstyleMain6.3、org.gradle.api.artifacts.result.ComponentSelectionReason.getDescription()Ljava/lang/String6.4、其他jdk&#xff1…...

防盗链是什么?带你了解什么是防盗链

目录 什么是防盗链 防盗链的定义 防盗链的产生 防盗链的实现 什么是防盗链 防盗链其实就是采用服务器端编程,通过url过滤技术实现的防止盗链的软件。 比如:photo.abc.com/video.mp4 这个下载地址,如果没有装防盗链,别人就能轻…...

Linux基础命令-fdisk管理磁盘分区表

文章目录 fdisk 命令介绍 命令格式 基本参数 1)常用参数 2)fdisk菜单操作说明 创建一个磁盘分区 1)创建分区 2)创建交换分区 参考实例 1) 显示当前分区的信息 2) 显示每个磁盘的分区信息 命令…...

(四)K8S 安装 Nginx Ingress Controller

ingress-nginx 是 Kubernetes 的入口控制器,使用NGINX作为反向代理和负载均衡器 版本介绍 版本1:Ingress NGINX Controller(k8s社区的ingres-nginx) 以 NGINX 开源技术为基础(kubernetes.io),可在GitHub的 kubernet…...

高频面试题

MyISAM和InnoDB是MySQL两种常见的存储引擎,它们之间有以下几点区别: 事务支持:MyISAM不支持事务处理,而InnoDB支持事务处理。 行级锁:MyISAM只支持表级锁,而InnoDB支持行级锁,可以避免并发访问…...

js 字节数组操作,TCP协议组装

js字节数组,进制转换js基础知识数组 Array扩展操作符三个点(...)ArrayBufferslice() 数组复制reduce 对数组中的每个元素执行一个提供的函数,将其结果汇总为单个返回值splice 数组删除,添加,替换js 字节数组转数字以及…...

JavaScript的引入并执行-包含动态引入与静态引入

JavaScript的引入并执行-包含动态引入与静态引入 JavaScript引入方式 html文件需要引入JavaScript代码&#xff0c;才能在页面里使用JavaScript代码。 静态引入 行内式 直接在DOM标签上使用 <!DOCTYPE html> <html lang"en"> <head><meta ch…...

第四阶段01-酷鲨商城项目准备

1. 关于csmall-product项目 这是“酷鲨商城”大项目中的“商品管理”项目&#xff0c;是一个后台管理项目&#xff08;给管理员&#xff0c;或运营人员使用的项目&#xff0c;并不是普通用户使用的&#xff09;&#xff0c;并且&#xff0c;只会涉及与发布商品可能相关的功能开…...

Uncaught ReferenceError: jQuery is not defined

今天在拉取项目部署到本地的时候遇到了一个问题特此记录一下 &#xff08;以后闭坑&#xff09; 我和同事同时拉取了一样的代码&#xff0c;结果同事的页面加载正常而我的页面像被狗啃了一样&#xff0c;知道是js的问题但是不知道问题出在哪里&#xff1f;后来还是同事帮我解决…...

面试阿里测开岗,被面试官针对,当场翻脸,把我的简历还给我,疑似被拉黑...

好家伙&#xff0c;金三银四一到&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;就爱问一些虚而不实的…...

从用户态到内核态:Linux Hook技术的全景实践与攻防解析

1. Linux Hook技术入门&#xff1a;从概念到实践 第一次接触Hook技术是在十年前的一个安全分析项目中&#xff0c;当时需要监控某个可疑进程的行为。那时候我才明白&#xff0c;原来Linux系统里藏着这么多可以"截胡"程序执行的秘密通道。简单来说&#xff0c;Hook技术…...

HiveWE:基于C++20模块化架构的下一代魔兽争霸III地图创作引擎

HiveWE&#xff1a;基于C20模块化架构的下一代魔兽争霸III地图创作引擎 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE HiveWE作为开源社区驱动的魔兽争霸III地图编辑器&#xff0c;通过现代C20模块化架构重…...

从 ROS 到 Cognitive OS、Agentic OS:机器人操作系统与具身智能新时代

一、先搞懂&#xff1a;我们常说的机器人操作系统&#xff0c;到底是什么&#xff1f;在机器人领域&#xff0c;“操作系统” 从来不是单一概念&#xff0c;而是一套功能分层、各司其职的完整软件体系。不同层级定位不同、职责分明&#xff0c;实际项目中可组合部署、按需协作&…...

10分钟学会Appium:移动端自动化测试的终极指南

10分钟学会Appium&#xff1a;移动端自动化测试的终极指南 【免费下载链接】til :memo: Today I Learned 项目地址: https://gitcode.com/gh_mirrors/ti/til Appium是一款功能强大的开源移动端自动化测试工具&#xff0c;支持iOS和Android平台&#xff0c;让开发者和测试…...

别再搞混了!改进DH与标准DH参数在IRB1200建模中的关键差异与选择

别再搞混了&#xff01;改进DH与标准DH参数在IRB1200建模中的关键差异与选择 当你在为ABB IRB1200这类六轴工业机器人构建运动学模型时&#xff0c;是否曾被两种不同的DH参数表示法困扰&#xff1f;标准DH&#xff08;Denavit-Hartenberg&#xff09;和改进DH&#xff08;Modif…...

从零到图像显示:用海康MVS SDK写一个最简单的C++相机采集程序

从零到图像显示&#xff1a;用海康MVS SDK写一个最简单的C相机采集程序 第一次接触工业相机开发时&#xff0c;最让人头疼的往往不是复杂的算法&#xff0c;而是如何让相机简单地显示一张图像。本文将带你用最直接的方式&#xff0c;在30分钟内完成从设备连接到实时显示的完整流…...

10分钟搞定:XUnity.AutoTranslator游戏翻译插件终极使用指南

10分钟搞定&#xff1a;XUnity.AutoTranslator游戏翻译插件终极使用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏看不懂而烦恼吗&#xff1f;XUnity.AutoTranslator正是你需要的游戏…...

CM-GAI:融合最优传输与连续介质力学的物理约束生成模型

1. 项目概述&#xff1a;当连续介质力学遇见最优传输在工程与材料科学的深水区&#xff0c;我们常常面临一个令人头疼的“数据荒”问题&#xff1a;极端条件下的物理场数据&#xff0c;比如材料在接近熔点的应力-应变行为&#xff0c;或者结构在超高冲击速度下的瞬态变形&#…...

技能包管理器:开发者工具链标准化与版本隔离解决方案

1. 项目概述&#xff1a;一个为开发者赋能的技能包管理器在软件开发的世界里&#xff0c;我们每天都在与各种工具、库和依赖项打交道。从构建工具到代码格式化器&#xff0c;从静态分析器到部署脚本&#xff0c;一个现代项目的开发环境往往由数十个、甚至上百个独立的命令行工具…...

Simplefolio数据库集成终极指南:5步搭建动态内容管理系统

Simplefolio数据库集成终极指南&#xff1a;5步搭建动态内容管理系统 【免费下载链接】simplefolio ⚡️ A minimal portfolio template for Developers 项目地址: https://gitcode.com/gh_mirrors/si/simplefolio Simplefolio是一款专为开发者设计的极简作品集模板&…...