Sparse4D v1

news2024/12/24 3:06:27

Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion

单位:地平线
GitHub:https://github.com/HorizonRobotics/Sparse4D
论文:https://arxiv.org/abs/2211.10581
时间:2022-11
找博主项目讨论方式:wx:DL_xifen
讨论QQ群:345458279

摘要

  • 基于BEV的检测方法在多视角3D检测任务中取得了很好的效果,基于稀疏方法的一直落后,但并不是没有优点的。
  • 本文提出了一个迭代优化锚框,通过稀疏采样的方法,融合时空特征。叫做sparse 4D
    • (1):Sparse 4D Sampling:对每一个3D锚框,将多个采样4D关键点映射到多视角,多尺度,多时间戳上的图片去采集相应特征。
    • (2):Hierarchy Feature Fusion:将不同视图/尺度、不同时间戳和不同关键点的采样特征分层融合,生成高质量的实例特征
    • (3):从而,Sparse 4D是高效,不依赖稠密视角转换,有利于边缘设备的部署。
  • 本文引入了实例级-深度重载模块,缓解3D-到2D映射的病态问题。
  • 本文的方法超越了所有基于稀疏感知的方法和一些基于BEV的方法在nuScenes数据集上。

整体架构

引言

  1. 多视角的3D感知是自动驾驶系统的关键一环,部署成本低的优势。
  2. 相较于LiDAR, 相机可以为远距离目标提供视觉线索
  3. 但是,相机没有深度信息,这就导致了从2d图像中感知3d目标,是一个长期的病态问题。
  4. 如何融合多视角信息,解决3D感知任务,是一个有意思的问题
  5. 现在有2种主流方式,一种是基于bev的方法,一种是基于sparse的方法。

  1. BEV的方法就是将多个视图特征转到统一的BEV空间,实现一个比较好的表现效果
  2. 但是BEV方法也有一些劣势
    • 图像特征转BEV需要稠密的特征采样和重组,计算复杂其计算量大
    • 最大感知范围局限于BEV特征图的大小,难以权衡效率,精度,速度。
    • 将特征压缩到BEV会丢失一些纹理信息,导致如符号检测就不能实现了。

  1. 不同于BEV方法,sparse方法不要求稠密视角转换模块,而是直接3D特征采样,然后优化锚框,从而能够避免上述问题。
  2. 其中最具代表性是的DETR3D,但是他局限于每一个query一个采样点
  3. SRCN3D 利用RoI-Align采样多视角特征, 但是不够高效同时也不能对其不同视角的特征
  4. 此外,现有的sparse 3D 并未发挥出时序信息的优势,相较于BEV方法,在精度上有巨大的gap

  1. 本文提出了一个Sparse4D 解决上述问题
  2. 每一个锚框采用多个采样点,相较于单采样点和RoI-Align采样具有2点优势:
    1. 能够提取更加丰富的特征信息
    2. 便于扩展到时间维度,作为4D的采样点,提取时序信息
  3. Sparse4D首先对每个关键点执行多时间戳、多视图和多尺度的操作。
  4. 然后,这些采样特征通过分层融合模块生成高质量的实例特征,用于3D边界框的优化
  5. 此外,为了缓解基于相机的3D检测深度病态解的问题,提高感知性能,添加了一个实例级深度重权模块,用于预测深度信息(该模块以稀疏的方式进行训练,没有额外的激光雷达点云监督)。
  6. 主要贡献如下:
    1. 第一个具有时间上下文融合的稀疏多视角3D检测算法,它可以有效地对齐空间和时间视觉信息,从而实现精确的3D检测。
    2. 提出了一个 deformable 4D aggregation module 能够灵活计算和采样不同维度的信息
    3. 提出了一个 depth reweight module 缓解3D感知中的位置病态问题
    4. 在 nuScenes数据集上超于了所有sparse方法,以及超越了需要BEV方法。

相关工作

