论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

news2024/12/27 20:30:26

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

  • 文章概括
  • 摘要
  • I. INTRODACTION
  • II. 相关工作
  • III. APPROACH
    • A. 姿态跟踪工作流程
    • B. VIPose网络

文章概括

引用:

@inproceedings{ge2021vipose,
  title={Vipose: Real-time visual-inertial 6d object pose tracking},
  author={Ge, Rundong and Loianno, Giuseppe},
  booktitle={2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  pages={4597--4603},
  year={2021},
  organization={IEEE}
}
Ge, R. and Loianno, G., 2021, September. Vipose: Real-time visual-inertial 6d object pose tracking. In 2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS) (pp. 4597-4603). IEEE.

原文:https://ieeexplore.ieee.org/abstract/document/9636283
代码、数据和视频:https


系列文章:
请在 《 《 文章 》 》 专栏中查找


摘要

估计物体的6D姿态对于运输、自动导航、操纵等机器人任务非常有益,同时在虚拟现实和增强现实等超越传统机器人的场景中也同样重要。相对于单张图片的姿态估计,姿态跟踪考虑了跨多个帧的时间信息,以克服可能的检测不一致并提高姿态估计的效率。在这项工作中,我们介绍了一种名为VIPose的新型深度神经网络(DNN),该网络结合惯性和摄像机数据来实时解决物体姿态跟踪问题。主要贡献是设计了一种新型的DNN架构,该架构融合视觉和惯性特征来预测连续图像帧之间物体的相对6D姿态。然后通过连续组合相对姿态来估计总体的6D姿态。我们的方法在处理由现有最先进解决方案难以处理的严重遮挡的物体时显示出了显著的姿态估计结果。所提出方法的有效性在一个新的数据集VIYCB上得到了验证,该数据集包括RGB图像、IMU数据和通过自动化标记技术创建的准确的6D姿态注释。这种方法展示了与最先进技术相当的准确性表现,但额外的好处是实时性。


I. INTRODACTION

从RGB图像序列跟踪物体的6D姿态(即,估计每一帧中物体相对于相机的3D平移和旋转),是各种机器人应用中的重要任务。这可以提高机器人在各种室外和室内环境中的导航性能,以解决复杂任务,如检查、制图和搜索救援。它还可以用于物体操纵任务的规划和抓取、空中电影摄影以跟踪移动目标,以及在虚拟现实(VR)和增强现实(AR)等超出机器人学的场景中使用。从单张RGB图像估计物体的6D姿态已经被广泛研究。传统方法通过图像和3D物体模型匹配物体的关键点[1]-[3]。最近基于深度学习的方法显著提高了姿态估计的准确性和鲁棒性[4]-[11]。一些单图像姿态估计方法是实时的(30 Hz),但准确性有限[5],[11]。此外,这些方法忽略了连续图像帧之间的时空信息,严格专注于单视图姿态估计。这可能导致连续帧之间的姿态估计不一致。

