当前位置: 首页 > news >正文

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras(CVPR2023)

  • 前言
    • Abstract
    • 1. Introduction
    • 2. Related Work
    • 3. Method
      • 3.1. Feature Network
      • 3.2. Frame Attention Module
      • 3.3. Supervision
    • 4. Experiments
    • 5. Conclusion
    • 6. Acknowledgment
    • Supplementary补充部分
      • 7. Future Work & Limitations

前言

论文原文:https://arxiv.org/abs/2211.12826
论文代码:https://github.com/uzh-rpg/deep_ev_tracker

Title:Data-driven Feature Tracking for Event Cameras
Authors:Nico Messikommer* Carter Fang∗ Mathias Gehrig Davide Scaramuzza
Robotics and Perception Group, University of Zurich, Switzerland

在此仅做翻译(经过个人修改,有基础的话应该不难理解),有时间会有详细精读笔记。

Abstract

由于其高时间分辨率、增强的运动模糊恢复能力和非常稀疏的输出,事件摄像机已被证明是低延迟和低带宽特征跟踪的理想选择,即使在具有挑战性的场景中也是如此。现有的事件摄像机特征跟踪方法要么是手工制作的,要么是从第一性原理推导出来的,但需要大量的参数调整,对噪声敏感,并且由于未建模的效果而不能推广泛化到不同的场景。为了解决这些不足,我们为事件摄像机引入了第一个数据驱动的特征跟踪器,它利用低延迟事件来跟踪在灰度帧中检测到的特征。我们通过一种新颖的帧注意力模块实现了稳健的性能,该模块跨特征轨迹共享信息。通过直接将零样本从合成数据传输到实际数据,我们的数据驱动跟踪器在相对特征年龄方面比现有方法高出120%,同时还实现了最低延迟。通过采用新颖的自我监督策略使我们的跟踪器适应真实数据,这一性能差距进一步扩大到130%。

第一性原理:原文是first principles,也不知道翻译成什么好,具体解释可以参考博客
https://www.zhihu.com/question/21459243
https://zhuanlan.zhihu.com/p/41263094

多媒体材料视频可在https://youtu.be/dtkXvNXcWRY上获取,代码可在https://github.com/uzh-rpg/deep_ev_tracker上获取

1. Introduction

尽管在现实世界中有许多成功的实现,但现有的特征跟踪器仍然主要受到标准相机硬件性能的限制。首先,标准相机受到带宽的制约,这明显限制了它们在快速移动下的性能:在低帧速率下,它们的带宽最小,但以增加延迟为代价;此外,低帧速率导致连续帧之间的外观变化较大,显著增加了跟踪特征的难度。在高帧速率下,以增加带宽开销和下游系统的功耗为代价来减少延迟。标准相机的另一个问题是运动模糊,这在高速低光场景中很突出,见图1。随着当前AR/VR设备的商品化,这些问题变得越来越突出。
在这里插入图片描述
图1:我们的方法利用事件的高时间分辨率,在标准帧遭受运动模糊的高速运动中提供稳定的特征轨迹。为了实现这一点,我们提出了一种新的帧注意力模块,该模块将跨特征轨迹的信息进行组合。

事件摄像机已被证明是标准摄像机的理想补充,以解决带宽延迟权衡[16,17]。事件摄像机是受生物启发的视觉传感器,每当单个像素的亮度变化超过预定义阈值时,它就会异步触发信息。由于这种独特的工作原理,事件摄像机输出的稀疏事件流具有微秒量级的时间分辨率,并具有高动态范围和低功耗的特点。由于事件主要是根据边缘触发的,因此事件摄像机的带宽最小。这使它们成为克服标准相机缺点的理想选择。

在高速和高动态范围场景中,用于事件摄像机的现有功能跟踪器在延迟和跟踪鲁棒性方面显示出前所未有的结果[4,17]。尽管如此,到目前为止,基于事件的跟踪器是基于经典模型假设开发的,这通常会导致在存在噪声的情况下跟踪性能较差。它们要么依赖于运动参数的迭代优化[17,26,49],要么对特征的可能平移采用简单分类[4],因此,由于未建模的影响,不会推广到不同的场景。此外,它们通常具有复杂的模型参数,需要大量手动调整以适应不同的事件摄像机和新场景。

