Removing the Bias of Integral Pose Regression 阅读笔记

news2024/12/25 9:03:44

消除积分姿态回归的偏差

ICCV2021
论文链接
补充材料链接
参考链接

摘要: 尽管姿态估计的回归法更直观,但由于热图法的优越性能,使其在2D人体姿态估计中占主导地位。积分回归法在架构上使用隐式热图,拉近了热图法与回归法。这就引出了一个问题——检测真的优于回归吗?本文研究了这两个方法最关键的区别:监督差异。在此过程中,我们发现在softmax后取期望,使积分姿态回归存在潜在偏差。为了抵消偏差,我们提出了一种能够提高积分姿态回归精度的补偿方法,并进一步提出了一种组合检测和偏差补偿的回归方法,该方法在几乎没有添加组件的情况下显著优于sota baseline。

文章目录

  • 消除积分姿态回归的偏差
  • 1. Introduction
  • 2. Related Work
  • 3. Pose Estimation Preliminaries
    • 3.1. Detection-Based Method
    • 3.2. Integral Regression Method
  • 4. Bias-Compensated Integral Pose Regression
    • 4.1. Derivation of Bias 偏差推导
    • 4.2. Bias Compensation
    • 4.3. Joint Framework
  • 5. Experiments
    • 5.1. Datasets and Implementation Details
    • 5.2. Performance Comparison
      • 5.2.1 Architecture design
      • 5.2.2 Influencing Factors
      • 5.2.3 Comparison Results
    • 5.3. Comparison with State-of-the-Art
    • 5.4. Ablation Study
  • 6. Conclusion
  • 7. Supplementary Material
    • A. Derivation of Bias
    • B. Experiment Details


1. Introduction

姿态估计的热图法保持架构的全卷积,在整个编码和解码过程中保留空间结构使得其性能优于坐标回归法。标准热图法使用 argmax 函数将输出热图解码为关键点坐标,但 argmax 有两个缺陷:① 不可微 ② 将估计坐标的分辨率固定为热图本身的分辨率。一个替代方案是采用带期望的 softmax 来解码热图,softmax 和期望函数都可微,因此既能保留完全卷积架构的优点,又能端到端训练,人体姿态估计将该方法称为积分姿态估计 integral pose estimation
那么,基于热图的检测和积分回归哪个更适合2D姿态估计呢?两者最大区别是:积分法的收敛更慢,与积分回归的关节坐标相比,显式热图标签的监督更密集。本文表明:慢收敛也可能诱导积分回归的偏差,因为softmax与期望的组合可能会 shift 热图与gt坐标位置的对齐,反过来也限制了神经网络的学习。通过补偿偏差,我们改进了积分回归方法的学习和性能。
本文在比较性能时,深入挖掘当前基准中的变化因素,将不同的因素分开,超越了现行的单一AP和PCK平均值报告标准。我们发现:积分回归在“Hard”模式(smaller size, fewer joints, or more occlusion)下优于热图。但这些影响比较模糊,因为 hard 样本构成了数据集尾部。
最后,为了保留热图法和积分回归的优点,我们提出了一个组合学习框架:将偏差补偿纳入端到端的积分回归学习中,初始阶段利用基于检测的损失进行密集监督。 我们的贡献如下:

  • 推导出 softmax 组合期望的积分姿态回归的偏差。
  • 提出一种简单的补偿方案来抵消这种偏差,它可以提升训练并提高积分回归方法的性能。
  • 分析了基于检测和基于回归的人体姿态估计方法在不同变化因素下的性能差异。回归方法在关节较少、遮挡较多和分辨率较低的 “Hard” 情况下表现更好。
  • 提出了一种联合检测和回归的偏差补偿框架,该框架保持了快收敛与hard情况下高性能的优点,在MS COCO和MPII的2D姿态估计以及RHD的2D, 3D手势姿态估计上实现了sota。

2. Related Work

略。
本文并非为姿态估计开发新架构,而是研究了人体姿态估计回归法的潜在缺陷可能是 softmax结合期望值产生的偏差。我们的工作类似于处理量化误差的DARK和处理偏置数据的UDP。

3. Pose Estimation Preliminaries