最近基于RGB的6D物体姿态跟踪方法取得了良好的跟踪性能[9],[12]。然而,这些方法对于严重遮挡不够鲁棒,这种情况需要每次重新初始化姿态跟踪过程。重新初始化通常由一个精确的6D姿态估计方法执行,这在计算上是昂贵的。因此,这些方法的速度相当有限,阻碍了它们在实时场景中的应用。为了克服上述缺点,我们提出了一种新的DNN架构,它结合了惯性测量单元(IMU)数据和相机图像。IMU在机器人领域已广泛用于定位和导航。最近的研究[13],[14]表明,可以通过训练有素的DNN处理IMU数据来预测速度,这可以用来解决相机定位问题。因此,IMU传感器可以提供关于相机运动的有用信息。在我们的案例中,我们利用这些信息实现在严重遮挡下也能准确的物体姿态跟踪。此外,对图像和IMU数据的联合学习过程导致了一种高效的表征,使得鲁棒的实时姿态跟踪成为可能。这项工作呈现了多个贡献。首先,我们提出了第一个融合相机和IMU数据的物体姿态跟踪方法,以应对复杂场景中包括物体遮挡的姿态跟踪挑战。其次,我们的方法通过利用IMU数据并通过传播和结合连续帧的相对姿态估计来加速姿态跟踪问题。最后,我们在收集的包括RGB图像和IMU数据的数据集上实验验证了我们的方法,这些数据通常在现有数据集中不可用。为了克服生成6D姿态注释的众所周知的困难任务,还引入了一种自动化标记技术来收集足够的训练和测试数据,从而显著减少了手工标记的努力。实验结果表明,提出的方法与现有最先进的解决方案相比取得了可比的结果,同时运行速度显著更快,达到了实时性能(即50.2 Hz)。论文的结构如下。第II部分,我们回顾了6D姿态估计和跟踪的相关工作,以及基于IMU数据的定位学习技术。第III部分介绍了提出的跟踪管道和VIPose网络。第IV部分展示了在我们的VIYCB数据集上的广泛实验结果。第V部分总结了工作并提出了未来的方向。


在这里插入图片描述图1:视觉-惯性6D物体姿态跟踪(顶部)。在我们的VIYCB数据集上进行速度-准确性基准测试,与现有最先进解决方案进行比较(底部)。



II. 相关工作

6D姿态估计: 传统上,单张图像中物体的6D姿态是通过模板匹配方法估计的,该方法将图像中的特征点与相应的3D模型特征点匹配。然后,可以通过使用PnP算法[1]解决这些局部特征的2D-3D对应关系来估计6D物体姿态。最近,基于深度学习的方法日益流行。SSD-6D[4]扩展了SSD物体检测器到6D姿态估计,增加了一个视点分类分支。[5]采用YOLO网络来检测图像中物体的3D包围框角点,并通过再次解决PnP问题来恢复6D姿态。PoseCNN[8]提出了一个端到端的框架,用于执行语义分割并预测3D旋转和平移。相反,DeepIM[9]采用FlowNetSimple网络[15]来通过迭代预测从渲染的前一姿态到当前图像观察的相对姿态,直到迭代姿态增量足够小。一般来说,将6D姿态估计方法应用于视频的每一帧来估计6D姿态,忽略了可能有用的时间信息,这些信息可以提高姿态估计过程的速度和准确性,而无需在每一帧都进行估计。

6D姿态跟踪: 我们的工作与最近在基于RGB的6D物体姿态跟踪方面的进展密切相关。PWP3D[16]提出通过优化物体3D模型的投影轮廓来跟踪物体姿态。[17]进一步改进了[16],采用一种新颖的优化方案和GPU并行化。然后[18]提出使用时间局部颜色直方图来改进姿态跟踪。最近,[19]采用深度神经网络预测连续帧之间的姿态差异。PoseRBPF[12]提出了一个Rao-Blackwellized粒子滤波方法来跟踪6D姿态,该方法将3D旋转和3D平移解耦,并考虑不确定性和物体对称性,达到了YCB视频数据集上的最佳性能。DeepIM[9]也可以扩展到通过预测连续两帧之间的相对变换来执行姿态跟踪。然而,这些方法对严重遮挡仍然不够鲁棒,丢失跟踪时需要重新初始化。[20]提出了一种新的网络,用于RGB-D数据上的6D姿态跟踪。它解耦了特征编码,以减少仿真和现实之间的领域差距,并且仅使用合成数据进行训练。这种方法在RGB-D数据上表现良好,而在我们的工作中,我们专注于更具挑战性的情况,即只有RGB图像可用,没有深度信息。