为了解决这些不足,我们提出了第一个用于事件摄像机的数据驱动特征跟踪器,该跟踪器利用事件摄像机的高时间分辨率与标准帧相结合,以最大限度地提高跟踪性能。使用神经网络,我们的方法通过在随后的事件补丁中定位灰度图像中的模板补丁来跟踪特征。网络体系结构的特点是分配有一个相关卷,并使用递归层来实现长期一致性。为了提高跟踪性能,我们引入了一种新的帧注意力模块,该模块在一幅图像的特征轨迹之间共享信息。我们首先在合成光流数据集上进行训练,然后使用我们新颖的基于使用相机姿态的3D点三角测量的自我监督方案对其进行微调。

在事件摄像机数据集基准[33]和最近发布的EDS数据集[22]上,我们的跟踪器分别比最先进的基线高出5.5%和130.2%。这种性能是在不需要大量手动调整参数的情况下实现的。此外,在不优化部署代码的情况下,我们的方法实现了比现有方法更快的推理。最后,我们展示了我们的方法与成熟的基于帧的跟踪器KLT[30]的组合如何在高速场景中发挥两全其美的作用。这种标准相机和事件相机的组合为基于跟踪质量的谨慎触发帧的概念铺平了道路,这是未来应用程序的关键工具,在这些应用程序中,运行时间和功耗至关重要。

2. Related Work

基于帧的特征跟踪:虽然以前没有利用深度学习来跟踪事件中的特征,但最近提出了使用标准帧进行特征跟踪的数据驱动方法。其中包括PIP[20],它估计整个图像序列的查询特征位置的轨迹,因此甚至可以通过利用前后的轨迹通过遮挡来跟踪特征。DPVO[40]不是处理整个序列,而是拍摄一系列图像,并实时估计场景深度和相机姿态。它通过从帧的特征图中随机采样补丁,并将其添加到二分帧图中来实现这一点,该二分帧图可通过将不同相机姿态下观察到的补丁的特征描述符进行关联来迭代优化。特征跟踪的相关研究领域是光流估计,即两帧之间的密集像素对应性估计。存在许多光流方法[13],其中基于相关性的网络[24,39]是最先进的。然而,尽管最近取得了进步,但基于帧的特征跟踪器仍然受到标准相机的硬件限制。为了解决这一缺点,我们提出了一种自监督跟踪器,该跟踪器可以解锁事件摄像机的鲁棒性特征,用于特征跟踪,并通过这样做,优于最先进的跟踪方法。

姿势监督:利用相机姿势之前曾被探索用于训练特征检测和匹配网络。Wang等人[44]使用姿态数据来监督用于逐像素对应估计的网络,其中两帧之间的核约束用于惩罚不正确的预测。最近,一种名为Patch2Pix[47]的对应细化网络通过使用桑普森距离而不是欧几里得距离来扩展对极约束监督。我们的自我监督策略不是只考虑两个相机姿势,而是使用DLT[1]为多帧中的每个预测轨迹计算一个3D点,这使我们的监督信号对误差更具鲁棒性。此外,我们通过计算重投影点和预测点之间的2D距离来监督我们的网络,而不存在到核线的距离的模糊性。

基于事件的特征跟踪:近年来,多项工作探索了基于事件的特性跟踪,以提高在具有挑战性的条件下的鲁棒性,例如时间步长之间像素位移较大的快速运动场景和具有非常亮和暗区域的HDR场景[17]。早期的工作[26,34,49]将特征作为事件的点集进行跟踪,并使用ICP[5]来估计时间步长之间的运动,这也可以与基于帧的跟踪器相结合以提高性能[12]。EKLT[17]不是点集,而是估计模板和亮度增量图像的目标块之间的参数变换以及特征的速度。其他基于事件的跟踪器在空间和时间上沿着Bézier曲线[37]或B样条曲线[10]对齐事件,以获得特征轨迹。

