堆叠hourglass网络

Hourglass Network 沙漏网络 (pose estimation姿态估计) 在ECCV2016《Stacked Hourglass Networks for Human Pose Estimation》这篇paper中提出 是一个姿态估计(pose estimation)的网络结构 姿态估计(Pose Estimation)是 CV 领域一个非常重要的方向,而Stacked Hourglass Networks 级联漏斗网络的提出就是为了提升姿态估计的效果,但是其中的经典思想可以扩展到其他方向,比如目标识别方向,代表网络是 CornerNet(预测目标的左上... 阅读详情

本文目录

1. 简介

该论文利用多尺度特征来识别姿态,如下图所示,每个子网络称为hourglass Network,是一个沙漏型的结构,多个这种结构堆叠起来,称作stacked hourglass。堆叠的方式,方便每个模块在整个图像上重新估计姿态和特征。如下图所示,输入图像通过全卷积网络fcn后,得到特征,而后通过多个堆叠的hourglass,得到最终的热图。

Hourglass如下图所示。其中每个方块均为下下图的残差模块。

Hourglass采用了中间监督(Intermediate Supervision)。每个hourglass均会有热图(蓝色)。训练阶段,将这些热图和真实热图计算损失MSE,并求和,得到损失;推断阶段,使用的是最后一个hourglass的热图。

2. stacked hourglass

堆叠hourglass结构如下图所示(nChannels=256,nStack=2,nModules=2,numReductions=4, nJoints=17):

代码如下:

 1 class StackedHourGlass(nn.Module):
 2     """docstring for StackedHourGlass"""
 3     def __init__(self, nChannels, nStack, nModules, numReductions, nJoints):
 4         super(StackedHourGlass, self).__init__()
 5         self.nChannels = nChannels
 6         self.nStack = nStack
 7         self.nModules = nModules
 8         self.numReductions = numReductions
 9         self.nJoints = nJoints
10 
11         self.start = M.BnReluConv(3, 64, kernelSize = 7, stride = 2, padding = 3)  # BN+ReLU+conv
12 
13         self.res1 = M.Residual(64, 128) # 输入和输出不等,输入通过1*1conv结果和3*(BN+ReLU+conv)求和
14         self.mp = nn.MaxPool2d(2, 2)
15         self.res2 = M.Residual(128, 128) # 输入和输出相等,为x+3*(BN+ReLU+conv)
16         self.res3 = M.Residual(128, self.nChannels) # 输入和输出相等,为x+3*(BN+ReLU+conv);否则输入通过1*1conv结果和3*(BN+ReLU+conv)求和。
17 
18         _hourglass, _Residual, _lin1, _chantojoints, _lin2, _jointstochan = [],[],[],[],[],[]
19 
20         for _ in range(self.nStack):  # 堆叠个数
21             _hourglass.append(Hourglass(self.nChannels, self.numReductions, self.nModules))
22             _ResidualModules = []
23             for _ in range(self.nModules):
24                 _ResidualModules.append(M.Residual(self.nChannels, self.nChannels))   # 输入和输出相等,为x+3*(BN+ReLU+conv)
25             _ResidualModules = nn.Sequential(*_ResidualModules)
26             _Residual.append(_ResidualModules)   # self.nModules 个 3*(BN+ReLU+conv)
27             _lin1.append(M.BnReluConv(self.nChannels, self.nChannels))       # BN+ReLU+conv
28             _chantojoints.append(nn.Conv2d(self.nChannels, self.nJoints,1))  # 1*1 conv,维度变换
29             _lin2.append(nn.Conv2d(self.nChannels, self.nChannels,1))        # 1*1 conv,维度不变
30             _jointstochan.append(nn.Conv2d(self.nJoints,self.nChannels,1))   # 1*1 conv,维度变换
31 
32         self.hourglass = nn.ModuleList(_hourglass)
33         self.Residual = nn.ModuleList(_Residual)
34         self.lin1 = nn.ModuleList(_lin1)
35         self.chantojoints = nn.ModuleList(_chantojoints)
36         self.lin2 = nn.ModuleList(_lin2)
37         self.jointstochan = nn.ModuleList(_jointstochan)
38 
39     def forward(self, x):
40         x = self.start(x)
41         x = self.res1(x)
42         x = self.mp(x)
43         x = self.res2(x)
44         x = self.res3(x)
45         out = []
46 
47         for i in range(self.nStack):
48             x1 = self.hourglass[i](x)
49             x1 = self.Residual[i](x1)
50             x1 = self.lin1[i](x1)
51             out.append(self.chantojoints[i](x1))
52             x1 = self.lin2[i](x1)
53             x = x + x1 + self.jointstochan[i](out[i])   # 特征求和
54 
55         return (out)

3. hourglass

hourglass在numReductions>1时,递归调用自己,结构如下:

代码如下:

1 class Hourglass(nn.Module):
 2     """docstring for Hourglass"""
 3     def __init__(self, nChannels = 256, numReductions = 4, nModules = 2, poolKernel = (2,2), poolStride = (2,2), upSampleKernel = 2):
 4         super(Hourglass, self).__init__()
 5         self.numReductions = numReductions
 6         self.nModules = nModules
 7         self.nChannels = nChannels
 8         self.poolKernel = poolKernel
 9         self.poolStride = poolStride
10         self.upSampleKernel = upSampleKernel
11 
12         """For the skip connection, a residual module (or sequence of residuaql modules)  """
13         _skip = []
14         for _ in range(self.nModules):
15             _skip.append(M.Residual(self.nChannels, self.nChannels))  # 输入和输出相等,为x+3*(BN+ReLU+conv)
16         self.skip = nn.Sequential(*_skip)
17 
18         """First pooling to go to smaller dimension then pass input through
19         Residual Module or sequence of Modules then  and subsequent cases:
20             either pass through Hourglass of numReductions-1 or pass through M.Residual Module or sequence of Modules """
21         self.mp = nn.MaxPool2d(self.poolKernel, self.poolStride)
22 
23         _afterpool = []
24         for _ in range(self.nModules):
25             _afterpool.append(M.Residual(self.nChannels, self.nChannels))  # 输入和输出相等,为x+3*(BN+ReLU+conv)
26         self.afterpool = nn.Sequential(*_afterpool)
27 
28         if (numReductions > 1):
29             self.hg = Hourglass(self.nChannels, self.numReductions-1, self.nModules, self.poolKernel, self.poolStride)  # 嵌套调用本身
30         else:
31             _num1res = []
32             for _ in range(self.nModules):
33                 _num1res.append(M.Residual(self.nChannels,self.nChannels))  # 输入和输出相等,为x+3*(BN+ReLU+conv)
34             self.num1res = nn.Sequential(*_num1res)  # doesnt seem that important ?
35 
36         """ Now another M.Residual Module or sequence of M.Residual Modules  """
37         _lowres = []
38         for _ in range(self.nModules):
39             _lowres.append(M.Residual(self.nChannels,self.nChannels))   # 输入和输出相等,为x+3*(BN+ReLU+conv)
40         self.lowres = nn.Sequential(*_lowres)
41 
42         """ Upsampling Layer (Can we change this??????) As per Newell's paper upsamping recommended  """
43         self.up = myUpsample()#nn.Upsample(scale_factor = self.upSampleKernel)   # 将高和宽扩充为原来2倍,实现上采样
44 
45 
46     def forward(self, x):
47         out1 = x
48         out1 = self.skip(out1)          # 输入和输出相等,为x+3*(BN+ReLU+conv)
49         out2 = x
50         out2 = self.mp(out2)            # 降维
51         out2 = self.afterpool(out2)     # 输入和输出相等,为x+3*(BN+ReLU+conv)
52         if self.numReductions>1:
53             out2 = self.hg(out2)        # 嵌套调用本身
54         else:
55             out2 = self.num1res(out2)   # 输入和输出相等,为x+3*(BN+ReLU+conv)
56         out2 = self.lowres(out2)        # 输入和输出相等,为x+3*(BN+ReLU+conv)
57         out2 = self.up(out2)            # 升维
58 
59         return out2 + out1              # 求和

4. 上采样myUpsample

上采样代码如下:

1 class myUpsample(nn.Module):
2     def __init__(self):
3         super(myUpsample, self).__init__()
4         pass
5     def forward(self, x):   # 将高和宽扩充为原来2倍,实现上采样
6         return x[:, :, :, None, :, None].expand(-1, -1, -1, 2, -1, 2).reshape(x.size(0), x.size(1), x.size(2)*2, x.size(3)*2)

其中x为(N)(C)(H)(W)的矩阵,x[:, :, :, None, :, None]为(N)(C)(H)(1)(W)(1)的矩阵,expand之后变成(N)(C)(H)(2)(W)(2)的矩阵,最终reshape之后变成(N)(C)(2H) (2W)的矩阵,实现了将1个像素水平和垂直方向各扩充2倍,变成4个像素(4个像素值相同),完成了上采样。

5. 残差模块

残差模块结构如下:

代码如下:

1 class Residual(nn.Module):
 2         """docstring for Residual"""  # 输入和输出相等,为x+3*(BN+ReLU+conv);否则输入通过1*1conv结果和3*(BN+ReLU+conv)求和
 3         def __init__(self, inChannels, outChannels):
 4                 super(Residual, self).__init__()
 5                 self.inChannels = inChannels
 6                 self.outChannels = outChannels
 7                 self.cb = ConvBlock(inChannels, outChannels)      # 3 * (BN+ReLU+conv) 其中第一组降维,第二组不变,第三组升维
 8                 self.skip = SkipLayer(inChannels, outChannels)    # 输入和输出通道相等,则输出=输入,否则为1*1 conv
 9 
10         def forward(self, x):
11                 out = 0
12                 out = out + self.cb(x)
13                 out = out + self.skip(x)
14                 return out

其中skiplayer代码如下:

 1 class SkipLayer(nn.Module):
 2         """docstring for SkipLayer"""  # 输入和输出通道相等,则输出=输入,否则为1*1 conv
 3         def __init__(self, inChannels, outChannels):
 4                 super(SkipLayer, self).__init__()
 5                 self.inChannels = inChannels
 6                 self.outChannels = outChannels
 7                 if (self.inChannels == self.outChannels):
 8                         self.conv = None
 9                 else:
10                         self.conv = nn.Conv2d(self.inChannels, self.outChannels, 1)
11 
12         def forward(self, x):
13                 if self.conv is not None:
14                         x = self.conv(x)
15                 return x

6. conv

 1 class BnReluConv(nn.Module):
 2         """docstring for BnReluConv"""    # BN+ReLU+conv
 3         def __init__(self, inChannels, outChannels, kernelSize = 1, stride = 1, padding = 0):
 4                 super(BnReluConv, self).__init__()
 5                 self.inChannels = inChannels
 6                 self.outChannels = outChannels
 7                 self.kernelSize = kernelSize
 8                 self.stride = stride
 9                 self.padding = padding
10 
11                 self.bn = nn.BatchNorm2d(self.inChannels)
12                 self.conv = nn.Conv2d(self.inChannels, self.outChannels, self.kernelSize, self.stride, self.padding)
13                 self.relu = nn.ReLU()
14 
15         def forward(self, x):
16                 x = self.bn(x)
17                 x = self.relu(x)
18                 x = self.conv(x)
19                 return x

7. ConvBlock

 1 class ConvBlock(nn.Module):
 2         """docstring for ConvBlock"""  # 3 * (BN+ReLU+conv) 其中第一组降维,第二组不变,第三组升维
 3         def __init__(self, inChannels, outChannels):
 4                 super(ConvBlock, self).__init__()
 5                 self.inChannels = inChannels
 6                 self.outChannels = outChannels
 7                 self.outChannelsby2 = outChannels//2
 8 
 9                 self.cbr1 = BnReluConv(self.inChannels, self.outChannelsby2, 1, 1, 0)        # BN+ReLU+conv
10                 self.cbr2 = BnReluConv(self.outChannelsby2, self.outChannelsby2, 3, 1, 1)    # BN+ReLU+conv
11                 self.cbr3 = BnReluConv(self.outChannelsby2, self.outChannels, 1, 1, 0)       # BN+ReLU+conv
12 
13         def forward(self, x):
14                 x = self.cbr1(x)
15                 x = self.cbr2(x)
16                 x = self.cbr3(x)
17                 return x

 

堆叠沙漏网络(stacked hourglass network)学习 Stacked Hourglass Networks是2016年密歇根大学提出的经典网络架构。是曾经最具代表性的姿态识别SOTA之一。 阅读详情

相关推荐

Hourglass网络的理解和代码分析

文章目录1. 前言2.一个简单的hourglass网络结构3. Hourglass 网络的定义:3.1 方法一:3.2 方法二(简陋版): 1. 前言 目标检测最新的一些方法中都采用了人脸关键点检测hourglass网络作为检测的主干网络,如CornerNet-Lite系列。目标检测将anchor生成box的方式替换关键点预测,采用hourglass网络的优点在于物体特征点可能出现在网络的不同层,...

Rock的博客 7565

史上最详细的Stacked Hourglass姿态检测算法详解(源码分析)

参考: https://zhuanlan.zhihu.com/p/45002720 https://blog.youkuaiyun.com/shenxiaolu1984/article/details/51428392 https://blog.youkuaiyun.com/wangzi371312/article/details/81174452 https://github.com/bearpaw/pytorch-pose https://github.com/princeton-vl/pytorch_stacked_hour

IT荻的博客 1万+

深入解析堆叠沙漏网络(Stacked Hourglass Network)在姿态估计中的关键设计与实现

本文深入解析了堆叠沙漏网络在人体姿态估计中的核心设计与实现。该网络通过独特的沙漏模块(Encoder-Decoder结构)进行多尺度特征融合,并利用残差模块构建深度网络。其精髓在于堆叠结构与即时监督策略,通过递归实现U型架构,最终输出热力图以精确定位关节点。文章还探讨了其训练技巧及与HRNet、Transformer等当代架构的对比。

weixin_28235513的博客 238

卷积神经网络的网络结构——Hourglass

《Stacked Hourglass Networks for Human Pose Estimation》 ECCV2016,密歇根大学的研究团队,Hourglass。 后续的很多人体姿态估计方法都借鉴了hourglass网络结构,并进行了改进,可以说hourglass的网络结构算是受到了业界的认可。 简介: 本文使用全卷积神经网络,对给定的单张RGB图像,输出人体关键点的精确像...

小花生的博客 6万+

Stacked Hourglass堆叠沙漏网络:姿态估计经典架构的工程细节与实战拆解

姿态估计是计算机视觉中的核心任务之一,其目标是从图像中定位人体关键点,广泛应用于动作识别、人机交互与医疗分析。多尺度特征融合作为提升定位精度的关键手段,通过同时捕捉全局上下文与局部细节,有效解决左右混淆与关节点定位模糊等难题。堆叠沙漏网络(Stacked Hourglass)正是这一思想的经典实现,它通过反复下采样与上采样,并结合中间监督机制,实现由粗到细的姿态估计。实际工程中,数据归一化、热图后处理、数据增强策略以及训练超参数的选择,往往比模型结构本身更显著地影响最终精度。本文从研究与实践结合的角度,深入

weixin_29045001的博客 245

Hourglass-Pytorch:沙漏网络,用于视网膜图像的拓扑提取

沙漏火炬 作者:谷玉超 电子邮件: 日期:2018-05-27 简介:该代码是的pytorch实现。 但是我还没有完成,它仍处于补丁培训步骤中。 概述 数据和预处理 您可以在此处下载原始数据。 然后,我们需要执行一些过程来生成我们的火车数据: 1,随机选择一个前景像素作为中心像素,然后在中心像素周围裁剪一个补丁(64 * 64)。 2,在边框上找到前景像素。 为了检测它们是否连接到中心像素,我们做了一条从边界到中心的最短路径。 如果此路径的成本小于INF(我们将背景INF设置为背景),则会在此像素周围生成一个高斯峰。 结果 左边是补丁数据,中间是标签,右边是我们的连接模型输出 训练 python patchConnectionTrain.py 可视化 张量板--logdir = log 如何使用 依存关系 此代码取决于以下库: Python 3.6 火炬 Tensorboa

Stacked Hourglass Networks - 堆叠沙漏网络结构详解

1.概述 姿态估计(pose estimation)在计算机视觉领域是一个非常重要的方向,人类动作理解,人机互动等等应用都需要精确的姿态识别。目前,绝大多数的2d姿态识别都是识别人体的关键点,比如,给定一张普通的RGB图像,算法会给出人体的脚踝,胳膊,面部等区域的关键点(keypoint)目前,基于stacked Hourglass Model的各种变种算法,牢牢占据了姿态检测的半壁江山,所以,...

4890

电磁波函数复数表示法:为什么物理学家偏爱e^(ikz)而非cos(kr-wt)?

本文深入解析了电磁波函数复数表示法(如e^(ikz))相较于传统余弦形式的巨大优势。通过欧拉公式,复数形式将复杂的三角运算转化为简洁的指数运算,在微分、积分、线性叠加及处理相位时展现出极高的计算效率,是物理学家和工程师分析波动现象的核心工具。

weixin_29094539的博客 498

堆叠沙漏网络(stacked hourglass network)

最近一直在准备3D人体重建的项目,所以在这里记录一下对hourglass net的一些浅显的理解。 本文将以SHN来表示来表示stacked hourglass network。SHN在人体姿势预测(human pose estimation)效果很好。也常常被用到和SMPL相关的项目的当中,比如SMPLR。 hourglass 网络可以在像素级的精度上来预测RGB图片中人体关节的位置,使用SHN的效果大致如下所示, 在计算机视觉领域,我们会发现使用一般的CNN网络结构就可以很好的对物品进行分类,也就是说

weixin_52668444的博客 5822

window下移动设备/硬盘报错位置不可用

移动硬盘指示灯亮,但电脑上不显示 报错信息 : 无法访问E:\。参数错误。 报错原因: 移动硬盘打不开提示参数错误,是因为这个H盘的文件系统内部结构损坏导致的。要怎么恢复里面的数据呢? https://jingyan.baidu.com/article/cb5d6105a80242005c2fe0c3.html 解决办法 : 不用格式化修复方法 方法一: 1、单击–开始–运行–输入cmd; 2、...

qq_40907977的博客 4928

BUSCO评估基因组的完整性

因为数据库收集的时候找的就是在不同的物种间都是单拷贝的基因,所以说在评估的物种里面应该也是单拷贝的状态才对。基因组层面评估:先去基因组上预测这些基因,再去做评估,如果说给他是一个注释好的基因集,这个时候提供的是一个蛋白集合,它就直接是去进行同源搜索,再去评估,看BUSCO数据库里面的这些单拷贝基因有或者无;首先,tblastn也是同源搜索,同源搜索之后,去对转录本进行读码框预测,预测完的结果还是去进行hmmsearch的搜索(hmmsearch是做蛋白质结构域搜索的),最终拿到BUSCO评估结果。

qq_64400864的博客 2959

(Stacked Hourglass Networks for Human Pose Estimation)用于人体姿势估计的堆叠沙漏网络

摘要 This work introduces(提出) a novel(新奇的) convolutional network architecture for the task of human pose estimation. 本文提出了一种新的用于人体姿态估计的卷积神经网络。 Features are processedacross(交叉处理) all scales and cons...

weixin_38241876的博客 2878

Matlab:常见涡旋光束仿真

代码: clc clear all close all %% 环形涡旋光束 N = 200; lambda = 632e-9; %波长为632nm k = 2*pi/lambda; %波数 w0 = 3; %束腰半径 x = linspace(-10,10,N); y = linspace(-10,10,N); [X,Y] = meshgrid(x,y); [t...

zzz997的博客 3万+

Stacked Hourglass Networks for Human Pose Estimation 用于人体姿态估计的堆叠沙漏网络

本文主要是介绍了一个在当时是新的姿态估计的网络结构。由于本人在研究自动驾驶领域中车道线识别时使用到此网络结构,故这里主要是对整个网络的结构和思想进行一个梳理,可以进一步明白后序一些基于此网络结构的工作,不涉及到 姿态估计领域 的一些见解和讨论,所以本文主要引出和介绍 hourglass 网络。

Joining667的博客 1748

开关电源-LLC基本原理

本文详细介绍了LLC谐振变换器的兴起原因、基本工作原理、变换器特点及拓扑结构。重点讨论了半桥、全桥LLC及其软开关技术,包括零电压开关(ZVS)和零电流开关(ZCS)。通过理解简单的谐振电路(RL、RC、LC)来阐述LLC如何改变电压增益,以及如何通过调节频率实现输出电压的稳定性。

让你爱上电路设计 2万+

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

Stacked Hourglass Networks - 堆叠沙漏网络结构

https://blog.youkuaiyun.com/wangzi371312/article/details/81174452

Lison_Zhu's Blog 1645

PCL 4PCS算法实现点云粗配准【2026最新版】

博客长期更新,本文最新更新时间为:2026年5月11日。

点云侠的博客 30万+

MMPose 人脸关键点检测实战:Hourglass 堆叠沙漏网络在 COCO-WholeBody-Face 数据集上的训练与评测

本文以 MMPose 仓库中 [td-hm_hourglass52_8xb32-60e_coco-wholebody-face-256x256.py](https://link.gitcode.com/i/90691740ffa8977d7079734fdbf10e21) 这一官方配置为线索,系统讲解如何用 Stacked Hourglass(堆叠沙漏)网络完成 COCO-WholeBody-Fa

gitblog_00251的博客 220

基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能

基于uniapp的PDA扫码枪APP开发实战,实现高效RFID读取功能,uniapp整合PDA硬件的实践分享,基于uniapp的PDA端RFID批量扫描方案开发

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

推荐项目:基于堆叠沙漏网络的人体姿态估计(Stacked Hourglass Networks)

推荐项目:基于堆叠沙漏网络的人体姿态估计(Stacked Hourglass Networks) 项目介绍 随着深度学习在计算机视觉领域的飞速发展,人体姿态估计成为了一个关键的研究方向。本项目实现了一种高效准确的模型——堆叠沙漏网络(Stacked Hourglass Networks),该模型由Alejandro Newell、Kaiyu Yang和Jia Deng共同提出,并发表于2016年的...

gitblog_00067的博客 701

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Hourglass网络

1.堆叠hourglass网络https://www.cnblogs.com/darkknightzh/p/11486185.html 2.hourglassnet网络解析https://blog.youkuaiyun.com/u013517182/article/details/99377536 3.Hourglass网络的理解和代码分析https://blog.youkuaiyun.com/weix...

浩瀚之水的专栏 796

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

hourglass论文_Stacked Hourglass networks

摘要Stacked Hourglass(Stacked HG, 堆叠沙漏)网络最早出现在2016年的<>一文,作者来自密西根大学。作者通过提出该网络结构来定位人体的关键点,从而完成人体姿态的估计。Stacked HG网络的作用是通过估计人体关键点的热度图来实现关键点的定位。目前,基于该网络结构的各种变种算法,牢牢占据了姿态检测的半壁江山,并且在人脸关键点定位领域,Stacked HG也...

weixin_35135480的博客 372

Body estimation 代码复现之:结合 keras 对 Stack Hourglass 网络架构分析(全网最详细分析)

文章目录网络架构代码一个 stack 内部的结构create_left_half_blocks(bottom, bottleneck, hglayer, num_channels)bottom_layer(lf8, bottleneck, hgid, num_channels) 网络架构 代码 from keras.models import * from keras.layers import * from keras.optimizers import Adam, RMSprop from keras.

qq_42902997的博客 1350
上一篇: 深度学习 残差块
下一篇: 深度学习资料整理目录,与大家一起讨论
何进哥哥
博客等级 码龄20年 230粉丝 6原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值