采用 top-down 方法,cropped 人体图像 I 作为输入,标准的 2D 人体姿态估计利用一个 encoder-decoder 框架,encoder 通过一系列卷积层将图像缩小为低分辨率特征图;然后 decoder 对特征图进行上采样形成最终输出 H ∈ R h × w × K H∈ R^{h×w×K} HRh×w×K,其中h和w是输入图像 I 的 shape scale factor,K个通道代表 K 个关节的输出。

3.1. Detection-Based Method

基于检测的方法中,H 显式表示为热图。推理过程通过argmax运算来估计关节 k 的坐标 J d J^d Jd:
在这里插入图片描述
p表示热图的像素坐标。若 H与关节位置的概率密度成比例,则该公式表示在热图上取最大似然。实际中,为减少量化误差,最终坐标估计取在热图最高和次高响应之间。
训练期间,以 k 个 GT 关节点 J g t J^{gt} Jgt 为小高斯中心生成的 k 张 GT 热图 H g t H^{gt} Hgt H g t H^{gt} Hgt 和估计热图 H 间逐像素作MSE计算 k-th 关节的损失:
在这里插入图片描述

3.2. Integral Regression Method

积分回归法中,H 并非明确的热图,通过应用 softmax 进行归一化,然后求期望,将其解码为坐标。具体而言,通过softmax函数将关节 k 的估计热图 H 归一化为 H ~ \widetilde{H} H

在这里插入图片描述
β 是一个平滑参数,β越小,softmax的结果越“扁平”,越大则结果越“尖锐”。softmax 确保 H ~ \widetilde{H} H 元素总和为1,因此当取期望值来估计坐标 J r J^r Jr 时, H ~ \widetilde{H} H 可以直接用作概率密度:
在这里插入图片描述
采用期望值而非 argmax 的主要优点是计算期望值可微。训练期间采用关节坐标间的L1距离作loss:
在这里插入图片描述

4. Bias-Compensated Integral Pose Regression

4.1. Derivation of Bias 偏差推导

用一个归一化概率密度函数来取期望值,softmax函数用于归一化H,且 softmax 也很密集,它将非零值分配给 H ~ k \widetilde{H}_k H k中的所有像素,即使是H的零元素(考虑 eq(3)的分子: exp(β·0) =1)。给H的零值像素(或接近零值的像素)赋非零值反过来也 contributes to 预期值,并使估计坐标 J r J^r Jr偏离热图中心。如图1所示,关节坐标离中心越远,偏差越大。
在这里插入图片描述

图1:积分回归偏差图解,白色正方形表示预测关节位置。偏差,即热图响应和预测位置间的差异,由图可以看出,热图响应越偏离中心,β值越小,偏差越大。只有当热图响应居中时才没有偏差,本文提出通过将热图划分为单个区域(左上热图的Ω1至Ω4)来补偿偏差,以确保热图响应居中。

在softmax中选择适当的β值,可以稍微减小偏差。β越小,函数分布的概率密度越大,H中零像素的影响越大,β越大,函数将密度集中在H的最大值附近,但当β趋近无穷大时,Softmax就会收敛到Argmax形式,函数就变成不可导了,且随着 β 增大,远离中心点像素上的梯度会变小,直到消失。 因此需要在偏差与学习梯度间进行 trade-off 。
注意,解码器可以通过学习估计一个具有 densities shifted 甚至远离中心的H来补偿这种偏差。但这样网络必须考虑关节从热图中心的偏移,为神经网络增加了额外的学习挑战。从图2中 COCO 训练数据集的关节位置分布可以看出这增加了偏差值额外变化的重要来源。训练常采用的数据增强可能会进一步加剧这种情况。
在这里插入图片描述

图2.COCO训练集关节位置分布。通过关节到中心的最大距离来正则化距离。当 eq(3)的 β=10时,距中心{0.2, 0.5, 0.8}的归一化关节距离导致一张 64×48热图的偏差分别为{0.2, 0.7, 1.2}px。使用较小的β会加剧偏差。

4.2. Bias Compensation

