Sparse4D v1

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MotionCap】conda 链接缺失的cuda库

conda 安装的环境不知道为啥python 环境里的 一些cuda库是空的要自己链接过去。ln 前面是已有的,后面是要新创建的 ln -s <path to the file/folder to be linked> cuda 有安装 libcublas 已经在cuda中 (base) zhangbin@ubuntu-server:~/miniconda3/envs/ai-mocap/lib/…

ARM芯片架构(RTOS)

前言&#xff1a;笔记韦东山老师的rtos教程&#xff0c;连接放在最后 #ARM介绍 arm芯片属于精简指令集risc&#xff0c;所用的指令比较简单&#xff0c;ARM架构是一种精简指令集&#xff08;RISC&#xff09;架构&#xff0c;广泛应用于移动设备、嵌入式系统、物联网等领域。AR…

40.设计HOOK引擎的好处

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;39.右键弹出菜单管理游戏列表 以 39.右键弹出菜单管理游戏列表 它的代码为基础进行修改 效果图&#xff1a; 实现步骤&#xff1a; 首…

吴恩达2022机器学习专项课程C2W3:2.27 选修_数据倾斜

目录 处理不平衡数据集1.分类需求描述2.计算精确率和召回率 权衡精确率和召唤率1.手动调整阈值2.F1分数 总结 处理不平衡数据集 1.分类需求描述 如果你在处理一个机器学习应用&#xff0c;其中正例和负例的比例&#xff08;用于解决分类问题&#xff09;非常不平衡&#xff0…

图像大小调整(缩放)

尺寸调整前尺寸调整前 1、背景介绍 在深度学习中&#xff0c;将图像调整到固定尺寸&#xff08;如28x28像素&#xff09;的操作是非常常见的&#xff0c;尤其是在处理诸如图像分类、物体检测和图像分割等任务时。这种操作有几个重要原因&#xff1a; 标准化输入&#xff1a;许…

MYSQL 四、mysql进阶 5(InnoDB数据存储结构)

一、数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切说时存储在页结构中&#xff0c;另一方面&#xff0c;索引是在存储引擎中实现的&#xff0c;Mysql服务器上的存储引擎负责对表…

当中年男人的觉越来越少 他突然半夜买台电脑(30+岁仿真工程师买电脑心得)

仿真工程师的购机分析&#xff0c;游戏本、移动工作站还是台式机&#xff1f; 认清自己的需求。 现状。现在有一个19年买的华为matebook14、i5第八代低压U&#xff0c;8G内存。还好有SSD当虚拟内存&#xff0c;要不开网页估计都得卡住。媳妇还有台i7、16G的matebook&#xff…

MC进样管PFA塑料管NEPTUNE Plus多接收等离子质谱仪配套管子

PFA进样管可适配Neptune plus多接收器等离子质谱仪&#xff08;MC-ICP-MS&#xff09;&#xff0c;广泛应用于地球化学、核保障、环境科学、金属组学领域&#xff0c;在生物、物理、化学、材料等多个学科的交叉方向也有良好的应用前景。 外观半透明&#xff0c;便于观察管内情…

基于LangChain构建RAG应用

前言 Hello&#xff0c;大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者&#xff0c;上一篇文章中我们详细介绍了RAG的核心思想以及搭建向量数据库的完整过程&#xff1b;&#x1f632; 本文将基于上一篇文章的结果进行开发&#xff0c;主…

最长回文串

描述&#xff1a; 最长回文串 思路&#xff1a; 统计每个字母出现次数&#xff0c;如果是偶数&#xff0c;ret x;如果是存在奇数的话&#xff0c;就可以放在中间&#xff0c;ret 1. 代码&#xff1a; class Solution { public:int hash[200];int longestPalindrome(str…

Elasticsearch8.x聚合查询全面指南:从理论到实战

聚合查询的概念 聚合查询&#xff08;Aggregation Queries&#xff09;是Elasticsearch中用于数据汇总和分析的查询类型。它不同于普通的查询&#xff0c;而是用于执行各种聚合操作&#xff0c;如计数、求和、平均值、最小值、最大值、分组等。 聚合查询的分类 分桶聚合&…

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商&#xff0c;成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力&#xff0c;能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

【Spring】Spring学习笔记

Spring数据库 Spring JDBC 环境准备 创建Spring项目, 添加以下依赖 H2 Database: 用于充当嵌入式测试数据库JDBC API: 用于连接数据库Lombok: 用于简化pojo的编写 然后添加配置文件: spring.output.ansi.enabledALWAYS spring.datasource.username*********** spring.dataso…

3d怎么把歪的模型摆正?---模大狮模型网

在进行3D建模过程中&#xff0c;有时候会遇到模型出现歪曲或者旋转不正确的情况&#xff0c;这可能会影响到后续的设计和渲染效果。因此&#xff0c;学会将歪曲的模型摆正是一个非常重要的技巧。模大狮将介绍几种常用的方法&#xff0c;帮助您有效地将歪曲的3D模型摆正&#xf…

抖音团购达人实战营,抖音团购达人从0-1教程(11节课)

课程目录&#xff1a; 1-团购达人先导课1.mp4 2-账号措建.mp4 2-账号搭建_1.mp4 3-开通团购达人_1.mp4 4-账号养号涨粉套路_1.mp4 5-团购选品正确姿势_1.mp4 6-短视频之混剪课_1.mp4 7-短视频之图文课_1.mp4 8-短视频之口播课_1.mp4 9-短视频运营策略_1.mp4 10-团购…

纯血鸿蒙Beta版本发布,中国华为,站起来了!

2024年6月21日至23日&#xff0c;华为开发者大会2024&#xff08;HDC 2024&#xff09;于东莞盛大举行。 此次大会不仅在会场设置了包括鸿蒙原生应用、统一生态统一互联等在内的11个展区&#xff0c;以供展示HarmonyOS NEXT的强大实力&#xff0c;还对外宣布了HarmonyOS的最新进…

初探 YOLOv8(训练参数解析)

文章目录 1、前言2、Backbone网络3、YOLOv8模型训练代码3.1、模型大小选择3.2、训练参数设置 4、训练参数说明5、目标检测系列文章 1、前言 YOLO 因为性能强大、消耗算力较少&#xff0c;一直以来都是实时目标检测领域的主要范式。该框架被广泛用于各种实际应用&#xff0c;包…

Linux网络编程:套接字编程

1.Socket套接字编程 1.1.什么是socket套接字编程 Socket套接字编程 是一种基于网络层和传输层网络通信方式&#xff0c;它允许不同主机上的应用程序之间进行双向的数据通信。Socket是网络通信的基本构件&#xff0c;它提供了不同主机间的进程间通信端点的抽象。一个Socket就是…

World of Warcraft [CLASSIC] Level 70 Dire Maul (DM)

[月牙钥匙] [大型爆盐炸弹] World of Warcraft [CLASSIC] Level 70 厄运之槌&#xff0c;完美贡品&#xff0c;Dire Maul &#xff08;DM&#xff09; Foror‘s Compendium of Dragon Slaying 佛洛尔的屠龙技术纲要 因为不是兽王宝宝&#xff0c;而且开始位置放的不对&am…

Arathi Basin (AB) PVP15

Arathi Basin &#xff08;AB&#xff09; PVP15 阿拉希盆地&#xff0c;PVP&#xff0c;15人战场