(CVPR-2014)DeepPose:通过深度神经网络进行人体姿态估计

news2024/11/13 9:01:28

DeepPose:通过深度神经网络进行人体姿态估计

论文题目:DeepPose: Human Pose Estimation via Deep Neural Networks

论文是谷歌发表在CVPR 2014的工作

论文地址

Abstract

我们提出了一种基于深度神经网络 (DNN) 的人体姿态估计方法。姿势估计被表述为基于 DNN 的针对身体关节的回归问题。我们提出了一系列这样的 DNN 回归器,从而产生高精度的姿态估计。该方法具有以整体方式推理姿势的优势,并且具有简单但强大的公式,它利用了深度学习的最新进展。我们对不同真实世界图像的四个学术基准进行了详细的实证分析,具有最先进或更好的性能。

1. Introduction

人体姿势估计问题,定义为人体关节定位问题,在计算机视觉界受到了广泛关注。在图 1 中,人们可以看到这个问题的一些挑战——清晰的发音、小而几乎看不见的关节、遮挡以及捕捉上下文的需要。

图 1. 除了关节的极端可变性外,许多关节几乎看不见。我们只能猜测左图中右臂的位置,因为我们看到了姿势的其余部分并预测了人的动作或活动。同样,右边人的左半身根本看不见。这些都是需要整体推理的例子。我们相信 DNN 自然可以提供这种类型的推理。

该领域的主流工作主要受到第一个挑战的推动,即需要在所有可能的关节姿势的大空间中进行搜索。基于部件的模型很自然地适用于模型表达 ([16, 8]),并且近年来提出了多种具有有效推理的模型 ([6, 19])。

然而,上述效率是以有限的表现力为代价实现的——使用局部检测器,这在许多情况下都是关于单个部分的,最重要的是只对身体部位之间所有相互作用的一小部分进行建模。如图 1 所示,这些局限性已经得到认可,并且已经提出了以整体方式推理姿势的方法 [15、21],但在现实世界的问题中收效甚微。

在这项工作中,我们归因于人体姿势估计的这种整体观点。我们利用深度学习的最新发展,提出了一种基于深度神经网络 (DNN) 的新算法。 DNN 在视觉分类任务 [14] 和最近的对象定位 [23、9] 上表现出色。然而,应用 DNN 精确定位关节物体的问题在很大程度上仍未得到解答。在本文中,我们试图阐明这个问题,并提出一个简单而强大的整体人体姿势估计公式作为 DNN。

我们将姿势估计制定为联合回归问题,并展示如何在 DNN 设置中成功地对其进行投射。每个身体关节的位置回归为使用完整图像和 7 层通用卷积 DNN 作为输入。这个公式有两个优点。首先,DNN 能够捕获每个身体关节的完整上下文——每个关节回归器使用完整图像作为信号。其次,与基于图形模型的方法相比,该方法的制定要简单得多——无需明确设计零件的特征表示和检测器;无需明确设计模型拓扑和关节之间的交互。相反,我们表明可以针对此问题学习通用的卷积 DNN。

此外,我们提出了一系列基于 DNN 的姿势预测器。这种级联可以提高关节定位的精度。从基于完整图像的初始姿态估计开始,我们学习基于 DNN 的回归器,它通过使用更高分辨率的子图像来改进联合预测。

我们根据所有报告的结果在四个广泛使用的基准上展示了最先进的结果或优于最先进的结果。我们表明,我们的方法在表现出强烈外观和发音变化的人物图像上表现良好。最后,我们通过跨数据集评估展示泛化性能。

2. Related Work

从计算机视觉 [16] 的早期就提倡将一般的铰接物体,特别是人体姿势表示为零件图的想法。由 Fishler 和 Elschlager [8] 引入的所谓的图形结构 (PSs) 由 Felzenszwalb 和 Huttenlocher [6] 使用距离变换技巧变得易于处理和实用。因此,随后开发了各种各样具有实际意义的基于 PS 的模型。