为了利用事件流固有的异步性,还提出了逐事件跟踪器[2,11]。其中之一是HASTE[4],它将可能的变换空间减少到固定数量的旋转和平移。在HASTE中,每个新事件都会导致假设的置信度更新,如果超过置信度阈值,则会导致状态转换。另一项名为eCDT[23]的工作首先将特征表示为事件集群,然后将传入事件合并到现有事件中,从而产生更新的质心,从而更新特征位置。在与特征跟踪类似的方向上,提出了几个基于事件的特征检测器[8,31],其中一些检测器基于图像中检测的接近度来执行特征跟踪[3,9]。除了基于事件的特征跟踪和检测外,多项工作还使用事件相机解决了对象跟踪问题[7,14,27,35,45,46]。

使用事件摄像机进行光流估计的任务也越来越受欢迎。Zhu等人[49]使用ICP和基于期望最大化的目标函数来估计来自事件的特征的光流,以求解仿射变换的参数。最近,提出了一种自适应块匹配算法[29]来估计光流。最后,最近基于事件的光流估计的数据驱动方法[18,48]利用了深度光流估计方面的进展。受这些进步的启发,我们的跟踪网络利用相关层来更新特征的位置。

3. Method

特征跟踪算法的目标是在随后的时间步长中跟踪参考帧中的给定点。他们通常通过提取参考系中特征位置周围的外观信息来实现这一点,然后在后续的参考系中进行匹配和定位。根据该流水线,我们在时间步长 t 0 t_0 t0提取给定特征位置的灰度帧中的图像补丁 P 0 P_0 P0,并使用异步事件流跟踪该特征。时间步 t j − 1 t_{j−1} tj1 t j t_j tj之间的事件流 E j = E_j= Ej= { e i e_i ei } i = 1 n j _{i=1}^{n_j} i=1nj由事件 e i e_i ei组成,每个事件 e i e_i ei编码像素坐标 x i x_i xi、具有微秒级分辨率 τ i τ_i τi的时间戳和亮度变化的极性 p i p_i pi∈{−1,1}。有关事件摄像机工作原理的更多信息,请参阅[15]。

给定参考补丁 P 0 P_0 P0,我们的网络使用在前一时间步长 t j − 1 t_{j−1} tj1的特征位置的局部邻域中的相应事件流 E j E_j Ej来预测 t j − 1 t_{j−1} tj1 t j t_j tj期间的相对特征位移 ∆ f j ^ ∆\hat{f_j} fj^。本地窗口内的事件被转换为密集事件表示 P j P_j Pj,特别是SBT[43]的最大时间戳版本,其中每个像素被分配最近事件的时间戳。一旦我们的网络已经将参考补丁 P 0 P_0 P0定位在当前事件补丁 P j P_j Pj内,则特征轨迹被更新,并且在新预测的特征位置处提取新的事件补丁 P j + 1 P_{j+1} Pj+1,同时保持参考补丁 P 0 P_0 P0。然后可以迭代地重复该过程,同时累积相对位移以构建一个连续的特征轨迹。我们的方法和新的框架注意力模块的概述如图2所示。

在第3.1节中,我们解释了特征网络如何独立处理每个特征轨迹。由此产生的输出作为我们的帧注意力模块的输入,该模块将来自一幅图像中所有特征轨迹的信息组合在一起,见第3.2节。最后,我们在第3.3节中介绍了我们对具有地面实况的数据的监督方案和基于相机姿态的自我监督策略。关于每个网络的具体架构细节,我们参考补充部分。

3.1. Feature Network