数据驱动的IMU定位: 传统上,IMU数据可以通过一些基于滤波的方法来进行定位。近年来,深度学习方法已经被应用于直接从IMU数据回归定位信息。VINet[21]提出了第一个端到端的视觉-惯性测距系统,它采用一个LSTM[22]网络来处理跨图像帧的IMU输入,以及一个FlowNet网络来处理图像对。视觉-惯性融合是通过连接IMU和视觉特征向量实现的。IONet[23]提出了一个LSTM网络来预测2D中的相对位移,并将预测结果连接起来,仅依赖于IMU输入来推断位置。RoNIN[13]将IMU数据旋转到与重力对齐的框架中,并使用1D ResNet网络预测一系列IMU数据的平均2D速度。TLIO[14]同样采用1D ResNet网络,但用于回归3D位移及其对应的不确定性,并采用紧耦合的扩展卡尔曼滤波框架进行状态估计。我们的工作与上述关于使用1D ResNet处理IMU数据的工作密切相关,但我们专注于物体姿态和跟踪问题,而不是相机定位。



III. APPROACH

姿态跟踪问题的目标是估计给定时刻 t t t t ∈ { 1 , 2 , … , N } t \in \{1, 2, \dots, N\} t{1,2,,N}相对于相机框架的物体的6D姿态 ξ t ∈ SE ( 3 ) \xi_t \in \text{SE}(3) ξtSE(3),给定:

  • 物体的3D CAD模型
  • 物体的初始姿态 ξ 0 ∈ SE ( 3 ) \xi_0 \in \text{SE}(3) ξ0SE(3),可以通过任何6D姿态估计方法获得
  • 一系列RGB图像 I j I_j Ij j ∈ { 0 , 1 , … , N } j \in \{0, 1, \dots, N\} j{0,1,,N}
  • 一系列IMU数据 G k G_k Gk k ∈ { 0 , 1 , … , M } k \in \{0, 1, \dots, M\} k{0,1,,M},其中 G k G_k Gk是一个包含在IMU框架的三个笛卡尔轴上的加速度和角速度测量的6维向量

在本节中,我们首先提供姿态跟踪工作流的概述,包括在使用VIPose DNN之前对原始图像和IMU输入进行预处理的阶段。随后我们描述我们的新型VIPose DNN,它通过结合两个连续的图像和一系列IMU数据来推断连续帧之间的相对姿态。然后通过组合连续帧之间的相对变换来获得最终的物体姿态。

A. 姿态跟踪工作流程

我们流水线在时间 t t t的姿态工作流程如图2所示。相机提供图像观察 I t I_t It,IMU提供加速度和角速度。图像预处理包括三个主要步骤:渲染、裁剪和调整大小,随后是IMU的预处理步骤。


在这里插入图片描述图2:姿态跟踪工作流程。在时间 t t t,相机提供图像观察 I t I_t It。使用物体的3D模型和上一次的姿态估计 ξ t − 1 \xi_{t-1} ξt1来渲染 I t − 1 R I^R_{t-1} It1R I t I_t It I t − 1 R I^R_{t-1} It1R都通过一个放大的边界框(如图3所示)进行裁剪,并调整为原始分辨率的一半大小。IMU缓冲区提供最近的 K K K个IMU测量数据。预处理后的图像对和IMU序列被送入VIPose网络,以预测相对姿态 Δ ξ t \Delta\xi_t Δξt,该相对姿态与 ξ t − 1 \xi_{t-1} ξt1结合,得到该帧的物体姿态估计 ξ t \xi_t ξt


1)渲染:首先,我们使用物体的3D模型和上一帧的估计6D姿态 ξ t − 1 \xi_{t-1} ξt1来渲染RGB图像 I t − 1 R I^R_{t-1} It1R作为最后一帧的参考图像,以提供要跟踪的目标物体。渲染过程从杂乱的场景中提取物体信息。这是通过将物体的3D模型放置在带有黑色背景的场景中心,并在由姿态 ξ t − 1 \xi_{t-1} ξt1定义的视点处投射RGB图像来执行的,如图3所示。