然而,上述易处理性具有基于树的姿势模型的局限性,该模型具有不依赖于图像数据的简单二元势。因此,研究的重点是在保持易处理性的同时丰富模型的表现力。早期实现这一目标的尝试是基于更丰富的部分检测器 [19、1、4]。

最近,提出了多种表达复杂关节关系的模型。 Yang 和 Ramanan [27] 使用部件的混合模型。 Johnson 和 Everingham [13] 研究了全模型规模的混合模型,通过混合 PS。 Tian 等人 [25] 在分层模型中捕获了更丰富的高阶空间关系。捕获高阶关系的另一种方法是通过图像相关的 PS 模型,它可以通过全局分类器 [26、20、18] 进行估计。

归因于我们以整体方式推理姿势的哲学的方法显示出有限的实用性。 Mori 和 Malik [15] 试图从一组标记图像中为每个测试图像找到最接近的样本并转移联合位置。 Shakhnarovich 等人 [21] 采用了类似的最近邻设置,但是他们使用了局部敏感散列。最近,Gkioxari 等人 [10] 提出了一种用于零件配置的半全局分类器。这个公式在真实世界的数据上显示出非常好的结果,但是,它基于线性分类器,其表现力不如我们的,并且仅在手臂上进行了测试。最后,Ionescu 等人 [11] 采用了姿势回归的想法,但是他们对 3D 姿势进行了推理。

最接近我们的工作使用卷积神经网络和邻域成分分析来回归到表示姿势的嵌入中的一个点 [24]。然而,这项工作没有使用级联网络。 DNN 回归器的级联已用于定位,但面部点 [22]。在面部姿势估计的相关问题上,Osadchy 等人 [17] 采用了一种基于神经网络的姿势嵌入,并使用对比损失进行了训练。

3. Deep Learning Model for Pose Estimation

我们使用以下符号。为了表达一个姿势,我们将所有 k k k个身体关节的位置编码为姿势向量,定义为 y = ( … , y i T , … ) T , i ∈ { 1 , … , k } \mathbf{y}=\left(\ldots, \mathbf{y}_i^T, \ldots\right)^T, i \in\{1, \ldots, k\} y=(,yiT,)T,i{1,,k},其中 y i \mathbf{y}_i yi包含第 i th  i^{\text {th }} ith 个关节的 x x x y y y坐标。标记图像由 ( x , y ) (x, \mathbf{y}) (x,y)表示,其中 x x x代表图像数据, y \mathbf{y} y是ground truth姿态向量。

此外,由于关节坐标是在绝对图像坐标中,因此将它们归一化是有益的。包围人体或其部分的框 b b b。在一般情况下,方框可以表示完整图像。这样的框由其中心 b c ∈ R 2 b_c \in \mathbb{R}^2 bcR2以及宽度 b w b_w bw和高度 b h : b = ( b c , b w , b h ) b_h: b=\left(b_c, b_w, b_h\right) bh:b=(bc,bw,bh)定义。然后关节 y i \mathbf{y}_i yi可以通过框中心平移并通过框大小缩放,我们称之为 b b b归一化:
N ( y i ; b ) = ( 1 / b w 0 0 1 / b h ) ( y i − b c ) ( 1 ) N\left(\mathbf{y}_i ; b\right)=\left(\begin{array}{cc} 1 / b_w & 0 \\ 0 & 1 / b_h \end{array}\right)\left(\mathbf{y}_i-b_c\right) \quad(1) N(yi;b)=(1/bw001/bh)(yibc)(1)
此外,我们可以对姿势向量 N ( y ; b ) = ( … , N ( y i ; b ) T , … ) T N(\mathbf{y} ; b)=\left(\ldots, N\left(\mathbf{y}_i ; b\right)^T, \ldots\right)^T N(y;b)=(,N(yi;b)T,)T的元素应用相同的归一化,从而得到归一化的姿势向量。最后,稍微滥用了符号,我们使用 N ( x ; b ) N(x ; b) N(x;b)来表示边界框 b \mathrm{b} b对图像 x x x的裁剪,这实际上通过边界框对图像进行了归一化。为简洁起见,我们用 N ( ⋅ ) N(\cdot) N()归一化表示,其中 b \mathrm{b} b是完整图像框。

