Deep Image Prior

深度图像先验

在这里插入图片描述

论文链接:https://sites.skoltech.ru/app/data/uploads/sites/25/2018/04/deep_image_prior.pdf

项目链接:https://github.com/DmitryUlyanov/deep-image-prior

Abstract

深度卷积网络已经成为一种流行的图像生成和恢复工具。一般来说,它们的优异表现归功于它们能够从大量的示例图像中学习真实的图像先验。在本文中,我们表明,相反,生成器网络的结构足以在任何学习之前捕获大量低级图像统计。为了做到这一点,我们表明随机初始化的神经网络可以用作手工制作的先验,在标准逆问题(如去噪,超分辨率和修复)中具有出色的结果。此外,可以使用相同的先验来反演深度神经表征以诊断它们,并基于flash-no flash输入对恢复图像。除了其多样化的应用之外,我们的方法还突出了标准生成网络架构捕获的感应偏置。它还弥合了两种非常流行的图像恢复方法之间的差距:使用深度卷积网络的基于学习的方法和基于自相似性等手工图像先验的无学习方法。

1. Introduction

深度卷积神经网络(Deep convolutional neural networks, ConvNet)目前在去噪[5,20]或单图像超分辨率[19,29,18]等逆图像重建问题上处于领先地位。卷积神经网络也在更“奇特”的问题中获得了巨大的成功,例如从某些深度网络中的激活或从其HOG描述符中重建图像[8]。更一般地说,具有类似架构的卷积神经网络现在被用于使用生成对抗网络[11]、变分自编码器[16]和直接像素误差最小化[9,3]等方法生成图像。

用于图像恢复和生成的最先进的卷积神经网络几乎总是在大型图像数据集上进行训练。因此,人们可能会认为它们的出色表现是由于它们能够从数据中学习真实的图像先验。然而,仅仅学习不足以解释深度网络的良好性能。例如,[33]的作者最近表明,在真实数据上训练时泛化良好的图像分类网络在使用随机标签时也会过拟合。因此,泛化要求网络的结构与数据的结构“共鸣”。然而,这种相互作用的性质仍然不清楚,特别是在图像生成的背景下。

在这项工作中,我们表明,与学习是建立良好图像先验所必需的信念相反,大量的图像统计数据是由独立于学习的卷积图像生成器的结构捕获的。对于解决各种图像恢复问题所需的统计数据尤其如此,其中需要图像先验来集成在退化过程中丢失的信息。

为了证明这一点,我们应用未经训练的卷积神经网络来解决几个这样的问题。我们没有遵循在大型样本图像数据集上训练卷积网络的常见范例,而是将生成器网络拟合到单个退化图像上。在该方案中,网络权重作为恢复图像的参数化。权重随机初始化和拟合,以最大限度地提高其可能性给定特定的退化图像和任务相关的观察模型。

换一种说法,我们将重建作为一个条件图像生成问题,并表明解决它所需的唯一信息包含在单个退化的输入图像和用于重建的手工制作的网络结构中。

我们表明,这个非常简单的公式在标准图像处理问题上非常有竞争力,如去噪、修复和超分辨率。这一点特别值得注意,因为网络的任何方面都不是从数据中学习的;相反,网络的权重总是随机初始化,因此唯一的先验信息是在网络本身的结构中。据我们所知,这是第一个直接调查深度卷积生成网络捕获的先验而独立于从图像中学习网络参数的研究。

除了标准的图像恢复任务外,我们还展示了我们的技术在理解深度神经网络激活中包含的信息方面的应用。为此,我们考虑了[21]的“自然预图像”技术,其目标是通过在自然图像集上对深度网络学习的不变量进行反转来表征不变量。我们证明了一个未经训练的深度卷积生成器可以用来取代[21]中使用的替代自然先验(TV规范),并显著改善了结果。由于新的正则化器,像TV规范一样,不是从数据中学习的,而是完全手工制作的,因此最终的可视化避免了使用强大的学习正则化器所产生的潜在偏差[8]。

在这里插入图片描述

2. Method

深度网络被应用于图像生成,通过学习生成器/解码器网络 x = f θ ( z ) x= f_θ(z) x=fθ(z),将一个随机编码向量 z z z映射到图像 x x x。该方法可用于从随机分布中采样真实图像[11]。在这里,我们关注分布以损坏观测值 x 0 x_0 x0为条件的情况,以解决诸如去噪[5]和超分辨率[7]等逆问题。