2)裁剪:由于原始图像中物体大小较小,提取用于跨帧匹配的有用特征可能很困难。受[9]启发,我们通过使用一个放大的边界框(白框),如图3所示,来裁剪渲染图像 I t − 1 R I^R_{t-1} It1R和图像观察 I t I_t It来解决这个问题。为了获得这样的边界框,我们首先使用相应3D物体模型的8个角点的2D投影 p i p_i pi i ∈ { 1 , 2 , … , 8 } i \in \{1, 2, \dots, 8\} i{1,2,,8}(如图3中的黄色点所示)来估计渲染图像中物体的大小,
x size = max ⁡ i ( p i x ) − min ⁡ i ( p i x ) {x}_\text{size} = \max_i(p_{i_x}) - \min_i(p_{i_x}) xsize=imax(pix)imin(pix)
y size = max ⁡ i ( p i y ) − min ⁡ i ( p i y ) {y}_\text{size} = \max_i(p_{i_y}) - \min_i(p_{i_y}) ysize=imax(piy)imin(piy)

放大的边界框以3D模型中心的2D投影为中心(在图3中用绿点表示),并保持输入图像的相同宽高比。放大边界框的高度 h h h和宽度 w w w按照以下公式获得:
h = λ ⋅ max ⁡ ( x size r y size ) , h = \lambda \cdot \max\left(\frac{{x}_\text{size}}{r}{y}_\text{size}\right), h=λmax(rxsizeysize),
w = λ ⋅ max ⁡ ( x size , y size ⋅ r ) w = \lambda \cdot \max({x}_\text{size}, {y}_\text{size}\cdot r) w=λmax(xsize,ysizer)
其中 r r r是原始图像的宽高比, λ \lambda λ表示扩展比例,以确保边界框在渲染图像和新图像中都包含物体。


在这里插入图片描述图3:渲染和裁剪的可视化。物体使用3D模型和估计的6D姿态进行渲染。3D模型中心和8个角点的2D投影分别用绿点和黄点表示。红框定义了渲染物体的尺寸 x size {x}_\text{size} xsize y size {y}_\text{size} ysize。白框代表放大的边界框,以绿点为中心,宽度为 w w w,高度为 h h h


3)调整大小:随后,我们调整裁剪后的图像对的大小以获取更多细节。裁剪后的图像对被调整为固定分辨率,这是原始图像大小的一半,以减少网络中的计算量。在训练阶段,这允许使用更大的批次大小以加快训练过程的收敛。在测试阶段,这显著减少了系统的运行时间,而不影响准确性。调整大小后的图像对被用作网络的视觉输入。

4)IMU预处理:在图像对预处理之后,我们还预处理IMU数据作为网络的惯性输入。设计了一个IMU缓冲区,作为一个队列,存储最近的 K K K个IMU测量数据。 K K K的选择可以根据IMU输入的频率和不同应用中相机的速度而变化。当新的图像观察到达时,IMU缓冲区中的全部数据被用作网络的输入,并以 K × 6 K \times 6 K×6的张量表示。根据类似[13]的方法,IMU序列从IMU框架旋转到一个朝向不明的坐标框架,使用来自设备的真实方向。朝向不明的坐标框架被定义为一个其Z轴与重力对齐并在整个序列中保持一致的坐标框架。

预处理后的图像对和IMU序列被输入VIPose网络,以预测图像 I t − 1 R I^R_{t-1} It1R I t I_t It之间的相对物体姿态 Δ ξ t ∈ SE ( 3 ) \Delta \xi_t \in \text{SE}(3) ΔξtSE(3)。然后,当前图像中的物体的6D姿态 ξ t \xi_t ξt可以通过 ξ t = Δ ξ t ⊗ ξ t − 1 \xi_t = \Delta \xi_t \otimes \xi_{t-1} ξt=Δξtξt1得到,其中 ⊗ \otimes 表示矩阵乘法操作。跟踪过程持续进行,直到获得最后一张图像的6D姿态。