稀疏目标检测
  1. 早期的目标检测任务使用密集输出,再使用NMS进行过滤
  2. DETR是一个新的检测范式,作为集合预测,利用transformer直接稀疏预测结果。
  3. DETR采用了query与图像之间的交叉注意力,导致计算量大并且收敛困难。
  4. 由于使用了全局注意力,DETR也不能认为是一种纯的稀疏方法
  5. Deformable DETR修改了DETR,提出了基于参考点的局部注意力,能够加速收敛和减少计算量
  6. Sparse R-CNN提出了一种anchor 稀疏的方案,基于 region proposal,网络结构简单有效。展示了稀疏检测的有效性和优越性
  7. 3D检测作为2D检测的扩展,也有许多稀疏的检测网络MoNoDETR,DETR3D, Sparse R-CNN3D, SimMOD
单目的3D目标检测
  1. 单张图片实现3D检测更加具有挑战性
  2. FCOS3D,SMOKE是基于2阶段的2D目标检测器,通过卷积神经网络直接回归深度信息
  3. [31,40,43]利用单目的深度估计,将图像转为伪点云,再进行3D目标检测。
  4. OFT and CaDDN 利用视角变换模块,将视角从图像转为BEV空间,然后完成3D的检测。
  5. OFT 是将利用3D到2D的映射关系完成的变换,而CaDDN是2D到3D的映射。(更加像一种伪点云的方法)
多视角的3D目标检测
  1. 稠密方法是多视图三维检测的主要研究方向,它利用密集的特征向量进行视图变换、特征融合或边界框预测。
  2. 基于是BEV的方法是稠密方法阵营的一大块
  3. BEVFormer 采用了 deformable attention 来计算BEV特征生成和稠密时空特征的融合
  4. BEVDet 利用lift-splat operation 实现多视角的变化
  5. BEVDepth 加入了深度监督,有效的提高了感知精度
  6. BEVStereo 和 SOLOFusion 引入了时间立体技术到3D检测中,进一步提高了深度估计的精度
  7. PETR 使用了3D位置编码和全局交叉注意力融合(计算量大,不能算完全的稀疏检测)
  8. DETR3D 作为稀疏检测的代表,利用稀疏的参考点进行特征采样和融合
  9. Graph DETR3D在DETR3D 基础上,引入了一个图网络来实现更好的空间特征融合,特别是对于多视图重叠区域。

方法

3.1 整体架构

在这里插入图片描述

  1. 如上图所示,sparse4D 也是编码器-解码器的架构
  2. 图像编码器提取图像特征使用共享权重(包括了backbone、neck)
  3. t t t 时刻,输入 N N N个视角的图片,图片编码器提取的多视角多尺度特征图表示为: T t = { I t , n , s ∣ 1 ≤ s ≤ S , 1 ≤ n ≤ N } T_{t} = \{ I_{t,n,s}|1≤s≤S,1≤n≤N\} Tt={It,n,s∣1sS1nN} (S 表示尺度数)
  4. 为了探索时序信息,将图像特征 T T T 作为队列 I = { I t } t = t s t 0 I=\{ I_{t} \}^{t_{0}}_{t=t_{s}} I={It}t=tst0,其中: t s = t 0 − ( T − 1 ) t_{s}=t_{0}-(T-1) ts=t0(T1)

  1. 之后,解码器通过迭代优化范式预测结果,其中包括了一系列的优化模块和一个分类头(分类置信度)
  2. 每一个优化模块拿图像特征 I I I,3D锚框 B ∈ R M × 11 B \in \mathbb{R}^{M \times 11} BRM×11 和相应的实例特征: F ∈ R M × C F\in \mathbb{R}^{M \times C} FRM×C 作为输入
  3. 此处, M M M 是anchor的数量, C C C 是特征通道数,anchor的格式为:
  4. { x , y , z , ln w , ln h , ln l , sin y a w . cos y a w , v x , v y , v z } \{ x,y,z, \text{ln} w, \text{ln} h, \text{ln} l , \text{sin} yaw. \text{cos} yaw, vx, vy, vz \} {x,y,z,lnw,lnh,lnl,sinyaw.cosyaw,vx,vy,vz}
  5. 所有的3D锚框 使用了统一的坐标系

  1. 在每一个优化模块中,首先采用自注意力,让实例之间进行交互,并且会将anchor 信息注入进去
  2. 之后,进行可变性 4D 聚合,融合多视角,多尺度,多时间戳下,多关键点的特征
  3. 进一步,引入了一个深度reweight模块,缓解基于图像的3D检测的病态解问题。
  4. 最后,一个回归头用于预测当前anchor与gt之间的偏差。