3.1. Pose Estimation as DNN-based Regression


在这项工作中,我们将姿态估计问题视为回归,其中我们训练并使用函数 ψ ( x ; θ ) ∈ \psi(x ; \theta) \in ψ(x;θ) R 2 k \mathbb{R}^{2 k} R2k对于图像 x x x回归到归一化姿态向量,其中 θ \theta θ表示模型的参数.因此,使用等式(1)的归一化变换,绝对图像坐标中的姿态预测 y ∗ y^* y读取
y ∗ = N − 1 ( ψ ( N ( x ) ; θ ) ) y^*=N^{-1}(\psi(N(x) ; \theta)) y=N1(ψ(N(x);θ))
尽管公式简单,但该方法的强大功能和复杂性在于 ψ \psi ψ,它基于卷积深度神经网络 (DNN)。这样的卷积网络由几层组成——每一层都是线性变换,然后是非线性变换。第一层将预定义大小的图像作为输入,大小等于像素数乘以三个颜色通道。最后一层输出回归的目标值,在我们的例子中是 2 k 2 k 2k关节坐标。

我们将 ψ \psi ψ的体系结构基于 Krizhevsky 等人 [14] 的图像分类工作,因为它在目标定位方面也显示了出色的结果 [23]。简而言之,该网络由 7 层组成(见图 2 左)。 C C C表示卷积层,LRN 表示局部响应归一化层, P P P表示池化层, F F F表示全连接层。只有 C C C F F F层包含可学习的参数,而其余的是无参数的。 C C C层和 F F F层都由一个线性变换和一个非线性变换组成,在我们的例子中是一个整流线性单元。对于 C C C层,大小定义为宽度×高度×深度,其中前两个维度具有空间意义,而深度定义了过滤器的数量。如果我们将每一层的大小写在括号中,那么网络可以简明地描述为 C(55 × 55 × 96) − LRN − P − C(27 × 27 × 256) − LRN − P − C(13 × 13 × 384) − C(13 × 13 × 384) − C(13 × 13 × 256) − P − F (4096) − F (4096)。前两个 C 层的滤波器大小为 11×11 和 5×5,其余三个为 3×3。在三层之后应用池化,尽管分辨率降低,但有助于提高性能。网络的输入是一张 220 × 220 的图像,它通过 4 的步长输入网络。上述模型的参数总数约为40M。有关更多详细信息,我们建议读者参考 [14]。

图 2. 左:基于 DNN 的姿态回归的示意图。我们用相应的维度可视化网络层,其中卷积层为蓝色,而完全连接的层为绿色。我们不显示参数自由层。右图:在阶段 s,将细化回归量应用于子图像以细化前一阶段的预测。

使用通用 DNN 架构的动机是其在分类和定位问题上的出色结果。在实验部分,我们展示了这种通用架构可用于学习模型,从而在姿势估计方面也能达到最先进或更好的性能。此外,这样的模型是一个真正的整体模型——最终的联合位置估计是基于完整图像的复杂非线性变换。

此外,DNN 的使用避免了设计特定领域姿势模型的需要。相反,这样的模型和特征是从数据中学习的。尽管回归损失没有对关节之间的显式交互进行建模,但所有 7 个隐藏层都隐含地捕获了这些交互——所有内部特征都由所有关节回归器共享。