一般来说,在时间 t t t,使用渲染图像 I t − 1 R I^R_{t-1} It1R而不是图像观察 I t − 1 I_{t-1} It1作为上一帧的参考图像进行姿态跟踪是有帮助的。为了进一步阐明这一点,如果估计的物体姿态 ξ t − 1 \xi_{t-1} ξt1不准确,那么物体姿态 ξ t − 1 \xi_{t-1} ξt1与图像 I t − 1 I_{t-1} It1中的相应物体观察之间会有不匹配,因为姿态 ξ t − 1 \xi_{t-1} ξt1受到估计漂移的影响。相反,渲染图像 I t − 1 R I^R_{t-1} It1R是使用估计的物体姿态 ξ t − 1 \xi_{t-1} ξt1生成的全新图像,它不受上述观察问题的影响。因此,估计 I t − 1 R I^R_{t-1} It1R I t I_t It之间的相对姿态对姿态漂移不敏感,有助于减少全局物体姿态估计的漂移。

B. VIPose网络

所提出的网络架构如图4所示。该网络由一个视觉分支组成,输入处理后的图像对 I t − 1 R I^R_{t-1} It1R I t I_t It,一个惯性分支从IMU序列中提取特征,以及一个输出分支预测相对姿态 Δ ξ t \Delta \xi_t Δξt


在这里插入图片描述图4:VIPose网络架构。蓝色块代表基于FlowNetC的视觉分支,用于产生视觉特征。绿色块代表基于1D ResNet的惯性分支,用于产生惯性特征。视觉和惯性特征通过连接两个特征向量融合,为相对姿态估计提供多模态特征。橙色块代表输出分支,直接回归两个连续帧之间的相对姿态。


视觉分支(图4中的蓝色块),基于FlowNet-C网络[15]从输入图像对中提取视觉特征,并且我们只采用原始FlowNet-C网络的卷积层。该网络预训练以预测一对图像之间的光流。光流的表示被认为对相对姿态估计有用,这在[9]中得到了证明。前三个卷积层分别从两个输入图像中提取低级特征,并为负责计算块间相似性的相关层生成两个特征图,因此找到图像对之间的对应关系。然后,最后六个卷积层提取高级特征并减小特征图的大小。最后一个卷积层的特征图输出被平展为视觉特征向量,以便后续特征融合。

惯性分支(图4中的绿色块)采用标准ResNet-18网络[24]的1D版本,并以IMU序列为输入,即先前指定的来自IMU缓冲区的 K × 6 K \times 6 K×6张量。受[13]的启发,我们采用了一个预训练的1D ResNet,用于预测给定IMU输入序列的平均2D速度。与其他网络架构(包括LSTM [22]和时间卷积网络[25])相比,这种方法表现出更好的性能。惯性分支使用[13]中的预训练权重初始化。同样,最后一个1D卷积层的输出被平展为惯性特征向量。

视觉特征和惯性特征通过连接两个特征向量融合,提供了一个多模态特征用于回归相对变换。当目标物体的视觉信息有限,如在严重遮挡情况下,惯性特征提供了有关相机运动的有用信息,用于推断相对姿态。

输出分支(图4中的橙色块)是一个多层感知机,它以融合的特征向量为输入,并输出两帧之间的相对姿态。它包含两个具有256维的全连接层,后面跟着两个分别用于预测旋转和平移的单独全连接层。相对姿态的表示对网络的性能至关重要。我们采用[20]中的 s e ( 3 ) se(3) se(3)表示,其中 v = [ t , w ] T ∈ s e ( 3 ) \text{v} = [\text{t}, \text{w}]^\text{T} \in se(3) v=[t,w]Tse(3),使得其伪指数映射位于 S E ( 3 ) SE(3) SE(3)中,