我们的目的是研究在学习任何参数之前,通过选择特定的生成网络结构隐含地捕获的先验。我们通过将神经网络解释为图像 x ∈ R 3 × H × W x \in \mathbb{R}^{3×H×W} xR3×H×W的参数化 x = f θ ( z ) x = f_θ(z) x=fθ(z)来做到这一点。这里 z ∈ R C ′ × H ′ × W ′ z\in \mathbb{R}^{C'×H'×W'} zRC×H×W是代码张量/矢量, θ θ θ是网络参数。网络本身交替进行滤波操作,如卷积、上采样和非线性激活。特别是,我们的大多数实验都是使用带有跳跃连接的U-Net类型的“沙漏”架构进行的,其中z和x具有相同的空间大小。我们的默认体系结构有200万个参数 θ θ θ(参见补充材料了解所有使用的体系结构的细节)。

为了证明这种参数化的力量,我们考虑了逆任务,如去噪,超分辨率和修复。这些可以表示为这种类型的能量最小化问题:
x ∗ = min ⁡ x E ( x ; x 0 ) + R ( x ) , (1) x^*=\min_xE(x;x_0)+R(x), \tag{1} x=xminE(x;x0)+R(x),(1)
E ( x ; x 0 ) E (x;x_0) E(x;x0)是任务相关的数据项, x 0 x_0 x0是噪声/低分辨率/遮挡图像, R ( x ) R(x) R(x)是正则化器。

数据项 E ( x ; x 0 ) E(x;x_0) E(x;x0)由应用决定,将在后面讨论。正则化器的选择,通常捕获自然图像的一般先验,是比较困难的,是许多研究的主题。举个简单的例子, R ( x ) R(x) R(x)可以是图像的总变差(TV),它鼓励解包含均匀的区域。在这项工作中,我们用神经网络捕获的隐式先验替换正则化器 R ( x ) R(x) R(x),正如:
θ ∗ = a r g m i n θ E ( f θ ( z ) ; x 0 ) , x ∗ = f θ ∗ ( z ) . (2) \theta^{*}=\mathop{\mathrm{argmin}}_{\theta}E(f_{\theta}(z);x_{0}),\quad x^{*}=f_{\theta^{*}}(z). \tag{2} θ=argminθE(fθ(z);x0),x=fθ(z).(2)
最小化器 θ ∗ θ^* θ是使用从参数随机初始化开始的梯度下降等优化器获得的。给定一个(局部)最小化器 θ ∗ θ^∗ θ,恢复过程的结果为 x ∗ = f θ ∗ ( z ) x^∗= f_{θ^∗}(z) x=fθ(z)。注意,虽然也有可能在编码 z z z上进行优化,但在我们的实验中我们没有这样做。因此,除非另有说明,否则 z z z是一个固定的三维张量,具有32个特征映射,并且与 x x x具有相同的空间大小,填充均匀噪声。我们发现,在一些实验中,在每次迭代时随机扰动 z z z可以得到更好的结果(参见补充材料)。

对于公式(1),由公式(2)定义的先验 R ( x ) R(x) R(x)是一个指示函数 R ( x ) = 0 R(x) = 0 R(x)=0,对于某种架构的深度卷积神经网络可以从 z z z产生的所有图像,对于所有其他信号 R ( x ) = + ∞ R(x)=+\infty R(x)=+。由于网络的任何方面都没有从数据中进行预训练,因此这种深度图像先验是有效地手工制作的,就像TV规范一样。我们表明,这种手工制作的先验工作对各种图像恢复任务非常好。

具有高噪声阻抗的参数化。有人可能想知道为什么大容量网络 f θ f_θ fθ可以用作先验。事实上,我们可以期望能够找到参数 θ θ θ来恢复任何可能的图像 x x x,包括随机噪声,这样网络就不会对生成的图像施加任何限制。我们现在表明,虽然几乎任何图像都可以被拟合,但网络架构的选择对如何通过梯度下降等方法搜索解空间有重大影响。特别是,我们展示了网络抵制“坏”的解决方案,并更快地下降到自然看起来的图像。结果是最小化公式(2)会得到一个好看的局部最优,或者,至少,优化轨迹会经过公式1附近。

为了定量地研究这种效应,我们考虑最基本的重建问题:给定目标图像 x 0 x_0 x0,我们想要找到再现该图像的参数 θ ∗ θ^* θ的值。这可以设置为公式(2)的优化,使用数据项将生成的图像与 x 0 x_0 x0进行比较:
E ( x ; x 0 ) = ∥ x − x 0 ∥ 2 (3) E(x;x_0)=\|x-x_0\|^2 \tag{3} E(x;x0)=xx02(3)
代入公式(2),就得到了优化问题:
min ⁡ θ ∥ f θ ( z ) − x 0 ∥ 2 (4) \min_\theta\|f_\theta(z)-x_0\|^2 \tag{4} θminfθ(z)x02(4)
图2显示了能量 E ( x ; x 0 ) E(x;x_0) E(x;x0)作为图像 x 0 x_0 x0的四种不同选择的梯度下降迭代的函数:1)自然图像,2)同一图像加可加噪声,3)随机排列像素后的同一图像,4)白噪声。从图中可以明显看出,情况1)和2)的优化速度要快得多,而参数化在情况3)和4)中表现出明显的“惯性”。