训练 与 [14] 的区别在于损失。我们在最后一个网络层之上训练线性回归,而不是分类损失,以通过最小化预测与真实姿势向量之间的 L 2 L_2 L2距离来预测姿势向量。由于地面真值姿势向量是在绝对图像坐标中定义的,并且姿势在不同图像的大小上有所不同,我们使用等式(1)中的归一化来归一化我们的训练集 D D D
D N = { ( N ( x ) , N ( y ) ) ∣ ( x , y ) ∈ D } D_N=\{(N(x), N(\mathbf{y})) \mid(x, \mathbf{y}) \in D\} DN={(N(x),N(y))(x,y)D}
那么获取最优网络参数的 L 2 L_2 L2为:
arg ⁡ min ⁡ θ ∑ ( x , y ) ∈ D N ∑ i = 1 k ∥ y i − ψ i ( x ; θ ) ∥ 2 2 ( 1 ) \arg \min _\theta \sum_{(x, y) \in D_N} \sum_{i=1}^k\left\|\mathbf{y}_i-\psi_i(x ; \theta)\right\|_2^2 \quad(1) argθmin(x,y)DNi=1kyiψi(x;θ)22(1)
为了清楚起见,我们写出了对单个关节的优化。应该注意的是,即使对于某些图像,并非所有关节都被标记,也可以使用上述目标。在这种情况下,总和中的相应项将被省略。

上述参数 θ \theta θ针对在分布式在线实现中使用反向传播进行了优化。对于大小为 128 的每个小批量,计算自适应梯度更新 [3]。学习率作为最重要的参数,设置为 0.0005。由于模型具有大量参数并且使用的数据集相对较小,我们使用大量随机翻译的图像裁剪(参见第 3.2 节)、左/右翻转以及 F F F层的 DropOut 正则化来扩充数据设置为 0.6。

3.2. Cascade of Pose Regressors


上一节中的姿势公式的优点是联合估计基于完整图像,因此依赖于上下文。然而,由于其固定输入大小为 220 × 220,网络查看细节的能力有限——它学习过滤器捕获粗尺度的姿势属性。这些对于估计粗略姿势是必要的,但不足以始终精确定位身体关节。

请注意,我们不能轻易增加输入大小,因为这会增加本已大量的参数。为了获得更好的精度,我们建议训练一系列姿势回归器。在第一阶段,级联通过估计上一节中概述的初始姿势开始。在后续阶段,训练额外的 DNN 回归器来预测关节位置从前一阶段到真实位置的位移。因此,每个后续阶段都可以被认为是对当前预测姿势的改进,如图 2 所示。

此外,每个后续阶段都使用预测的关节位置来关注图像的相关部分——在前一阶段预测的关节位置周围裁剪子图像,并将该关节的位姿位移回归量应用于该子图像。通过这种方式,后续的姿势回归器可以看到更高分辨率的图像,从而学习更精细尺度的特征,最终导致更高的精度。

我们对级联的所有阶段使用相同的网络架构,但学习不同的网络参数。对于全 S S S级联级的级 s ∈ { 1 , … , S } s \in\{1, \ldots, S\} s{1,,S},我们用 θ s \theta_s θs表示学习的网络参数。因此,姿态位移回归器的读数为 ψ ( x ; θ s ) \psi\left(x ; \theta_s\right) ψ(x;θs)。为了细化给定的关节位置 y i \mathbf{y}_i yi,我们将考虑捕捉 y i \mathbf{y}_i yi周围的子图像的关节边界框 y i : b i ( y ; σ ) = \mathbf{y}_i: b_i(\mathbf{y} ; \sigma)= yi:bi(y;σ)= ( y i , σ diam ⁡ ( y ) , σ diam ⁡ ( y ) ) \left(\mathbf{y}_i, \sigma \operatorname{diam}(\mathbf{y}), \sigma \operatorname{diam}(\mathbf{y})\right) (yi,σdiam(y),σdiam(y)),以第 i i i个关节为中心,以 σ \sigma σ缩放的姿势直径为维度。姿势的直径直径 ( y ) (\mathbf{y}) (y)被定义为人体躯干上相对关节(如左肩和右髋)之间的距离,并取决于具体的姿势定义和数据集。

使用上面的符号,在阶段s=1,我们从包围完整图像或由人检测器获得的边界框 b 0 b^0 b0开始。我们得到一个初始姿势:
 Stage 1:  y 1 ← N − 1 ( ψ ( N ( x ; b 0 ) ; θ 1 ) ; b 0 ) \text { Stage 1: } \quad \mathbf{y}^1 \leftarrow N^{-1}\left(\psi\left(N\left(x ; b^0\right) ; \theta_1\right) ; b^0\right)  Stage 1: y1N1(ψ(N(x;b0);θ1);b0)