Δ ξ = pseudo-exp ( v ) = [ R t 0 T 1 ] ∈ S E ( 3 ) , (1) \Delta \xi = \text{pseudo-exp}(v) = \begin{bmatrix} \text{R} & \text{t} \\ 0^\text{T} & 1 \end{bmatrix} \in SE(3), \tag{1} Δξ=pseudo-exp(v)=[R0Tt1]SE(3),(1)
其中
R = I 3 × 3 + [ w ] × ∣ w ∣ sin ⁡ ( ∣ w ∣ ) + [ w ] × 2 ∣ w ∣ 2 ( 1 − cos ⁡ ( ∣ w ∣ ) ) , \text{R} = \text{I}_{3 \times 3} + \frac{[\text{w}]_\times}{|\text{w}|} \sin(|\text{w}|) + \frac{[\text{w}]_\times^2}{|\text{w}|^2} (1 - \cos(|\text{w}|)), R=I3×3+w[w]×sin(w)+w2[w]×2(1cos(w)),

并且 [ w ] × [\text{w}]_\times [w]×是斜对称矩阵。最后两个输出层用于直接回归 w \text{w} w t \text{t} t,然后使用该预测来计算相对姿态 Δ ξ \Delta \xi Δξ。网络采用端到端训练,考虑以下 L 2 L_2 L2损失

L = λ 1 ⋅ ∣ ∣ w − w g t ∣ ∣ 2 + λ 2 ⋅ ∣ ∣ t − t g t ∣ ∣ 2 , (2) \mathcal{L} = \lambda_1 \cdot ||\text{w} - \text{w}_{gt}||_2 + \lambda_2 \cdot ||\text{t} - \text{t}_{gt}||_2, \tag{2} L=λ1∣∣wwgt2+λ2∣∣ttgt2,(2)

其中 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2是旋转和平移的损失权重, w g t , t g t w_{gt}, t_{gt} wgt,tgt表示真实的相对姿态。

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

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

相关文章

LeetCode 热题100(八)【二叉树】(3)

目录 8.11二叉树展开为链表(中等) 8.12从前序与中序遍历序列构造二叉树(中等) 8.13路径总和III(中等) 8.14二叉树的最近公共祖先(中等) 8.15二叉树中的最大路径和(困…

【C语言】Union

一.Union的用法 1.什么是Union? union 共用体名{ 成员列表 }; union,“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 2.为什么使用union&#xff1…

Postgresql源码(138)alter table增加列的执行流程分析

alter table 逻辑比较繁琐,但并不复杂,这里以增加列为例简单梳理流程。 测试用例 drop table t_echo; create table t_echo(a int,b int); insert into t_echo select t.i, t.i*10 from generate_series(1,10) t(i); alter table t_echo add c varchar…

MobaXterm 软件及如何设置取消自动断开连接

MobaXterm 软件及如何设置取消自动断开连接 背景软件资料取消自动断开连接找打设置找到SSH Setting 背景 其实很容易找到类似的资料, 主要为了简单的记录一下, 还是写一下这个博客吧, 也算是自己的输出了. 当练习打字也行吧, 反正自己打字也是一坨, 打字太慢了. 软件资料 官…

【代码审计】常见漏洞专项审计-业务逻辑漏洞审计

❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x01 漏洞介绍 1、 原理 业务逻辑漏洞是一类特殊的安全漏洞,业务逻辑漏洞属于设计漏洞而非实…

YOLOv11实战垃圾分类

本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的特征提取能力,在多个图像分类任务中展现出卓越性能。本研究针对4种垃圾数据集进行训练和优化,该数据集包含丰富的垃圾图像样本&am…

Kafka集群中数据的存储是按照什么方式存储的?

1)Topic 数据的存储机制 Topic是逻辑上的概念,而partition是物理上的概念,每个partition对应于一个log文件,该log文件中存储的就是Producer生产的数据。Producer生产的数据会被不断追加到该log文件末端,为防止log文件…