如图1所示,只有概率密度位于热图中心时才不存在偏差,自然想到直接移动坐标系并将热图置于gt关节坐标中心来补偿偏差,但这需要知道gt 关节的位置,这对于训练可行,但不适于推理。
问题根源在于:期望值趋近于中央,响应值不够大使得Soft-Argmax方法不准,而期望值趋近于中央的原因在于,Softmax后出现的多余的非零值,且这个非零值只能通过增大 β 尽可能地缩小,无法消除,甚至在这个过程中还会产生副作用(回传导数消失)。那么,换个思路,求出这些非零值,然后从结果期望值里减去这些非零值,就相当于切掉了它们。具体而言,假设我们希望恢复的真实坐标位置 (xo,yo) (即响应值)位于热图的左上象限,假设响应值符合高斯分布,根据响应最大值点两倍的宽度,把特征图划分成四个区域:Ω1包含(xo,yo),Ω2、Ω3、Ω4表示顺时针方向的其他区域(参见图1中的左上图),基于这一划分,我们可以将 eq(4) 中定义的期望划分如下:
在这里插入图片描述
一旦经过Softmax,原本都是0值的2、3、4象限区域瞬间会被非零值填满,而对于第1象限区域,由于响应值正处于区域的中央,因此不论响应值大小,该区域的估计期望值都是准确的。假设(xo,yo) 完全包含在Ω1中,Ω2至Ω4只包含零或接近零的元素,这样,eq(6) 仅第一项对 J r o J^{ro} Jro 有用,关节位置可以估计为 eq(6) 第一项的 scale 版本:
在这里插入图片描述
J r o J^{ro} Jro 定义为(xo,yo)的估计值,即偏差补偿关节位置,上述公式是隐含的,因为Ω1取决于(xo, yo),通过代数重排,可以将 J r o J^{ro} Jro公式化为 J r J^r Jr的函数:

在这里插入图片描述
上式 C 是softmax中使用的归一化常数,即 eq(3) 的分母,C是β的函数:
在这里插入图片描述
从eq8,9 可以看出,当C较大时,scale因子接近1,偏差接近0,可忽略不计,使用较大的β时,情况正好如此;但C较小时,偏差变得更大。因此,若β不够大,网络必须学习非常大且集中的H§ 值进行补偿以估计正确的 J r J^r Jr,这种相互作用使网络学习非常困难,从而导致积分回归法的慢收敛。补充材料描述了xo、yo位于其他象限的情况。
eq(8) 可以恢复偏差补偿关节位置 J r o J^{ro} Jro,且无需已知GT关节坐标,因此推理过程中,可以基于 eq(4) 中的期望值直接补偿有偏差的关节位置 J r J^r Jr。训练期间也可以这样做,只需使用 J r o J^{ro} Jro 更新 eq(5) 的L1损失,即:
在这里插入图片描述
我们的方案保留softmax,并补偿期望值

4.3. Joint Framework

本文提出了一种新的结合偏差补偿的姿态估计方法,能同时实现端到端训练和快速收敛。基于检测的方法中使用 Gaussian 标签能够提供密集监督和空间信息,从而使训练有效。 但DSNT表明:pixel-wise L2损失迫使热图与 gt 完全相同,这并非我们真正关心的指标,因为该损失不能确保持续提高预测关节的准确性。
因此,我们使用基于检测的方法的逐像素监督(eq2)作为额外损失:
在这里插入图片描述
随时间减少λ,在训练后期最小化 L d e L_{de} Lde 的影响,并允许网络学习任意形状的隐式热图。简单起见,对 λ(t) 使用简单的阶跃函数:t<To, λ(t) =1; t>=To, λ(t)=0。联合框架的关键目的是加快训练,同时保持隐式热图的自由度,允许网络学习能够定位正确坐标位置的任何分布(而非高斯分布)。

5. Experiments

5.1. Datasets and Implementation Details

数据集与评估准则:使用COCO和MPII以及人手姿态数据集:RHD。
对COCO数据集使用OKS评估,OKS利用人体实例面积来归一化预测位置和 GT 位置间的绝对误差。使用主要竞争指标:10 OKS个阈值的平均精度(AP)来评估性能。实验还报告了归一化前的值,即预测和GT值间的平方欧几里德距离,将其表示为端点误差(EPE)。
MPII数据集使用PCK和EPE进行评估。
RHD数据集使用AUC和EPE进行评估。
实施细节:基于 Pytorch 进行使用,并使用Adam进行模型训练。使用具有不同 backbone 的SBL和HRNet 作baseline,例如SBL-ResNet50和HRNet-W32。公平起见,重跑了基于检测的方法。默认β=10,SBL的 T0 = 120 epoch,HRNet的T0=190 epoch。