为了将模板补丁 P 0 P_0 P0定位在当前事件补丁 P j P_j Pj内,特征网络首先使用基于特征金字塔网络的单独编码器对两个补丁进行编码[28]。得到的输出是两个补丁的每像素特征图,这两个补丁包含上下文信息,同时保留空间信息。为了显式地计算事件补丁和模板补丁中每个像素之间的相似性度量,我们基于模板补丁编码器的瓶颈特征向量 R 0 R_0 R0和事件补丁的特征图构建了相关图 C j C_j Cj,如图2所示。然后将两个特征图与相关性图 C j C_j Cj一起作为输入提供给第二特征编码器,以便细化相关性图。该特征编码器由标准卷积和一个具有时间单元状态 F j F_j Fj的ConvLSTM块[38]组成。时间信息对于预测随时间变化的一致特征轨迹至关重要。此外,它能够集成由事件提供的运动信息。特征网络的输出是空间维度为1×1的单个特征向量。到目前为止,每个特征都是独立处理的。

在这里插入图片描述
图2:如(a)所示,我们的事件跟踪器将灰度图像 I 0 I_0 I0中的参考补丁 P 0 P_0 P0和由时间步长 t j t_j tj处的事件流 E j E_j Ej构建的事件补丁 P j P_j Pj作为输入,并预测相对特征位移 ∆ f j ^ ∆\hat{f_j} fj^。每个特征由特征网络单独处理,该特征网络使用状态为 F F F的ConvLSTM层来基于模板特征向量 R 0 R_0 R0和事件补丁的逐像素特征图来处理相关性图 C j C_j Cj。为了在不同的特征轨迹之间共享信息,我们新的帧注意力模块(b)使用自注意力和时间状态 S S S融合图像中所有轨迹的处理后的特征向量,用于计算最终位移 ∆ f j ^ ∆\hat{f_j} fj^

3.2. Frame Attention Module

为了在同一图像中的特征之间共享信息,我们引入了一种新的帧注意力模块,如图2所示。由于刚体上的点在图像平面中表现出相关的运动,因此在图像上的特征之间共享信息有很大的好处。为了实现这一点,我们的帧注意力模块将当前时间步长 t j t_j tj的所有补丁的特征向量作为输入,并基于所有特征向量的自注意力加权融合来计算每个补丁的最终位移。具体来说,我们在时间上保持每个特征的状态 S S S,以便在注意力融合中利用先前时间步长的位移预测。时间信息应该有助于过去具有相似运动的特征的信息共享。通过这种方式,可以在具有挑战性的情况下通过自适应地将易受攻击的特征轨迹调节在相似的特征轨迹上来维持易受攻击特征轨迹。每个输入特征向量首先使用具有Leaky ReLU激活(MLP)的两个线性层与当前状态 S j − 1 S_{j−1} Sj1单独融合。然后,图像中所有得到的融合特征都被用作多头注意力层(MHA)[42]的key、query和value对,该层对图像中的每个特征执行自注意力。为了便于训练,我们在每个特征的多头注意力周围引入了跳跃连接,该跳跃连接在训练过程中由层尺度层[41](LS)自适应加权。然后在简单选通层中使用所得到的特征向量,以基于先前状态 S j − 1 S_{j−1} Sj1(GL)计算更新状态Sj,参见等式(3)。
在这里插入图片描述
最后,更新后的状态 S j S_j Sj由一个线性层处理,以预测最终位移 ∆ f j ^ ∆\hat{f_j} fj^

3.3. Supervision

一般来说,跟踪器、提取器甚至流网络的监督仍然是一个开放的研究领域,因为包含像素对应关系作为基本事实的数据集很少。更糟糕的是,包含精确像素对应关系的基于事件的数据集更少。为了克服这一限制,我们在第一步中对来自Multiflow数据集[19]的合成数据进行训练,该数据集包含帧、合成生成的事件和GT像素流。然而,由于没有对噪声进行建模,合成事件与真实事件摄像机记录的事件有很大不同。因此,在第二步中,我们使用新的姿态监督损失来微调我们的网络,以缩小合成事件和真实事件之间的差距。