在每个后续阶段 s ≥ 2 s \geq 2 s2,对于所有关节 i ∈ { 1 , … , k } i \in\{1, \ldots, k\} i{1,,k}我们首先回归细化位移 y i s − \mathbf{y}_i^s- yis y i ( s − 1 ) \mathbf{y}_i^{(s-1)} yi(s1),方法是对前一阶段 ( s − 1 ) (s-1) (s1) b i ( s − 1 ) b_i^{(s-1)} bi(s1)定义的子图像应用回归量。然后,我们估计新的联合框 b i s b_i^s bis
 Stage  s : y i s ← y i ( s − 1 ) + N − 1 ( ψ i ( N ( x ; b ) ; θ s ) ; b ) ( 6 )  for  b = b i ( s − 1 ) b i s ← ( y i s , σ diam ⁡ ( y s ) , σ diam ⁡ ( y s ) ) \begin{aligned} & \text { Stage } s: \quad \mathbf{y}_i^s \leftarrow \mathbf{y}_i^{(s-1)}+N^{-1}\left(\psi_i\left(N(x ; b) ; \theta_s\right) ; b\right)(6) \\ & \text { for } b=b_i^{(s-1)} \\ & b_i^s \leftarrow\left(\mathbf{y}_i^s, \sigma \operatorname{diam}\left(\mathbf{y}^s\right), \sigma \operatorname{diam}\left(\mathbf{y}^s\right)\right) \\ & \end{aligned}  Stage s:yisyi(s1)+N1(ψi(N(x;b);θs);b)(6) for b=bi(s1)bis(yis,σdiam(ys),σdiam(ys))
我们将级联应用于固定数量的阶段 S S S,如第4.1节所述确定。

训练 网络参数 θ 1 \theta_1 θ1的训练如第3.1节等式(4)所述。.在 s ≥ 2 s \geq 2 s2的后续阶段,训练是完全相同的,只有一个重要的区别。来自训练示例 ( x , y ) (x, \mathbf{y}) (x,y)的每个关节 i i i使用不同的边界框 ( y i ( s − 1 ) , σ diam ⁡ ( y ( s − 1 ) ) , σ diam ⁡ ( y ( s − 1 ) ) ) \left(\mathbf{y}_i^{(s-1)}, \sigma \operatorname{diam}\left(\mathbf{y}^{(s-1)}\right), \sigma \operatorname{diam}\left(\mathbf{y}^{(s-1)}\right)\right) (yi(s1),σdiam(y(s1)),σdiam(y(s1)))归一化——一个以从前一阶段获得的相同关节的预测为中心——因此我们根据前一阶段的模型调节该阶段的训练。

由于深度学习方法容量大,我们通过对每个图像和关节使用多个归一化来扩充训练数据。我们不是只使用前一阶段的预测,而是生成模拟预测。这是通过用从二维正态分布 N i ( s − 1 ) \mathcal{N}_i^{(s-1)} Ni(s1)随机采样的向量随机置换关节 i i i的地面真实位置来完成的,均值和方差等于观察到的位移的均值和方差 ( y i ( s − 1 ) − y i ) \left(\mathbf{y}_i^{(s-1)}-\mathbf{y}_i\right) (yi(s1)yi)遍及训练数据中的所有示例。完整的增强训练数据可以通过首先从原始数据中统一采样一个示例和一个关节,然后根据来自 N i ( s − 1 ) \mathcal{N}_i^{(s-1)} Ni(s1)的采样位移 δ \delta δ生成模拟预测来定义:
D A s = { ( N ( x ; b ) , N ( y i ; b ) ) ∣ ( x , y i ) ∼ D , δ ∼ N i ( s − 1 ) , b = ( y i + δ , σ diam ⁡ ( y ) ) } \begin{aligned} D_A^s= & \left\{\left(N(x ; b), N\left(\mathbf{y}_i ; b\right)\right) \mid\right. \\ & \left(x, \mathbf{y}_i\right) \sim D, \delta \sim \mathcal{N}_i^{(s-1)}, \\ & \left.b=\left(\mathbf{y}_i+\delta, \sigma \operatorname{diam}(\mathbf{y})\right)\right\} \end{aligned} DAs={(N(x;b),N(yi;b))(x,yi)D,δNi(s1),b=(yi+δ,σdiam(y))}
级联阶段 s s s的训练目标按照方程式 (4) 完成,特别注意为每个关节使用正确的归一化:
θ s = arg ⁡ min ⁡ θ ∑ ( x , y i ) ∈ D A s ∥ y i − ψ i ( x ; θ ) ∥ 2 2 \theta_s=\arg \min _\theta \sum_{\left(x, \mathbf{y}_i\right) \in D_A^s}\left\|\mathbf{y}_i-\psi_i(x ; \theta)\right\|_2^2 θs=argθmin(x,yi)DAsyiψi(x;θ)22

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