5.2. Performance Comparison

5.2.1 Architecture design

为了直接比较基于检测和回归的方法,应排除影响最终性能的其他影响因素。这两种方法的框架基本相同:编码步骤从输入图像中提取特征,而解码步骤将特征转换回显式或隐式热图表示,区别仅在于损失。检测方法使用MSE损失来监督显式热图,而回归方法直接监督隐式热图取期望生成的预测关节位置。
实施比较时应用现成的模型:SBL或HRNet,作为共享的 encoding-decoding 架构来生成所有K个关键点的热图H。对于检测,使用 eq2 训练模型,使用 eq1的argmax获取最终预测结果,对于回归,采用 sota Integral human pose regression 法通过 eq4 获得关节点坐标,使用 eq5 训练模型。

5.2.2 Influencing Factors

当两种方法(包括提取和表示特征)的 capacity 相同时,两者间的区别仅在于将热图转换为坐标和监督信号的方式,因此,可以比较两种方法在训练和推理过程中的结果来研究差异。
具体而言,训练过程评估验证集或测试集的上升速度,推理过程比较验证集或测试集上不同类型样本的泛化能力。类似 [Benchmarking and error diagnosis in multi-instance pose estimation],根据图像中不同的人体分别来划分基准,考虑3个因素:当前关键点的数量(11-17、6-10、1-5)、遮挡率(<10%、10-50%、>50%)、输入bbox的最大尺度 (> 128px, 96-128px, 64-96px, 32-64px),图3所示为这三个因素的划分示例。
在这里插入图片描述

图3:根据输入bbox大小、场景中存在的关节数量和当前关节的遮挡百分比来 split COCO数据集。从左到右的大致对应姿态估计的难度。

5.2.3 Comparison Results

SBL-ResNet50和HRNet-W32用作 baseline 来评估COCO val set的训练效率和泛化误差。
训练比较:随着迭代的增加,AP的上升速度可以评估训练效率。图4可以观察到检测和回归最后达到的精度相当,但检测法在40个epoch后能够达到可观的结果,但回归法需要90个epoch(检测法比回归法的收敛快)。原因可能是检测法应用整张空间特征图进行密集监督,而回归法仅对预期的坐标位置进行监督,因此回归法潜在的特征图是任意的,这种任意性虽热可以解释为是有益的,但确实增加了训练难度。
在这里插入图片描述

图4:尽管检测和回归法最终收敛到相似的值,但检测法在初始阶段的训练更有效。

推理比较:表1最后一列的结果可以看出,回归法在微小姿态和多遮挡情况下表现得更好,这些情况更 hard ;此外,当前关键点的数量改变时,两种方法的性能不同,简而言之,回归法在hard模式下表现更好。

在这里插入图片描述

表1:COCO val set 上采用SBL backbone的EPE比较,根据当前关节数量、输入大小和遮挡百分比分离数据集。数据格式为检测/回归。

图5中可以看出,我们的方法在 hard 情况下优于回归方法,在easy情况下优于检测方法。

在这里插入图片描述

图5:我们的方法(S)与检测(D)和回归(R)在划分的子基准上EPE的比较。我们的方法表现最好,在9个条件中有7个条件具有最低的EPE。

5.3. Comparison with State-of-the-Art

MS COCO评估。表2表3,在COCO val 和 test-dev set上的比较结果可看出,我们的方法与检测法性能相当,并很大程度上超过了回归法。
在这里插入图片描述

表2:COCO val set上我们的方法与sota方法的比较。“D”和“R”分别代表检测和回归法。我们提出的方法优于基于检测和回归的baseline。

在这里插入图片描述

表3:COCO test-dev上我们的方法与sota方法的比较。“D”和“R”分别代表检测和回归法。我们的方法与检测法性能相当,且很大程度超出了回归法的性能。

MPII的评估。结果如表4所示:
在这里插入图片描述

表4:MPII val set的比较。我们的方法显著改进了baseline。

RHD的评估,结果如表5所示。
在这里插入图片描述