在这里插入图片描述

3.2 整体架构
  1. 实例特征质量在稀疏感知算法中是非常关键的。

  2. 为了解决这个问题,如上图所示,引入了一个可变4D聚合模块来获取高质量实例特征,利用稀疏采用和分层聚合。

  3. 4D 关键采样点的生成

    1. 对第 m m m个实例的anchor,我们分配K个4D关键点: P m ∈ R K × T × 3 P_{m} \in \mathbb{R}^{K \times T \times 3 } PmRK×T×3
    2. 其中有 K F K_{F} KF个固定点,和 K L K_{L} KL个可学习的点
    3. 如上图(a),在 t 0 t_{0} t0时刻,首先将固定的关键点 P m F P^{F}_{m} PmF, 直接放在锚框的立方体中心和六面中心上。
    4. 之后,不同于固定点,可学习点跟随实例特征发生变化,根据神经网络去寻找最佳特征表征的位置。
    5. 鉴于 特征 F m F_{m} Fm中添加锚框的embeding,可学习的关键点 P m , t 0 L P^{L}_{m,t_{0}} Pm,t0L被生成,根据下面的子网络: Φ \Phi Φ
    6. D m = R y a w ⋅ [ s i g m o i d ( Φ ( F m ) ) − 0.5 ] ∈ R K L × 3 P m , t 0 L = D m × [ w m , h m , l m ] + [ x m , y m , z m ] D_{m}=\mathbf{R}_{yaw}\cdot[\mathbf{sigmoid}\left(\Phi(F_{m})\right)-0.5]\in\mathbb{R}^{K_{L}\times3}\\P_{m,t_{0}}^{L}=D_{m}\times[w_{m},h_{m},l_{m}]+[x_{m},y_{m},z_{m}] Dm=Ryaw[sigmoid(Φ(Fm))0.5]RKL×3Pm,t0L=Dm×[wm,hm,lm]+[xm,ym,zm]
    7. 其中, R y a w \mathbf{R}_{yaw} Ryaw为偏航的旋转矩阵。

    1. 时间特征是3D检测的关键,可以提高深度估计的精度
    2. 因此,在得到当前帧的3D关键点后,我们将其扩展到4D,为时间融合做准备
    3. 对于过去的时间戳 t t t,首先建立一个恒速模型来移动当前坐标系的3D关键点
    4. P m , t ′ = P m , t 0 − d t ⋅ ( t 0 − t ) ⋅ [ v x m , v y m , v z m ] P'_{m,t}=P_{m,t_0}-d_t\cdot(t_0-t)\cdot[vx_m,vy_m,vz_m] Pm,t=Pm,t0dt(t0t)[vxm,vym,vzm]
    5. 其中 d t d_{t} dt是两个相邻帧之间的时间间隔
    6. 然后,我们利用自车运动信息将 P m , t ′ P'_{m,t} Pm,t,转换为过去 t t t时刻坐标系下
    7. P m , t = R t 0 → t P m , t ′ + T t 0 → t P_{m,t}=\mathbf{R}_{t_0\to t}P_{m,t}^{\prime}+\mathbf{T}_{t_0\to t} Pm,t=Rt0tPm,t+Tt0t
    8. 其中, R t 0 → t \mathbf{R}_{t_0\to t} Rt0t T t 0 → t \mathbf{T}_{t_0\to t} Tt0t分别表示自车从当前帧 t 0 t_{0} t0到帧 t t t的旋转矩阵和平移矩阵
    9. 这样,我们最终可以构造4D关键点为: P ~ m = { P m , t } t = t s t 0 \tilde{P}_{m}=\{P_{m,t}\}_{t=t_{s}}^{t_{0}} P~m={Pm,t}t=tst0
  4. Sparse Sampling

    1. 基于上述4D关键点 P P P和图像特征映射队列 F F F,稀疏具有较强的表示能力,可以有效地进行采样。
    2. 首先,通过变换矩阵 T c a m T^{cam} Tcam将4D关键点投影到特征图上。
    3. P t , n i m g = T n c a m P t , 1 ≤ n ≤ N P_{t,n}^{\mathrm{img}}=\mathbf{T}_{n}^{\mathrm{cam}}P_{t},1\leq n\leq N Pt,nimg=TncamPt,1nN
    4. 然后,我们通过双线性插值对每个视图和每个时间戳进行多尺度特征采样:
    5. f m , k , t , n , s = Bilinear ( I t , n , s , P m , k , t , n img ) f_{m,k,t,n,s}=\textbf{Bilinear}\left(I_{t,n,s},P_{m,k,t,n}^\text{img}\right) fm,k,t,n,s=Bilinear(It,n,s,Pm,k,t,nimg)
    6. 其中,下标m、k、t、n和s分别表示锚框、关键点、时间戳、相机和特征图多尺度
    7. 到目前为止,我们已经获得了第m个候选检测锚框的多关键点、时间戳、视图和尺度特征向量 f m ∈ R K × T × N × S × C f_{m}\in\mathbb{R}^{K\times T\times N\times S\times C} fmRK×T×N×S×C,其中C是特征通道的数量。
  5. Hierarchy Fusion.

    1. 为了生成高质量的实例特征,我们将上述特征向量 f m f_{m} fm分层融合。
    2. 如图3©所示,对于每个关键点,我们首先用预测的权重, 以不同的视图和尺度聚合特征,然后用线性层进行时间融合。
    3. 最后,对于每个锚框实例,融合多个关键点特征来生成实例特征
    4. 具体来说,给定添加了锚框embeding的实例特征 F m F_{m} Fm,首先通过线性层 Ψ \Psi Ψ预测加权系数为:
    5. W m = Ψ ( F m ) ∈ R K × N × S × G W_m=\Psi\left(F_m\right)\in\mathbb{R}^{K\times N\times S\times G} Wm=Ψ(Fm)RK×N×S×G
    6. 其中,G是用通道来划分特征的组数。这样,我们就可以聚合具有不同权重的不同组的通道。类似于group convolution。
    7. 我们将各组的加权后特征向量沿尺度和视角维度相加,然后将各组拼接起来,得到新的特征 f m , k , t ′ f_{m,k,t}^{'} fm,k,t
    8. f m , k , t , i ′ = ∑ n = 1 N ∑ s = 1 S W m , k , n , s , i f m , k , t , n , s , i f m , k , t ′ = [ f m , k , t , 1 ′ , f m , k , t , 2 ′ , . . . , f m , k , t , G ′ ] \begin{aligned}&f_{m,k,t,i}^{'}=\sum_{n=1}^{N}\sum_{s=1}^{S}W_{m,k,n,s,i}f_{m,k,t,n,s,i}\\&f_{m,k,t}^{'}=\left[f_{m,k,t,1}^{'},f_{m,k,t,2}^{'},...,f_{m,k,t,G}^{'}\right]\end{aligned} fm,k,t,i=n=1Ns=1SWm,k,n,s,ifm,k,t,n,s,ifm,k,t=[fm,k,t,1,fm,k,t,2,...,fm,k,t,G]
    9. 上面的下标 i i i是组的索引,并且[,]表示连接操作
    10. 接下来,通过拼接操作和线性层Ψtemp,将特征 f m , k , t ′ f_{m,k,t}^{'} fm,k,t的时间维度以顺序的方式融合。
    11. f m , k , t s ′ ′ = f m , k , t s ′ f m , k , t ′ ′ = Ψ t e m p ( [ f m , k , t ′ , f m , k , t − 1 ′ ′ ] ) f m , k ′ ′ = f m , k , t 0 ′ ′ = Ψ t e m p ( [ f m , k , t 0 ′ , f m , k , t 0 − 1 ′ ′ ] ) \begin{aligned} &f_{m,k,t_{s}}^{''}=f_{m,k,t_{s}}^{'} \\ &f_{m,k,t}^{''}=\Psi_{temp}\left(\left[f_{m,k,t}^{'},f_{m,k,t-1}^{''}\right]\right) \\ &f_{m,k}^{''}=f_{m,k,t_{0}}^{''}=\Psi_{temp}\left(\left[f_{m,k,t_{0}}^{'},f_{m,k,t_{0}-1}^{''}\right]\right) \end{aligned} fm,k,ts′′=fm,k,tsfm,k,t′′=Ψtemp([fm,k,t,fm,k,t1′′])fm,k′′=fm,k,t0′′=Ψtemp([fm,k,t0,fm,k,t01′′])
    12. 对时间融合后的多关键点特征 f m , k ′ ′ f_{m,k}^{''} fm,k′′进行求和,完成最终的特征聚合,得到更新后的实例特征为:
    13. F m ′ = ∑ k = 1 K f m , k ′ ′ F_m'=\sum_{k=1}^Kf_{m,k}'' Fm=k=1Kfm,k′′

在这里插入图片描述

  1. Depth Reweight Module
    1. 这个3D到2D的变换(Eq。(5))有一定的模糊性,即不同的3D点可能对应于相同的2D坐标。
    2. 对于不同的三维锚框,可以对相同的特征进行采样(见图4),这增加了神经网络拟合的难度
    3. 为了缓解这一问题,我们加入了一个显式深度估计模块 Ψ d e p t h \Psi_{depth} Ψdepth,它由多个具有残差连接的mlp组成。
    4. 对于每个聚合特征 F m ′ F_{m}^{'} Fm,我们估计一个离散深度分布,并利用3D锚框中心点深度采样相应的置信 C m C_{m} Cm,用于重新加权实例特征。
    5. C m = B i l i n e a r ( Ψ d e p t h ( F m ′ ) , x m 2 + y m 2 ) F m ′ ′ = C m ⋅ F m ′ C_{m}=\mathbf{Bilinear}\left(\Psi_{depth}(F_{m}^{'}),\sqrt{x_{m}^{2}+y_{m}^{2}}\right)\\F_{m}^{''}=C_{m}\cdot F_{m}^{'} Cm=Bilinear(Ψdepth(Fm),xm2+ym2 )Fm′′=CmFm
    6. 这样,对于那些3D中心点在深度方向上远离地面真相的实例,即使二维图像坐标非常接近地面gt,相应的深度置信度也趋于零
    7. 因此,重新加权后惩罚对应的实例特征 F m ′ ′ F_{m}^{''} Fm′′也趋于0。
    8. 结合显式深度估计模块可以帮助视觉感知系统进一步提高感知精度
    9. 此外,深度估计模块也可以作为一个单独的部分进行设计和优化,以促进模型的性能
  2. Training
  3. 我们用T帧采样视频片段,以端到端训练检测器。
  4. 连续帧之间的时间间隔在{dt,2dt)中随机采样(dt≈0.5)
  5. 与DETR3D一样 ,使用匈牙利算法将每个地面真相与一个预测值进行匹配。
  6. 损失包括三部分:分类损失、边界框回归损失和深度估计损失:
  7. L = λ 1 L c l s + λ 2 L b o x + λ 3 L d e p t h L=\lambda_1L_{cls}+\lambda_2L_{box}+\lambda_3L_{depth} L=λ1Lcls+λ2Lbox+λ3Ldepth
  8. 其中,λ1、λ2和λ3是平衡梯度的权重项。
  9. 我们采用focal loss进行分类,采用L1 loss 边界框回归,binary cross entropy loss进行深度估计。
  10. .在深度重权模块中,我们直接使用标签的边界框中心的深度作为gt来监督每个实例的深度。
  11. 由于只估计每个实例的深度,而不是密集的深度,因此训练过程摆脱了对激光雷达数据的依赖。

实验 Experiment

数据和指标
  1. nuScenes数据集
  2. 指标:
    1. 平均平均精度(mAP)、平移平均误差(mATE)、尺度平均误差(mASE)、方向平均误差(mAOE)、速度平均误差(mAVE)、属性平均误差(mAAE)和nuScenes检测评分(NDS),
    2. 平均多目标跟踪精度(AMOTA)、平均多目标跟踪精度(AMOTP)和召回率是三个主要的评价指标。
实验细节 Implementation Details
  1. 通过对训练集进行K-Means聚类,得到了3D锚框的初始化{x、y、z}参数,
  2. 其他参数都用固定值{1、1、1、0、0、0、0、0}初始化。
  3. 实例特征使用随机初始化
  4. 默认情况下,3D锚框和实例个数M设置为900,级联优化次数为6,neck的特征的尺度个数S为4,固定采样关键点 K F K_{F} KF为7,可学习关键点 K L K_{L} KL为6,输入图像大小为640×1600,骨干为ResNet101。
  5. sparse4d使用AdamW优化器进行训练
  6. 主干网络和其他网络的初始学习率分别为2e-5和2e-4。
  7. 衰减策略是余弦退火
  8. 初始的网络参数来自于预先训练过的FCOS3D
  9. 对于在nuScenes测试集上的实验,网络被训练了48个epoch,而其余的实验只被训练了24个epoch,除非另有说明
  10. 为了节省GPU内存,我们在训练阶段将所有历史帧的特征图 f t ′ f_{t}^{\prime} ft分离。
  11. 所有实验均未使用CBGS [50]和测试时间增强。
消融实验 Ablation Studies and Analysis
  1. 深度模块和可学习的关键点
    在这里插入图片描述
  2. 运动补偿
    在这里插入图片描述
    1. 只加入时序信息,也有mAVE和NDS的提升
    2. 加入自车运动,性能极大提高
    3. 加入目标车辆运动,检测精度没有提高,但是速度误差降低了
  3. 优化次数
    1. 在这里插入图片描述
    2. (a)训练的时候优化次数为6,
    3. (b)不停增加优化次数,10次是最好的
  4. 历史帧数
    在这里插入图片描述
    1. 随着帧数的增加,还有提升空间.
  5. FLOPs and Parameters.
    在这里插入图片描述
Main Results
  1. 在这里插入图片描述
  2. 在这里插入图片描述
Extend to 3D Object Tracking

在这里插入图片描述

总结

  1. 在这项工作中,我们提出了一种新的方法,Sparse4D,该方法通过一个可变形的四D聚合模块,实现了多时间戳和多视图的特征级融合,并使用迭代优化来实现3Dbox的回归
  2. Sparse4D可以提供良好的感知性能,并且它在nuScenes排行榜上优于所有现有的稀疏算法和大多数基于bev的算法。
  3. 在深度加权模块中,可以添加多视图立体技术,以获得更精确的深度估计。、
  4. 在编码器中也可以考虑摄像机参数,以提高三维泛化效果
  5. 因此,我们希望Sparse4D可以成为稀疏3D检测的新基线。
  6. Sparse4D的框架也可以扩展到其他任务,如高清地图的构建、OCC估计、三维重建等。

阅读时间:2024年6月24日

找博主讨论方式:wx:DL_xifen

讨论QQ群:345458279

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

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

相关文章

在Qt中,直接include <moc_xxxxx.cpp> 为什么不会出现符号冲突的错误?

在逛Qt官方社区的时候看到这样一个帖子: https://forum.qt.io/topic/117973/how-does-include-moc_-cpp-work 大概的意思是moc_xxx.cpp如果已经被编译器编译,那么在另一个cpp文件中include同一个moc_xxx.cpp应该出现符号冲突才对,但是Qt却能正…

音频Balance源码总结

音频Balance源码总结 何为音频Balance? 顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境…

高考落幕,暑期西北行,甘肃美食等你来尝

高考结束,暑期来临,西北之旅成为许多人的热门选择。而来到甘肃,除了领略壮丽的自然风光和深厚的历史文化,甘肃特产和传统面点以其独特的风味和传统的制作工艺也为游客们带来了一场地道的甘肃美食体验。 平凉的美食&#x…

成立近30年,它如何找到政企采购突破点?

回看中国采购行业的发展,大致可以被分为四个阶段:上世纪90年代的传统采购时代、本世纪初的ERP采购时代、近10年的SRM采购时代以及2018年以来开启的数字化采购时代。近年来,大数据、人工智能和物联网的高速发展,为采购信息化提供底…

读书笔记-Java并发编程的艺术-第3章(Java内存模型)-第6节(final域的内存语义)

文章目录 3.6 final域的内存语义3.6.1 final 域的重排序规则3.6.2 写final 域的重排序规则3.6.3 读final 域的重排序规则3.6.4 final 域为引用类型3.6.5 为什么 final 引用不能从构造函数内“逸出”3.6.6 final 语义在处理器中的实现3.6.7 JSR-133 为什么要增强final 的语义 3.…

[知识点篇]《计算机组成原理》之计算机系统概述

1.1 计算机发展历程 世界上第一台电子数字计算机 1946年,ENIAC(Electronic Numerical Integrator And Computer)在美国宾夕法尼亚大学研制成功。性能低,耗费巨大,但却是科学史上的一次划时代的创新,奠定了电子计算机的基础&#x…

大语言模型(LLM)LangChain介绍

LangChain是一个利用大语言模型的能力开发各种下游应用的开源框架,它的核心理念是为各种大语言模型应用实现通用的接口,简化大语言模型应用的开发难度,主要的模块示意图为: Index:提供了各类文档导入、文本拆分、文本向…

Java 生成随机数的方法例子

前言 在实际开发中产生随机数的例子也是很普遍的,所以在程序中设计产生随机数操作很重要,这篇文章主要给大家介绍了关于Java随机数的几种获得方法,具有一定的参考价值。 一、Random 类 Random 类是从 JDK 1.0开始,它产生的随机数是伪随机数…

UML建模笔记

5个视图 设计。类,接口,对象如何协作。实现。组件,运行程序,文档关系。用例。用户功能期望。进程。并发与同步相关进程,线程。部署。部署到计算机。 建模目的 和客户共创追踪需求变更协同开发进度控制持续迭代测试生…

【SGX系列教程】(四)Intel-SGX 官方示例分析(SampleCode)——LocalAttestation

文章目录 一.LocalAttestation原理介绍1.1本地认证原理1.2 本地认证基本流程1.3 本地认证核心原理 二.源码分析2.1 README2.1.1 编译流程2.1.2 执行流程(双进程执行 or 单进程执行,在后面执行部分有展示效果)2.1.3 如何获取已签名的Enclave的…

青岛网站建设一般多少钱

青岛网站建设的价格一般会根据网站的规模、功能、设计风格等因素来定,价格会存在着一定的差异。一般来说,一个简单的网站建设可能在数千元到一万元之间,而一个复杂的大型网站建设可能会需要数万元到数十万元不等。所以在选择网站建设服务时&a…

DAY17-力扣刷题

1.相同的树 100. 相同的树 - 力扣(LeetCode) 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 class Solution {public…

守护你的每一步:揭秘电子厂劳保鞋的秘密

在电子厂的繁忙车间里,工友们忙碌的身影中,你是否注意到那一双双看似普通的劳保鞋?它们不仅承载着工人们辛勤的汗水,更是守护他们每一步安全的重要装备。今天,就让我们一起揭秘电子厂劳保鞋的秘密,看看它们…

一站式企业服务平台能够帮助企业解决哪些问题?

近年来一站式企业服务平台备受区域政府及园区管理者的青睐,充当着区域政府或园区的千里眼和顺风耳,可以用来捕捉与区域经济发展相关的信息,也可以用来倾听企业的诉求,更是成为了区域深抓企业服务的多面手。 同时,一站式…

【漏洞复现】学分制系统GetTimeTableData SQL注入

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发,是基于对职业教育特点和需求的深入理解,结合教育部相关文件精神,并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法,方便学校根据自…

Java对应C++ STL的用法

sort: 1:java.util.Arrays中的静态方法Arrays.sort()方法,针对基本数据类型和引用对象类型的数组元素排序 2:java.util.Collections中的静态方法的Collections.sort()方法,针对集合框架中的动态数组,链表&…

大数据开发如何管理项目

在面试的时候总是 会问起项目,那在大数据开发的实际工作中,如何做好一个项目呢? 目录 1. 需求分析与项目规划1.1 需求收集与梳理1.2 可行性分析1.3 项目章程与计划 2. 数据准备与处理2.1 数据源接入2.2 数据仓库建设2.3 数据质量管理 3. 系统…

2024年4家HTTP代理服务商网站最新测评

一、芝麻HTTP芝麻HTTP作为代理服务领域的佼佼者,其HTTP代理服务同样表现出色。凭借海量IP资源和高效稳定的性能,芝麻HTTP为用户提供了卓越的代理服务体验。 特点与优势 ① 海量IP资源:拥有庞大的代理IP池,确保用户能够随时获取到…

安装OpenHarmony编译库和工具集

一、搭建开发环境 1.1、Ubuntu搭建,参考 VMware完美安装Ubuntu20.04-CSDN博客文章浏览阅读286次,点赞5次,收藏3次。详细介绍了VMware下安装Ubuntu20.04https://blog.csdn.net/longyuzi/article/details/139935769 1.2、拉取OpenHarmony源码…

数据结构速成--查找

由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 目录 …