在这里插入图片描述

因此,虽然在极限参数化可以拟合非结构化噪声,它这样做是非常勉强的。换句话说,参数化提供对噪声的高阻抗和对信号的低阻抗。因此,对于大多数应用,我们将优化过程(2)中的迭代次数限制在一定的迭代次数。由此产生的先验对应于投影到一组简化的图像上,这些图像可以由参数θ与随机初始化 θ 0 θ_0 θ0相差不大的卷积神经网络从 z z z产生。

3. Applications

我们现在通过实验展示了所提出的先验方法如何适用于各种图像重建问题。由于篇幅限制,我们只提供了一些例子和数字,并在补充资料和项目网页中包含了更多的例子和数字[30]。

去噪和通用重构。由于我们的参数化对图像噪声具有很高的阻抗,因此可以很自然地用于从图像中滤除噪声。去噪的目的是从有噪声的观测 x 0 x_0 x0中恢复干净的图像x。有时退化模型是已知的: x 0 = x + ϵ x_{0}=x+\epsilon x0=x+ϵ,其中 ϵ \epsilon ϵ遵循特定的分布。然而,在盲去噪中,噪声模型往往是未知的。

这里我们是在盲假设下工作的,但该方法可以很容易地进行修改,以加入噪声模型的信息。我们使用和等式相同的公式(3)和(4),给定一个有噪声的图像 x 0 x_0 x0,在替换公式(4)的最小化器 θ ∗ θ^∗ θ后,恢复一个干净的图像 x ∗ = f θ ∗ ( z ) x^∗= f_{θ^∗}(z) x=fθ(z)

我们的方法不需要一个图像退化过程的模型,它需要恢复。这使得它能够以“即插即用”的方式应用于图像恢复任务,其中退化过程复杂和/或未知,并且难以获得监督训练的真实数据。我们通过图4和补充材料中的几个定性示例证明了这种能力,其中我们的方法使用二次能量(3)导致公式(4)来恢复被复杂和未知压缩伪影降级的图像。

在这里插入图片描述

图3(最上面一行)还演示了该方法在自然图像(本例中是卡通图像)之外的适用性。

在这里插入图片描述

我们在标准数据上评估了我们的去噪方法,该数据由9幅彩色图像组成,噪声强度为σ = 25。经过1800个优化步骤,我们实现了29.22的PSNR。如果我们额外对最后几次迭代中获得的恢复图像进行平均(使用指数滑动窗口),分数可以提高到30.43。如果在两次优化运行中取平均值,我们的方法进一步提高到31.00 PSNR。作为参考,目前比较流行的两种不需要预训练的方法CMB3D[6]和Non-local means[4]的得分分别为31.42和30.26。