表5:RHD测试集上手势估计的 AUC和EPE比较。我们的方法优于baseline和两种检测法。

表6为不同方法的结果,检测 loss 不仅加快了训练,而且提高了性能。hard 样本的EPE结果表明我们的方法优于检测法。
在这里插入图片描述

表6:COCO val set 上评估我们方法的每个组件。EPEH表示“hard”样本的EPE,即关节数量少([0, 5]) ,严重遮挡(>50%) 的样本。对于Lde,除非另有说明,否则 To=120,λ(t)=1。我们提出的组件提高了baseline的性能,尤其在hard样本上。β=10的组合最佳。

5.4. Ablation Study

我们的方法有两个新组件:偏差补偿和正则化项。使用SBL-ResNet-50作为backbone,输入大小为256×192,在COCO val set上进行消融实验。图6可以看出每个组成部分都会加快训练速度。同时,表6的结果表明每个组件都有助于提高性能。

在这里插入图片描述

图6:每个组件对COCO val set 收敛速度的影响。我们提出的组件加快了回归法的训练速度,接近检测方法。

6. Conclusion

本文的主要贡献是揭示了积分姿态回归方法的偏差,首次系统性比较了检测和回归方法。并结合这两种方法的优势,补偿积分回归中的偏差。COCO、MPII和RHD上的实验结果表明,我们的方法作为插件能够大大提高baseline性能。

7. Supplementary Material

A. Derivation of Bias

如 main paper 中所定义的,通过 soft-argmax函数获得归一化热图,如下所示:
在这里插入图片描述
H§ 是网络的输出热图,由像素范围Ω内的像素p索引。方便起见,eq1的分母定义为变量C:
在这里插入图片描述
如图1所示,进一步将热图像素Ω 分成四个section: {Ω1.Ω2.Ω3.Ω4} 。定义Ω1使真实关节位置 (xo,yo) 为该 section 的期望值和中心。
在这里插入图片描述

图1:将热图划分为四个 section 以估计偏差。假设Ω1包含整个相应,且真实关节坐标位于Ω1中心,而Ω2,Ω3和Ω4(接近)零值。为进行可视化,采用高斯热图,但实际并不对热图密度做任何形式的假设。

我们工作中的关键假设是:真实关节位置(xo,yo)定位良好且在H中被完全包含在 Ω1 内。 因此,Ω2至Ω4只包含零或接近零的元素,代入eq1,分子部分接近1,则这4部分可以如下表示:

在这里插入图片描述
偏差关节位置 J r ( x r , y r ) J^r(x_r, y_r) Jr(xr,yr) 定义为整张热图的期望值,可进一步分解为四个部分:
在这里插入图片描述
其中, J 1 = ( x o , y o ) , J 2 = ( x o , y o + w / 2 ) , J 3 = ( x o + h / 2 , w / 2 ) , J 4 = ( x o + h / 2 , y o + w / 2 ) J_1=(x_o, y_o), J_2 = (x_o, y_o + w/2 ), J_3 = (x_o + h/2 , w/2), J_4 = (x_o + h/2 , y_o + w/2 ) J1=(xo,yo),J2=(xo,yo+w/2),J3=(xo+h/2,w/2),J4=(xo+h/2,yo+w/2),由于每个区域的对称性,可以将权重w2到w4表示为w、h和C的表达式:

在这里插入图片描述
将 eq7 中的权重代入 eq8,且已知 w1=1−w2−w3−w4,可得以下线性方程:
在这里插入图片描述
尽管是从(xo,yo)位于Ω1中推导的,但当(xo,yo) 位于其他三个象限时,eq9 同样适用。观察 eq9,if xo < h/2 , then xr > xo,推动坐标向中心移动;if xo > h/2 , then xr < xo,也使得预测更接近中心,yo与xo类似。因此,该方程适用于所有象限。
因此,可以通过以下形式从Jr预测Jo:
在这里插入图片描述

B. Experiment Details

表1为HRNet 在不同子基准上的性能。
在这里插入图片描述

表1:COCO val set上 HRNet 的EPE比较。De和Re分别指检测法和回归法。

表2表3显示了COCO val set上被 proposal factor 划分的每个子基准中的人体数量。
在这里插入图片描述