202318读书笔记|《芭蕉·芜村·一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来!

202318读书笔记|《芭蕉芜村一茶:俳句三圣新译300》——樱花——让一整个春夜亮起来! 《芭蕉芜村一茶:俳句三圣新译300》诗歌,词,短歌,俳句我都喜欢,读起来轻松明快! 松尾…

【代码实验】YOLO V7利用pycocotools进行评估时的一些问题

文章目录 一、无法使用pycocotools进行评估二、使用pycocotools计算的结果与YOLO自身的mAP差异较大的原因 一、无法使用pycocotools进行评估 yolov7有自己的计算mAP方式,但是在使用pycocotools进行test时,出现了pycocotools unable to run: Results do …

Java关键词synchronized

目录 一、通过卖票系统观察多线程的安全隐患 二、synchronized的基本知识 1.使用synchronized的原因 2.synchronized的作用 3.synchronized的基本格式 a.synchronized加在方法名前 b.synchronized用在方法中 4. Java锁机制 5.synchronized注意事项 三、使用synchronize…

【可变参数列表如何可变?】

可变参数列表 本章重点 学会使用可变参数列表的使用与原理 函数传参补充知识 如果函数没有形式参数,仍然可以给函数传递参数。在c语言中,只要发生了函数调用并且传递了函数,必定形成临时变量。所谓的临时拷贝本质就是在栈帧内部形成的&#…

Tcl常用命令备忘录-基础篇

一、置换 1、变量置换 在Tcl中,$符号可以用来引用变量。变量置换可以用来将变量的值嵌入到代码中。例如: set name "Tom" puts "Hello, $name!"这个示例中,变量$name的值会在输出语句中被替换为"Tom"。 2…

腾讯云服务器镜像市场快速搭建WordPress博客网站教程

通过腾讯云服务器的镜像市场搭建WordPress网站非常简单,不需要手动配置WP所需的Web环境,一键即可安装WordPress博客,腾讯云百科使用腾讯云服务器通过镜像市场的WordPress镜像搭建WP网站教程: 目录 腾讯云服务器通过市场镜像安装…

SpringMvc拦截器和手写模拟SpringMvc工作流程源码详解

目录 1. SpringMvc简介 1.1 什么是MVC 1.2 什么是SpringMvc 1.3 SpringMvc 能干什么 1.4 SpringMvc 工作流程 2. SpringMvc拦截器和过滤器 2.1 拦截器 2.1.1 拦截器作用 2.1.2 拦截器和过滤器的区别 2.1.3 拦截器方法说明 2.1.4 多个拦截器执行顺序 2.1.5 自定义拦…

29 虚拟地址到物理地址的转换

前言 呵呵 这是 linux 中内存管理中很基础的一环 用户程序 操作的地址都是虚拟地址, 虚拟地址通过 mmu 转换为物理地址 用户程序 看到的地址都是一个完整的世界, 只有具体需要使用的时候 产生缺页中断, 然后 分配具体的物理页 这里 要说的就是 虚拟地址 到 物理地址 的转…

1001router6-react