渗透测试靶场 - vulhub -CVE漏洞 Weblogic 任意文件上传漏洞(CVE-2018-2894) 漏洞讲解 漏洞复现 亲测步骤能通过哟

漏洞说明 Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,可直接获取服务器权限。 两个页面 /ws_utc/begin.do /ws_utc/config.do Oracle 在2018年7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞, Web Se…

使用 PyTorch 实现 AlexNet 进行 MNIST 图像分类

AlexNet 是一种经典的深度学习模型,它在 2012 年的 ImageNet 图像分类比赛中大放异彩,彻底改变了计算机视觉领域的格局。AlexNet 的核心创新包括使用深度卷积神经网络(CNN)来处理图像,并采用了多个先进的技术如 ReLU 激…

基于图的去中心化社会推荐过滤器

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月11日19点20分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id17176636216843&uideba758a1550b46bb…

深度学习模型评价指标介绍

模型评价指标 模型评价指标1.混淆矩阵2.Overall Accuracy3.Average accuracy4.Kappa系数5.Recall6.Precision7.F18.PR曲线9.置信度10.IOU11.AP12.mAP 模型评价指标 在我们学习机器学习以及深度学习,甚至在计算机视觉领域,我们不可避免的要利用一些指标评…

k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储

文章目录 [toc]docker registry 部署生成 htpasswd 文件生成 secret 文件 生成 registry 配置文件创建 service创建 statefulset创建 ingress验证 docker registry docker registry 监控docker registry ui docker registry dockerfile docker registry 配置文件 S3 storage dr…

【自用】0-1背包问题与完全背包问题的Java实现

引言 背包问题是计算机科学领域的一个经典优化问题,分为多种类型,其中最常见的是0-1背包问题和完全背包问题。这两种问题的核心在于如何在有限的空间内最大化收益,但它们之间存在一些关键的区别:0-1背包问题允许每个物品只能选择…

Zookeeper的安装与使用

一、简介 1.1、概念 ZooKeeper 是一个开源的分布式协调服务,主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发,提供简单易用的接口和高性能、高稳定性…

【模块一】kubernetes容器编排进阶实战之etcd的介绍与使用

etcd进阶 etcd简介:  etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 官方网站:https://etcd.io/  gith…

【机器学习】如何配置anaconda环境(无脑版)

马上就要上机器学习的实验,这里想写一下我配置机器学习的anaconda环境的二三事 一、首先,下载安装包: Download Now | Anaconda 二、打开安装包,一直点NEXT进行安装 这里要记住你要下载安装的路径在哪,后续配置环境…

矩阵中的路径(dfs)-acwing

题目 23. 矩阵中的路径 - AcWing题库 代码 class Solution { public://以每一个坐标作为dfs起点bool hasPath(vector<vector<char>>& matrix, string str) {for (int i 0; i < matrix.size(); i )for (int j 0; j < matrix[i].size(); j )if (dfs(…

WEB攻防-通用漏洞SQL注入sqlmapOracleMongodbDB2等

SQL注入课程体系&#xff1a; 1、数据库注入-access mysql mssql oracle mongodb postgresql 2、数据类型注入-数字型 字符型 搜索型 加密型&#xff08;base64 json等&#xff09; 3、提交方式注入-get post cookie http头等 4、查询方式注入-查询 增加 删除 更新 堆叠等 …

android studio 更改gradle版本方法(备忘)

如果出现类似以下&#xff1a; Your build is currently configured to use Java 17.0.11 and Gradle 6.1.1. 或者类似&#xff1a; Failed to calculate the value of task ‘:app:compileDebugJavaWithJavac‘ property ‘options.generatedSo 消息时需要修改gradle版本&…

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言&#xff1a; 两个本想描述一样的意思的词&#xff0c;只因一字只差就让人觉得一个是好牛&#xff0c;一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中&#xff0c;但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…