合成监督:合成数据的优点是它提供了GT特征跟踪。因此,基于L1距离的损失可以直接应用于预测相对位移和地面实况相对位移之间的每个预测步骤 j j j,见图3。预测的特征轨迹可能偏离模板补丁之外,使得下一个特征位置不在当前搜索中。因此,如果预测位移和地面实况位移之间的差 ∣ ∣ ∆ f j ^ − ∆ f j ∣ ∣ 1 ||∆\hat{fj}−∆f_j||_1 ∣∣∆fj^fj1超过补丁半径 r r r,我们不会将L1距离与最终损失相加,以避免在监督中引入噪声。我们的截断损失 L r p L_{rp} Lrp公式如下。
在这里插入图片描述
在这里插入图片描述
图3:L1距离 ℓ J ℓ_J J如时间步长tj+k所示,如果GT特征在当前事件补丁 P j P_j Pj之外,则预测的 ∆ f ^ j ∆\hat{f}_j f^j和GT位移 ∆ f j ∆f_j fj之间的 ℓ J ℓ_J J被用作截断损失,该截断损失被设置为零。

为了减少合成数据和真实数据之间的差距,我们在训练过程中应用了on-the-fly增强,这显著增加了运动分布。为了教导网络几何鲁棒表示,仿射变换 W W W被应用于当前事件补丁 P j P_j Pj,以在每个预测步骤获得增强补丁 P j a u g P^{aug}_j Pjaug,如等式(6)所示。在训练期间,从每个预测步骤的均匀分布中随机采样旋转、平移和尺度 θ = ( θ r , θ t , θ s ) θ=(θ_r,θ_t,θ_s) θ=θrθtθs的增强参数。然后,我们的跟踪器 T T T在给定增强补丁 P j a u g P^{aug}_j Pjaug原始模板补丁 P 0 P_0 P0的情况下预测相对位移 ∆ f ^ j − 1 a u g ∆\hat{f}^{aug}_{j−1} f^j1aug。然后计算预测位移 ∆ f ^ j − 1 a u g ∆\hat{f}^{aug}_{j−1} f^j1aug和通过应用相同的仿射变换W获得的增强地面实况 ∆ f j − 1 a u g ∆{f}^{aug}_{j−1} fj1aug之间的损失。

在这里插入图片描述
姿势监督:为了使网络适应真实事件,我们引入了一种新的姿势监督损失,该损失仅基于校准相机的真实姿势。使用来自运动算法的结构,例如COLMAP[36],或者通过外部运动捕捉系统,可以容易地获得稀疏时间步长tj的地面实况姿态。由于我们的监督策略依赖于基于姿势的3D点的三角测量,因此它只能应用于静态场景。

在微调的第一步中,我们的网络预测一个序列的多个特征轨迹。对于每个预测的轨迹 i i i,我们使用直接线性变换[1]计算相应的3D点 X i X_i Xi。具体而言,对于每个特征位置 x j x_j xj,我们可以使用相机姿态(表示为旋转矩阵 R t j R_{t_j} Rtj和平移向量 T t j T_{t_j} Ttj,在时间步长 t j t_j tj)和校准矩阵 K K K来编写假设针孔相机模型的投影方程,参见等式(9)。得到的投影矩阵可以表示为矩阵 M j M_j Mj,该矩阵 M j M_j Mj由具有k∈{1,2,3}的列向量 m j k T m^{k^T}_j mjkT组成。
在这里插入图片描述
使用直接线性变换,我们可以将投影方程重新表述为方程中的齐次线性系统。(10)。通过使用SVD,我们获得了3D点Xj,这使方程的最小二乘误差最小化。(10)
在这里插入图片描述
一旦计算出 X i X_i Xi的3D位置,我们就可以使用透视投影公式(9)找到每个时间步长 t j t_j tj的重投影像素点 x ^ j \hat{x}_j x^j。然后,基于在时间步长 t j t_j tj处每个可用相机姿势的预测特征 x ^ j \hat{x}_j x^j和重投影特征KaTeX parse error: Undefined control sequence: \x at position 1: \̲x̲_j来构建最终姿势监督损失,如图4所示。与方程的监督设置一样。(5),如果重新投影的特征在事件补丁之外,我们使用截断的损失,该损失排除了损失贡献。
在这里插入图片描述
图4:为了使我们的跟踪器适应真实的事件数据,我们的自我监督损失根据预测的轨迹和相机姿势计算一个三角点。然后将3D点重新投影到每个相机平面,并且L1距离ℓj被用作监督信号。