超分辨率。超分辨率的目标是获取低分辨率(LR)图像 x ∈ R 3 × H × W x \in \mathbb{R}^{3×H×W} xR3×H×W和上采样因子 t t t,并生成相应的高分辨率(HR)版本 x ∈ R 3 × t H × t W x\in{\mathbb{R}}^{3\times tH\times tW} xR3×tH×tW。为了解决这个逆问题,将公式(2)中的数据项设为:
E ( x ; x 0 ) = ∥ d ( x ) − x 0 ∥ 2 (5) E(x;x_{0})=\|d(x)-x_{0}\|^{2} \tag{5} E(x;x0)=d(x)x02(5)
其中 d ( ⋅ ) : R 3 × t H × t W → R 3 × H × W d(\cdot):\mathbb{R}^{3\times tH\times tW}\to\mathbb{R}^{3\times H\times W} d():R3×tH×tWR3×H×W是一个下采样算子,它将图像的大小调整为因子 t t t。因此,问题是找到下采样时与LR图像x0相同的HR图像 x x x。超分辨率是一个不适定问题,因为有无限多的HR图像 x x x减少到相同的LR图像 x 0 x_0 x0(即算子 d d d远不是满射)。为了在公式(5)的无限个最小值中选择最合理的值,需要进行正则化。

根据公式(2),我们通过考虑重参数化 x = f θ ( z ) x = f_θ(z) x=fθ(z)和优化得到的能量 w . r . t w.r.t w.r.t θ θ θ来正则化问题。优化仍然使用梯度下降,利用神经网络和最常见的下采样算子(如Lanczos)都是可微的这一事实。

我们使用Set5[2]和Set14[32]数据集评估了我们的方法的超分辨率能力。我们使用4的比例因子与其他作品进行比较,并在补充材料中显示比例因子为8的结果。我们将每张图像的优化步骤数固定为2000。

图5给出了双三次上采样和最先进的基于学习的方法SRResNet[19]、LapSRN[29]的定性比较。我们的方法可以与双三次相比较,因为这两种方法都不会使用给定的低分辨率图像以外的其他数据。视觉上,我们接近使用MSE损失的基于学习的方法的质量。基于GAN的[11]方法SRGAN[19]和EnhanceNet[28] (未在比较中显示)智能地产生图像的精细细节,而我们的方法完全不使用HR图像世界的信息,这是不可能的。

在这里插入图片描述

我们使用生成图像的中心裁剪来计算PSNR。我们的方法在Set5和Set14数据集上分别达到了29.90和27.00的PSNR。双三次上采样的PSNR较低,为28.43和26.05,而SRResNet的PSNR为32.10和28.53。虽然我们的方法仍然优于基于学习的方法,但它比双三次上采样要好得多。从视觉上看,它似乎缩小了双三次卷积神经网络和最先进训练的卷积神经网络之间的大部分差距(参见图1,图5和附录)。

修复。在图像修复中,给定一个图像 x 0 x_0 x0,其中缺少对应于二进制掩模 m ∈ { 0 , 1 } H × W m\in\{0,1\}^{H\times{W}} m{0,1}H×W的像素;目标是重建丢失的数据。对应的数据项由:
E ( x ; x 0 ) = ∥ ( x − x 0 ) ⊙ m ∥ 2 , (6) E(x;x_0)=\|(x-x_0)\odot m\|^2, \tag{6} E(x;x0)=(xx0)m2,(6)
其中 ⊙ \odot 是Hadamard乘积。数据先验的必要性是显而易见的,因为这种能量与丢失像素的值无关,因此,如果目标直接在像素值 x x x上优化,则在初始化后,丢失像素的数值永远不会改变。如前所述,先验是通过优化数据项w.r.t.重参数化公式(2)引入的。

在第一个示例(图7,顶部行)中,inpainting用于删除遮盖在图像上的文本。我们的方法与[27]的方法进行了比较,该方法是专门为修复设计的。我们的方法得到了几乎完美的结果,几乎没有伪影,而对于[27],文本掩膜在某些区域仍然可见。

在这里插入图片描述

接下来,图7(下图)考虑了根据二进制伯努利分布随机采样的掩膜绘制。首先,对一个掩膜进行采样,随机降低50%的像素。我们将我们的方法与基于卷积稀疏编码的方法[25]进行了比较。为了得到[25]的结果,我们首先将损坏的图像x0分解为与[12]类似的低频和高频分量,并在高频部分运行他们的方法。为了进行公平的比较,我们使用了他们的方法版本,其中使用输入图像构建字典(在[25]中显示性能更好)。表1给出了我们的方法在标准数据集[14]上的定量比较,与卷积稀疏编码相比,我们的方法具有很强的定量优势。在图7(底部)中,我们与[25]进行了具有代表性的定性视觉比较。