表2:根据当前关节数量和输入大小分离基准的人体实例数。

在这里插入图片描述

表3:根据当前关节数量和遮挡百分比分离基准的人数。

表4报告了我们方法在划分的子基准上详细的EPE,以支持 main paper 的图5。
在这里插入图片描述

表4:我们的方法与检测法和回归法在COCO val set 划分子基准上的EPE比较。

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

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

相关文章

GraalVM + Springboot3 + IDEA 在widow10 上完成构建本地化服务

GraalVM是开发人员编写和执行Java代码的工具。具体来说&#xff0c;GraalVM是由Oracle创建的Java虚拟机&#xff08;JVM&#xff09;和Java开发工具包&#xff08;JDK&#xff09;。它是一个高性能的运行时&#xff0c;可以提高应用程序的性能和效率。 GraalVM的目标包括&…

【数据结构】哈希表

目录 一、哈希函数的引入 二、解决哈希冲突的思路 2.1基于闭散列的思路 2.2基于开散列的思路 2.3负载因子 三、关于哈希函数的设计 四、基于拉链法实现哈希表 4.1哈希表的内部构造 4.2插入操作 4.3扩容操作 4.4搜索操作 4.5删除操作 哈希表其实就是基于数组衍生而来…

深度解读面试题:链表中环的入口结点(附代码,可过在线OJ)

在解读“链表中环的入口结点”前&#xff0c;我认为有必要明白关于它的一些用于打基础的问题&#xff08;相交链表、判断链表中是否存在环&#xff09; 相交链表 题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点…

快收藏!!整理了100个Python小技巧!!

下面&#xff0c;我就给大家分享100个Python小技巧&#xff0c;帮助大家更好的了解和学习Python&#xff0c;欢迎收藏、关注&#xff0c;点赞支持&#xff01; ▍1、for循环中的else条件 这是一个for-else方法&#xff0c;循环遍历列表时使用else语句。下面举个例子&#xff…

根据平均值列出记录

AANSI SQL包括几个聚合函数&#xff0c;使您可以对一组值进行计算以将其结果作为单个值返回。他们包括Count(), Min(), Max(), Sum() and AVG(),以及其他。默认情况下&#xff0c;聚合函数适用于所有行&#xff0c;但是您可以通过将WHERE子句应用于SELECT语句来缩小字段的范围。…

直冲云霄,阿里大牛耗时49天整理12W字面试手册,押题准确率直冲95%

很多人都想进字节做开发&#xff0c;不论是技术还是薪资、福利都算得上TOP级~ 7月底官方再次启动扩招&#xff0c;发布了1200&#xff0b;后端工程师岗位&#xff01; 那么本批有哪些优质岗位可选择&#xff1f;薪资待遇如何&#xff1f; 下面给大家列出几类具体的岗位要求&a…

软件项目管理指南:定义、5大过程、估算及进度管理方法等

本文将分享&#xff1a;1、软件项目管理的定义&#xff1b;2、软件项目管理的过程步骤&#xff1b;3、软件项目管理的内容&#xff1b;4、软件项目估算与进度管理方法&#xff1b;5、软件开发各生命周期阶段与文档、角色间的关系&#xff1b;6、软件开发项目中的各大角色职能&a…

深度学习-第P1周——实现mnist手写数字识别

深度学习-第P1周——实现mnist手写数字识别深度学习-第P1周——实现mnist手写数字识别一、前言二、我的环境三、前期工作1、导入依赖项并设置GPU2、导入数据集3、数据可视化四、构建简单的CNN网络五、训练模型1、设置超参数2、编写训练函数3、编写测试函数4、正式训练六、结果可…

ADSP-21489的图形化编程详解(7:延时、增益、分频、反馈、响度)

延时 21489 可以做延时&#xff0c;音频高手会运用此项算法来增强音效&#xff0c;我们做个最简单的&#xff0c;让大家知道怎么用它&#xff0c;至于怎么样嵌入到自己的系统里实现更好的效果&#xff0c;则需要各位调音师专业的耳朵来判断&#xff0c;调音无上限&#xff01;…

MySQL之索引及其背后的数据结构