文章目录 1 一级路由2 Navigate3 NavLink 自定义高亮样式4 useRoutes()5 嵌套路由6 路由传参6.1 传递params参数6.2 传递search参数6.3 传递state参数 7 编程式导航7.1 路由跳转7.2 前进、后退 8 钩子函数8.1 useInRouterContext()8.2 useNavigationType()8.3 useOutlet()8.4 u…

手写Spring框架---AOP实现

目录 容器是OOP的高级工具 系统需求 关注点分离Concern Separation 原有实现 AOP的成员 Advice的种类 单个Aspect的执行顺序 多个Aspect的执行顺序 Introduction-引入型Advice 代理模式 JDK动态代理 Spring AOP的实现原理之JDK动态代理 Spring AOP的实现原理之CGL…

CSS基础学习--19 下拉菜单

一、基本下拉菜单 当鼠标移动到指定元素上时&#xff0c;会出现下拉菜单 <!DOCTYPE html> <html> <head> <title>下拉菜单实例</title> <meta charset"utf-8"> <style> .dropdown {position: relative;display: inline-…

UnityVR-项目的管理阶层

目录 概述 项目的总体架构 单例基类 继承MonoBehaviour的单例基类 概述 一个具备一定规模的项目&#xff0c;一般都需要由不同人员合作完成&#xff0c;每个人的想法风格不相同&#xff0c;如果一开始没有定下基本的框架&#xff0c;会让实现时混乱不堪&#xff0c;而且无法…

【CesiumJS入门】(5)GooJSON的加载、更新、监听与销毁——GeoJsonDataSource应用

前言 本篇&#xff0c;我们将较完整得介绍Cesium中GeoJSON/TopoJSON相关的方法。 GeoJSON规范地址&#xff1a;RFC 7946: The GeoJSON Format (rfc-editor.org) GeoJSON在线绘制&#xff1a;geojson.io CesiumJS提供了一个名为DataSource的类&#xff0c;它主要是用来加载和展…

Java-API简析_java.util.UUID类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131270140 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

《计算之魂》读书笔记——递归与堆栈的关系

进入梅雨季节&#xff0c;一周末雨水连绵不绝&#xff0c;空气中泛着潮湿的凉爽。这个天气最适合找个角落&#xff0c;安安静静地读书写字。 继续读《计算之魂》&#xff0c;前次读到递归&#xff0c;今天则了解递归地数据结构实现。递归算法的层层实现&#xff0c;需要保留从…

大数据周会-本周学习内容总结018

开会时间&#xff1a;2023.06.18 15:00 线下会议 01【调研-数据分析&#xff08;质量、ETL、可视化&#xff09;】 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform…

Tcl常用命令备忘录-正则命令篇

正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中&#xff0c;可以使用正则表达式对字符串进行匹配、查找和替换。 regexp 语法&#xff1a; regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...? 其中&#xff0c;?选项?为可选项&#xff0c;…

基于蒙特卡洛法的规模化电动汽车充电负荷预测(PythonMatlab实现)

目录 0 概述 1 蒙特卡洛模拟方法介绍 2 规模化电动汽车充电负荷预测计算方法 3 完整代码 0 概述 对于本文的研究,依据不同用途电动汽车影响因素的分布函数和设定参数&#xff0c;采用蒙特卡洛法,对各用途电动汽车的日行驶里程、起始充电时间概率分布参数进行随机抽样&#xff0…

linuxOPS系统服务_Linux下软件的安装方式之源码安装

Linux下有哪些软件安装方式 ① RPM软件包管理&#xff08;软件名称.rpm&#xff09; ② YUM软件包管理&#xff08;使用yum命令install 软件名称&#xff09; > 下载 安装一体化 ③ 源码编译安装&#xff08;相对来说是最复杂的一种方式&#xff09; 软件包类型 ☆ 二…

十二、docker学习-docker核心docker网络之bridge网络(2)

bridge网络 bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接&#xff0c;这样容器内部才能访问互联网。 # 查看docker0网络&#xff0c;在默认环境中&#xff0c;一个名为docker0的linux b…