在这里插入图片描述

我们还将这种方法应用于大孔的修复。由于不可训练,我们的方法不能正确地工作于“高语义”的大孔修复(例如人脸修复)。然而,它在其他情况下出奇地有效。我们在图6中与基于学习的方法[15]进行了比较。深度图像先验利用图像的上下文,用已知部分的纹理插值未知区域。这种行为突出了深度图像先验与传统自相似先验之间的关系。

在这里插入图片描述

在图8中,我们比较了几种体系结构对应的深度先验。我们在这里的发现(以及其他类似的比较)似乎表明,拥有更深层次的架构是有益的,而对于识别任务(如语义分割)来说,拥有非常好的跳跃连接是非常有害的。

在这里插入图片描述

自然预图像。[21]的自然预图像方法是一种诊断工具,用于研究在自然图像上运行的有损函数(如深度网络)的不变性。假设 Φ Φ Φ是神经网络的前几层,这些神经网络经过训练,可以进行图像分类。预图像是产生相同表示 Φ ( x 0 ) Φ(x_0) Φ(x0)的图像集合 Φ − 1 ( Φ ( x 0 ) ) = { x ∈ X : Φ ( x ) = Φ ( x 0 ) } {\Phi}^{-1}(\Phi(x_{0}))=\{x\in\mathcal{X}:\Phi(x)=\Phi(x_{0})\} Φ1(Φ(x0))={xX:Φ(x)=Φ(x0)}。查看这个集合可以发现网络丢失了哪些信息,获得了哪些不变性。

寻找预像点可以表示为最小化数据项 E ( x ; x 0 ) = ∥ Φ ( x ) − Φ ( x 0 ) ∥ 2 E(x;x_{0})=\|\Phi(x)-\Phi(x_{0})\|^{2} E(x;x0)=∥Φ(x)Φ(x0)2。然而,直接优化该函数可能会发现“伪影”,即非自然图像,网络 Φ Φ Φ的行为原则上是未指定的,因此可以任意地驱动它。通过将预图像限制为自然图像的集合 X \mathcal{X} X,可以获得更有意义的可视化,在[21]中称为自然预图像。

实际中,在自然预像中寻找点可以通过对数据项进行正则化来实现,类似于上面看到的其他逆问题。[21]的作者更倾向于使用TV规范,这是一种弱的自然图像先验,但相对公正。相反,[8]等论文从示例中学习神经网络的反演,从而得到更好看的重构,但这可能偏向于学习数据驱动的先验反演。在这里,我们建议使用深度图像先验公式(2)代替。由于这是像TV规范一样手工制作的,所以它不会偏向于特定的训练集。另一方面,它导致的反转至少与[8]的反转一样具有可解释性。

为了进行评估,我们的方法与[22]和[8]的方法进行了比较。图9显示了通过逐步考虑AlexNet的更深子集获得的反转表示 Φ Φ Φ的结果[17]:conv1, conv2,…、conv5、fc6、fc7、fc8。通过使用结构化先验优化(2)来找到预图像。

在这里插入图片描述

如图9所示,与简单的TV范数相比,我们的方法显著提高了图像清晰度。对于更深层的层,如fc6和fc7,这种差异尤其显著,其中TV范数仍然产生有噪声的图像,而结构化正则化器产生的图像通常仍然是可解释的。我们的方法也比[8]的学习先验产生了更多的信息反转,后者具有回归均值的明显趋势。

flash-no flash重构。虽然在这项工作中,我们专注于单个图像的恢复,但所提出的方法可以扩展到多个图像的恢复任务,例如视频恢复任务。因此,我们用一个定性示例来总结应用示例集,演示如何将该方法应用于基于图像对的恢复。特别是,我们考虑了基于闪光灯-无闪光灯图像对的恢复[26],其目标是获得与无闪光灯图像相似的照明场景图像,同时使用闪光灯图像作为指导来降低噪声水平。