4. Experiments

数据集:我们在常用的事件摄像机数据集[33](EC)上比较了我们提出的数据驱动跟踪器,该数据集包括APS帧(24 Hz)和使用DA VIS240C摄像机[6]记录的分辨率为240×180的事件。此外,该数据集从外部运动捕捉系统以200Hz的速率提供地面实况摄像机姿态。此外,为了评估新传感器设置的跟踪性能,我们在最新发布的事件辅助直接稀疏Odometry数据集[22](EDS)上测试了我们的方法。与EC相比,EDS数据集包含使用分束器设置捕获的更高分辨率的帧和事件(640×480像素)。与EC数据集类似,它包括来自外部运动捕捉系统的150 Hz速率的地面实况姿态。这两个数据集中的大多数场景都是静态的,因为EDS和EC的主要目的是评估相机姿态估计。关于具体的微调和测试顺序选择,我们参考补充。

5. Conclusion

我们为事件摄像机提供了第一个数据驱动的特征跟踪器,它利用低延迟事件来跟踪灰度帧中检测到的特征。通过我们新颖的帧注意力模块,它融合了特征轨迹之间的信息,我们的跟踪器在两个数据集上优于现有技术,同时在推理时间方面更快。此外,我们提出的方法不需要密集的手动参数调整,并且可以通过我们的自我监督策略适用于新的事件摄像机。最后,我们可以将基于事件的跟踪器与KLT跟踪器相结合,以预测具有挑战性的场景中的稳定轨迹。这种标准相机和事件相机的组合为基于跟踪质量的谨慎触发帧的概念铺平了道路,这是未来应用程序的关键工具,在这些应用程序中,运行时间和功耗至关重要。

6. Acknowledgment

作者要感谢Javier Hidalgo Carrió对EDS数据集的支持。这项工作得到了瑞士国家科学基金会通过国家研究能力中心(NCCR)机器人技术(拨款编号51NF40 185543)和欧洲研究委员会(ERC)根据第864042号拨款协议(AGILEFLIGHT)的支持。

Supplementary补充部分

7. Future Work & Limitations

由于EC和EDS数据集是为了对姿态估计算法进行基准测试而记录的,因此它们只包含静态场景。因此,我们没有评估我们的方法,尤其是我们的帧注意力模块在具有动态对象的场景中的表现。尽管如此,我们相信我们的帧注意力模块对于其他使用事件或标准相机的跟踪器来说是有用的。最后,我们的方法依赖于灰度图像中的特征检测质量,这在具有挑战性的场景中可能会受到影响。然而,我们的自我监督策略也为微调事件摄像机的特征检测器提供了可能性,以提高特征检测的稳健性。

相关文章:

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras

深度学习论文分享(二)Data-driven Feature Tracking for Event Cameras(CVPR2023) 前言Abstract1. Introduction2. Related Work3. Method3.1. Feature Network3.2. Frame Attention Module3.3. Supervision 4. Experiments5. Con…...

蛇优化算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 蛇优化算法算法流程图初始化进化操作搜索阶段(无食物)——全局搜索搜索阶段(有食物)——局部搜索战斗模式交配模式 备…...

循环神经网络(RNN)简单介绍—包括TF和PyTorch源码,并给出详细注释

文章目录 循环神经网络(RNN)入门教程1. 循环神经网络的原理2. 循环神经网络的应用3. 使用keras框架实现循环神经网络3.1导入对应的库及加载数据集3.2.数据预处理3.3定义RNN模型3.4训练模型3.5测试模型 4.使用PyTorch框架实现上述功能—注释详细5.结论 循…...

Struts2 快速入门

Struts2 是一个基于 MVC 设计模式的 Java Web 应用程序框架,它可以帮助我们更加有效地开发 Web 应用程序。Struts2 采用了前端控制器模式,通过核心控制器 DispatchServlet 将所有请求进行集中处理,然后将请求分发到指定的 Action 中&#xff…...

关于PullToRefreshView下拉刷新失效问题