✨博客主页: 荣 ✨系列专栏: MySQL ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录一. 索引的介绍1. 什么是索引2. 索引的使用二. 索引背后的数据结构1. 考虑使用哈希表2. 二叉搜索树3. N叉搜索树(B树, B树)4. 注意事项一. 索引的介绍 1. 什么是索引 索引 (Index) 是帮助…

[激光原理与应用-39]:《光电检测技术-6》- 光干涉的原理与基础

目录 第1章 概述 1.1 什么是光干涉 1.2 产生干涉的必要条件 1.3 非相干光 - 自发辐射无法产生干涉 1.4 相干光 - 受激辐射 1.5 时间相干性 1.6 空间相干性 它山之石 第1章 概述 1.1 什么是光干涉 它是指因两束光波相遇而引起光的强度重新分布的现象。 指两列或两列以上…

Verilog入门学习笔记:Verilog基础语法梳理

无论是学IC设计还是FPGA开发&#xff0c;Verilog都是最基本、最重要的必备技能。但任何一门编程语言的掌握都需要长期学习。并不是简简单单的随便读几本书&#xff0c;随便动动脑筋那么简单。Verilog是一门基于硬件的独特语言&#xff0c;由于它最终所实现的数字电路&#xff0…

基于AVDTP信令分析蓝牙音频启动流程

前言 公司项目edifier那边需要在原来音频SBC,AAC基础上增加LHDC5.0编码&#xff0c;在打通lhdc协议栈之前&#xff0c;学习记录一番AVDTP音频服务流程。 一、AVDTP音频流基础知识 分析音频流程首先应具备的最简单基础概念知识&#xff1a;AVDTP信令signal&#xff0c;流端点se…

【JVM】垃圾回收机制详解(GC)

目录一.GC的作用区域二.关于对象是否可回收1.可达性分析算法和引用计数算法2.四种引用类型三.垃圾收集算法1.标记-清除算法2.复制算法3.标记-整理算法4.分代收集算法四.轻GC(Minor GC)和重GC(Full GC)一.GC的作用区域 可以看jvm详解之后&#xff0c;再来理解这篇文章更好 堆和…

[附源码]计算机毕业设计农村人居环境治理监管系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ASP.NET Core 3.1系列(18)——EFCore中执行原生SQL语句

1、前言 前一篇博客介绍了EFCore中常见的一些查询操作&#xff0c;使用Linq或Lambda结合实体类的操作相当方便。但在某些特殊情况下&#xff0c;我们仍旧需要使用原生SQL来获取数据。好在EFCore中提供了完整的方法支持原生SQL&#xff0c;下面开始介绍。 2、构建测试数据库 …

Radare2 框架介绍及使用

Radare2 框架介绍及使用 欢迎入群交流 radare2 这是整个框架的核心工具&#xff0c;它具有debugger和Hexeditor的核心功能&#xff0c;使您能够像打开普通的文件一样&#xff0c;打开许多输入/输出源&#xff0c;包括磁盘、网络连接、内核驱动和处于调试中的进程等。 它实现了…

旧版本金庸群侠传3D新Unity重置修复版入门-lua”脚本“

金庸3DUnity重置入门系列文章 金庸3dUnity重置入门 - lua 语法 金庸3dUnity重置入门 - UniTask插件 金庸3dUnity重置入门 - Cinemachine 动画 金庸3dUnity重置入门 - 大世界实现方案 金庸3dUnity重置入门 - 素材极限压缩 (部分可能放到付费博客&#xff09; 2022年底~20…

Apifox和Eolink两个测试工具谁最实用?

目前行业内有 postman、jmeter 为代表开源 Api 工具派系&#xff0c;我想对大家对这两个词并不陌生。虽然它们能解决基本的接口测试&#xff0c;但是无法解决接口链路上的所有问题&#xff0c;一个工具难以支持整个过程。在国内&#xff0c;我们可以看到有国产 API 管理工具&am…

Spring Cloud 微服务讲义

Spring Cloud 微服务讲义第一部分 微服务架构第 1 节 互联网应用架构演进第 2 节 微服务架构体现的思想及优缺点第 3 节 微服务架构中的核心概念第二部分 Spring Cloud 综述第 1 节 Spring Cloud 是什么第 2 节 Spring Cloud 解决什么问题第 3 节 Spring Cloud 架构3.1 Spring …