一般来说,将该方法扩展到多个图像可能涉及对输入编码 z z z的一些协调优化,而在我们的方法中,对于单图像任务,输入编码 z z z通常是固定和随机的。在flash-no flash恢复的情况下,我们发现使用去噪公式(4),同时使用flash图像作为输入(代替随机向量 z z z),可以获得良好的恢复效果。由此产生的方法可以看作是引导图像滤波的非线性推广[13]。恢复的结果如图10所示。

在这里插入图片描述

4. Related work

我们的方法与前面提到的基于可学习卷积神经网络的图像恢复和合成方法有明显的联系。与此同时,它也与另一组避免在保留集上进行训练的恢复方法有关。这一组包括基于损坏图像内相似patch组的联合建模的方法[4,6,10],当损坏过程复杂且高度可变时特别有用(例如空间变化模糊[1])。这类方法还包括基于字典拟合损坏图像的patch的方法[23,32],以及基于卷积稀疏编码的方法[31],这些方法也可以将类似于浅卷积神经网络的统计模型拟合到重建图像中[25]。这项工作[20]研究了将卷积神经网络与基于自相似性的去噪相结合的模型,从而也连接了两组方法,但仍然需要在保留集上进行训练。

总的来说,深度卷积神经网络施加的先验和本研究中研究的先验似乎与基于自相似性和基于字典的先验高度相关。事实上,由于卷积滤波器的权重在图像的整个空间范围内共享,这确保了生成式卷积网络可能产生的单个补丁的自相似性程度。卷积网络和卷积稀疏编码之间的联系在[24]和[25]中进行了更深入的研究,在识别网络的背景下,最近在[25]中提出了用于重建任务的单层卷积稀疏编码。然而,我们的方法与[25]的比较(图7和表1)表明,至少在某些情况下,使用现代基于深度学习的方法中流行的深度卷积神经网络架构可能会导致更准确的恢复结果。

5. Discussion

我们研究了最近的图像生成器神经网络的成功,将结构选择所施加的先验贡献与通过学习从外部图像传递的信息的贡献分开。作为副产品,我们已经证明了将随机初始化的卷积神经网络拟合到损坏的图像中可以作为修复问题的“Swiss knife”。虽然实际上速度很慢(每张图像需要几分钟的GPU计算),但这种方法不需要对退化过程进行建模或预训练。我们的结果与将深度学习在图像恢复中的成功解释为学习能力而不是手工先验的常见叙述相反;相反,随机网络是更好的手工先验,学习建立在这个基础上。这也验证了开发新的深度学习架构的重要性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web:[ZJCTF 2019]NiZhuanSiWei1

题目 点进题目,网页显示如下,需要代码审计 $_GET["text"]和$_GET["file"]来获取传入的两个参数text和file。使用isset()函数来检查$text变量是否已设置并且不为null。如果设置了并且不为null,则执行下面的逻辑。在下面的…

汽车电子 -- 车载ADAS之LCA(变道辅助系统)

相关法规文件: LCA: ISO 17387-2008 Intelligent transport systems — Lane change decision aid systems 一、变道辅助系统 LCA (Lane Change Assist) LCA 系统(变道辅助系统)监测后方相邻车道区域,如果有车辆在后…

《融合SCADA系统数据的天然气管道泄漏多源感知技术研究》误报数据识别模型开发

数据处理不作表述。因为我用的是处理后的数据,数据点这。 文章目录 工作内容1CC040VFD电流VFD转速压缩机转速反馈进出口差压 紧急截断阀开到位进出电动阀开到位发球筒电筒阀开到位收球筒电动阀开到位电动阀2005开到位越站阀开到位 工作内容2工作内容3 工作内容1 任…

Java小游戏 王者荣耀

GameFrame类 所需图片: package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayLis…

<JavaDS> 二叉树遍历各种遍历方式的代码实现 -- 前序、中序、后序、层序遍历

目录 有以下二叉树: 一、递归 1.1 前序遍历-递归 1.2 中序遍历-递归 1.3 后序遍历-递归 二、递归--使用链表 2.1 前序遍历-递归-返回链表 2.2 中序遍历-递归-返回链表 2.3 后序遍历-递归-返回链表 三、迭代--使用栈 3.1 前序遍历-迭代-使用栈 3.2 中序遍…

【Python3】【力扣题】367. 有效的完全平方数