一、问题原因 昨天,突然一个问题丢在了我的头上,用户反馈说某某界面下拉刷新不好使啊,怎么回事。二话不说直接运行项目,经过测试,发现果然不好使。一看代码提交日期好家伙2020年,百思不得其解,…...

JAVA开发中的六大原则

JAVA开发中的六大原则,也被称为SOLID原则,是软件开发中常用的一组设计原则。这些原则提供了实现高质量、易于维护和可扩展软件的基本策略。 以下是JAVA开发中的六大原则以及它们的详细说明: 单一职责原则(Single Responsibility…...

Matplotlib 安装

Matplotlib 安装 本章节,我们使用 pip 工具来安装 Matplotlib 库,如果还未安装该工具,可以参考python 怎么使用pip进行包管理。 安装 matplotlib 库: pip install matplotlib 安装完成后,我们就可以通过 import 来…...

CF - Li Hua and Pattern

题意:给出了矩阵,里面每个位置分为蓝色或红色(数据上用1和0体现了),给出了一个操作次数,每次可以改变一个坐标的颜色,问能否通过操作使得图像旋转180度后不变。 解:很容易想到&…...

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

在今天的 2023 阿里云合作伙伴大会上,阿里云智能云原生应用平台运营&生态业务负责人王荣刚宣布: “阿里云云原生合作伙伴计划”全新升级。他表示: 云原生致力于帮助企业客户最大限度的减轻运维工作,更好的实现敏捷创新&#x…...

OSCP-Escape(gif绕过)

目录 扫描 WEB 扫描 sudo nmap 192.168.233.113 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) 8080/tcp open http Apache…...

iMazing2023最新免费版iOS设备管理软件

iMazing是一款功能强大的iOS设备管理软件,它可以帮助用户备份和管理他们的iPhone、iPad或iPod Touch上的数据。除此之外,它还可以将备份数据转移到新的设备中、管理应用程序、导入和导出媒体文件等。本文将详细介绍iMazing的功能和安全性,并教…...

Git上传文件代码到GitHub

删除线上git:删除GitHub仓库里的文件夹_阿巴资源站的博客-CSDN博客 1. 创建空文件夹 2. cd 到本文件夹 3. git init ,初始化,在本地创建一个Git仓库 4. 同时按住“ Command Shift . ”三个按键,即可查看当下文件夹中的隐藏文件 5. 克隆…...

JavaScript概述二(Date+正则表达式+Math+函数+面向对象)

1.Date 1.1 new一个Date对象表示当前系统时间 var nownew Date(); console.log(now);1.2 根据传入的时间格式表示时间 var date1new Date(2023-4-20 00:16:40); console.log(date1); 1.3 传入时间毫秒数,返回从1900年1月1日8时(东八区)X分X…...

一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,电话,热线

一个朋友弄来的,太牛了,特别是后面内容,不看不知道,一看吓一跳,我也收藏一下: 工商银行 95588 建设银行 95533 农业银行 95599 中国银行 95566 交通银行 95559 浦发银行 95528 民生银行 95568 兴业银行 955…...

VGA协议实践

文章目录 前言一、VGA接口定义与传输原理1、VGA接口定义2、传输原理3、不同分辨率对应不同参数 二、Verilog编程1、VGA显示彩色条纹2、VGA显示字符3、输出一幅彩色图像4、Quartus操作1、添加PLL核2、添加ROM核 三、全部代码四、总结五、参考资料 前言 VGA的全称是Video Graphi…...

毕业5年的同学突然告诉我,他已经是年薪30W的自动化测试工程师....

作为一名程序员,都会对自己未来的职业发展而焦虑。一方面是因为IT作为知识密集型的行业,知识体系复杂且知识更新速度非常快,“一日不学就会落后”。 另外一方面,IT又是劳动密集型的行业,不仅业人员多,而且个…...

操作系统原理 —— 进程有哪几种状态?状态之间如何切换?(七)

进程的五种状态 首先我们一起来看一下进程在哪些情况下,会有不同的状态表示。 创建态、就绪态 当我们刚开始运行程序的时候,操作系统把可执行文件加载到内存的时候,进程正在被创建的时候,它的状态是创建态,在这个阶…...

可算是熬出头了,测试4年,费时8个月,入职阿里,涨薪14K

前言 你的努力,终将成就无可替代的自己。 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事点点点的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…...

5款十分小众的软件,知道的人不多但却很好用

今天推荐5款十分小众的软件,知道的人不多,但是每个都是非常非常好用的,有兴趣的小伙伴可以自行搜索下载。 1.视频直播录制——OBS Studio OBS Studio可以让你轻松地录制和直播你的屏幕、摄像头、游戏等内容。你可以使用OBS Studio来创建多种…...

Linux驱动开发:uboot启动流程详解

前言:uboot作为Linux驱动开发的 “三巨头” 之一,绝对是一座绕不开的大山。当然,即使不去细致了解uboot启动流程依旧不影响开发者对uboot的简单移植。但秉持着知其然知其所以然的学习态度,作者将给读者朋友细致化的过一遍uboot启动…...

分治与减治算法实验: 排序中减治法的程序设计

目录 前言 实验内容 实验目的 实验分析 实验过程 流程演示 写出伪代码 实验代码 代码详解 运行结果 总结 前言 本文介绍了算法实验排序中减治法的程序设计。减治法是一种常用的算法设计技术,它通过减少问题的规模来求解问题。减治法可以应用于排序问题&…...

leetcode两数、三数、四数之和

如有错误,感谢不吝赐教、交流 文章目录 两数之和题目方法一:暴力两重循环(不可取)方法二:HashMap空间换时间 三数之和题目方法一:当然是暴力破解啦方法二:同两数之和的原理,借助Has…...

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…...

【MYSQL】Java的JDBC编程(idea连接数据库)

1. 配置 (1)新建一个项目 (2)Build System 那里选择Maven,下一步Create (3)配置pom.xml文件 首先查看自己的MYSQL版本:进入MySQL命令窗口 我的MYSQL版本是8.0版本的. 下一步,…...

机器学习——主成分分析法(PCA)概念公式及应用python实现

机器学习——主成分分析法(PCA) 文章目录 机器学习——主成分分析法(PCA)一、主成分分析的概念二、主成分分析的步骤三、主成分分析PCA的简单实现四、手写体识别数字降维 一、主成分分析的概念 主成分分析(PCA&#x…...

手写axios源码系列二:创建axios函数对象

文章目录 一、模块化目录介绍二、创建 axios 函数对象1、创建 axios.js 文件2、创建 defaults.js 文件3、创建 _Axios.js 文件4、总结 当前篇章正式进入手写 axios 源码系列,我们要真枪实弹的开始写代码了。 因为 axios 源码的代码量比较庞大,所以我们这…...

HTB-Time

HTB-Time 信息收集80端口 立足pericles -> root 信息收集 80端口 有两个功能,一个是美化JSON数据。 一个是验证JSON,并且输入{“abc”:“abc”}之类的会出现报错。 Validation failed: Unhandled Java exception: com.fasterxml.jackson.core.JsonPa…...

零基础C/C++开发到底要学什么?

作者:黑马程序员 链接:https://www.zhihu.com/question/597037176/answer/2999707086 先和我一起看看,C/C学完了可以做什么: 软件工程师:负责设计、开发、测试和维护各类型的软件应用程序;游戏开发&#x…...

OpenStack中的CPU与内存超分详解

目录 什么是超分 CPU超分 查看虚拟机虚拟CPU运行在哪些物理CPU上 内存超分 内存预留 内存共享 如何设置内存预留和内存共享 全局设置 临时设置 什么是超分 超分通常指的是CPU或者GPU的分区或者分割,以在一个物理CPU或GPU内模拟多个逻辑CPU或GPU的功能。这…...

main.m文件解析--@autoreleasepool和UIApplicationMain

iOS 程序入口UIApplicationMain详解,相信大家新建一个工程的时候都会看到一个main.m文件,只不过我们很少了解它,现在我们分析一下它的作用是什么? 一、main.m文件 int main(int argc, char * argv[]) {autoreleasepool {return …...