【力扣题】题目描述: 【Python3】代码: 1、解题思路:Python函数。num的平方根 或者 num的0.5次幂。 知识点:float.is_integer(...):判断浮点数的值是否等于整数。也可以:浮点数.is_integer()。 pow(a,b)&…

【SpringCloud】微服务的扩展性及其与 SOA 的区别

一、微服务的扩展性 由上一篇文章(没看过的可点击传送阅读)可知, 微服务具有极强的可扩展性,这些扩展性包含以下几个方面: 性能可扩展:性能无法完全实现线性扩展,但要尽量使用具有并发性和异步…

【Intel FPGA】D5005 使用笔记

项目总目标,在AFU中实现xx算法DDR 1.FPGA device :1SX280HN2F43E2VG 2 .硬件架构图 3.DDR信息 4.FIM (FPAG Interface Manager) The FIM contains the FPGA logic to support the accelerators, including the PCIe IP core, …

UDS 相关时间参数

文章目录 UDS 全部时间参数UDS 应用层诊断时间参数1、P2 Client P2 Server P2* Client P2* Server 图例2、S3 Client S3 Server 图例 UDS CNA-TP网络层时间参数1、N_As/N_Ar 图例2、N_Bs 图例3、 N_Br 图例4、N_Cs 图例N_Cr 图例 UDS 网络层流控制时间参数 UDS 全部时间参数 UD…

Java17(LTS Long Term Support)特性

支持JDK17的主流技术框架 spring framework 6.xspringboot 3.xkafka 3.0(不在支持jdk8)jenkins 2.357(必须jdk11起步)James Gosling表示赶紧弃用Java8,使用性能最好的JDK17Chart GPT也推荐JDK17,从长期到性能来说。 JDK17的特性 …

【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统

目录 说明: 1. 机器人中的坐标变换 tf功能包能干什么? tf坐标变换如何实现 2. 小海龟跟随实验 安装 ros-melodic-turtle-tf 实验命令 运行效果 说明: 1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…

求和(打表题)

题目 打个表发现当 n 时答案为 p &#xff0c;否则为 1 &#xff0c;然后套板子。 #include <iostream> #include <algorithm> #include <vector> #include <cstring> #include <cmath>using namespace std;#define int long long using i64 …

直线(蓝桥杯)

直线 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 在平面直角坐标系中&#xff0c;两点可以确定一条直线。如果有多点在一条直线上&#xff0c; 那么这些点中任意两点确定的直线是同一条。 给定平面上 2 3 个…

万字解析设计模式之模板方法与解释器模式

一、模板方法模式 1.1概述 定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 例如&#xff0c;去银行办理业务一般要经过以下4个流程&#xff1a;取号、排队、办理具体业…

戴尔科技推出全新96核Precision 7875塔式工作站

工作站行业一直是快节奏且充满惊喜的。在过去25年中,戴尔Precision一直处于行业前沿,帮助创作者、工程师、建筑师、研究人员等将想法变为现实,并对整个世界产生影响。工作站所发挥的作用至关重要,被视为化不可能为可能的必要工具。如今,人工智能(AI)和生成式AI(GenAI)的浪潮正在…

【JavaEE初阶】认识线程、创建线程

1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1) 线程是什么 一个线程就是一个 "执行流". 每个线程之间都可以按照顺序执行自己的代码. 多个线程之间 "同时" 执行着多份代码. 举例&#xff1a; 还是回到我们之前的银⾏的例⼦中。之前我们主要描…

业务逻辑漏洞

业务逻辑漏洞 扫描器扫不出来 漏洞包括 暴力破解任意用户/密码登陆短信/邮箱轰炸验证码绕过/爆破/重放/回传用户名/手机号枚举(用户名枚举&#xff1a;当用户登录时&#xff0c;显示用户名不存在&#xff0c;或密码不正确&#xff0c;两个其中一个不正确就称为用户名枚举)越…

Python中的datetime库

1. datetime datetime是Python中用于处理日期和时间的类&#xff0c;它包含在datetime模块中。使用datetime类&#xff0c;我们可以创建表示特定日期和时间的对象&#xff0c;以及进行日期和时间的计算和操作。 from datetime import datetime, timedelta# 获取当前日期和时间…

20 章 多线程

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Thre…