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.mzph.cn/news/180345.shtml

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

相关文章

每日一练2023.11.28———N个数求和【PTA】

题目链接: L1-009 N个数求和 题目要求: 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。 输入格式: 输入第一行给出一个正整…

三 STM32F4使用Sys_Tick 实现微秒定时器和延时

更多细节参考这篇 1. 什么是时钟以及作用 1.1 什么是时钟 时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏 1.2 时钟对于STM32的作用 指令同步:cpu和内核外设使用时钟信号来进行指令同步数据传输控制: 时钟信号控制数据在内部总…

【C数据(一)】数据类型和变量你真的理解了吗?来看看这篇

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

Linux的Sysfs 接口

一、sysfs接口 在linux系统中,用户空间访问驱动程序一般是以“设备文件”的方式通过“read/write/ioctl”访问,还有一种方式,可以通过echo的方式来直接控制硬件或者修改驱动,也能为底层驱动提供一个接口便于应用层调用&#xff0c…

app上架一直显示审核中状态要怎么处理?

当你提交一个应用到App Store上时,它会经历一个审核过程。在这个过程中,苹果的审核人员会检查你的应用是否符合苹果的规定和标准。这个过程通常需要几天的时间,但是如果你的应用一直显示“审核中”状态,那么可能会有一些原因。 1…

广州华锐互动:VR虚拟现实内容创作工具带来全新的应用场景

随着科技的不断发展,低代码编辑工具已经成为了一种越来越受欢迎的开发方式。它可以帮助开发人员快速构建应用程序,降低开发成本,提高开发效率,而VR虚拟现实内容创作工具带来了全新的应用场景。 VR虚拟现实内容创作工具是广州华锐互…

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子,其结构复杂多样,蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看,蛋白质的结构可以分为四个层次:初级结构、二级结构、三级结构和四级结构。 初级结…

模拟实现offsetof宏(详解)

我们在以前学过这个offsetof函数,知道它的功能是求指针相较于起始位置的偏移量,我们今天要来写出一个宏,计算结构体中某成员变量相对于起始位置的偏移。 目录 1.offsetof函数 1.1offsetof函数介绍 1.2offsetof函数代码实现 2.offsetof函数…

python实现rpc的几种方式(SimpleXMLRPCServer 自带的、第三方ZeroRPC)、连接linux远程开发分布式锁、分布式id

1 python实现rpc的几种方式 1.1 SimpleXMLRPCServer 自带的 1.2 第三方ZeroRPC 2 连接linux远程开发 3 分布式锁 4 分布式id 1 python实现rpc的几种方式 # 远程过程调用-1 借助于rabbitmq,可以跨语言-2 SimpleXMLRPCServer 自带的-3 ZeroRPC-4 GRPC:跨语言的 htt…

dart多线程双向通信的案例----【小学4年级课程】

下面是运行后的打印顺序 I/flutter (20170): 上班 I/flutter (20170): 这里是校长室:main I/flutter (20170): 这里是饭堂:fantang1 I/flutter (20170): 这里是收发室--检查小孩发回去给他妈妈的信息是:我是秘书的儿子,我来到在校长室了。校长今晚想吃羊…

【Web】SWPUCTF 2022 新生赛 个人复现

目录 ①webdog1__start ②ez_rce ③ez_sql ④ez_1zpop ⑤file_maste ⑥Power! 挑了部分题,太简单的就没选进来(但选进来≠有难度) ①webdog1__start 进来没啥东西,右键查看源码 对于0e215962017,md5后也是以…

Salesforce原生ERP产品 vs. 集成:如何选择?

Salesforce允许企业管理所有的客户交互。随着Salesforce平台的日渐成熟,企业已经能够获取成倍的收益。会计解决方案和其他ERP工具尤其契合,客户数据不会碰壁,可以在服务交付和客户成功、发票和账单、收入确认和续订的过程中继续前进。 一些…

群晖NAS配置之自有服务器ngrok实现内网穿透

群晖NAS配置之自有服务器ngrok实现内网穿透 前言-内网穿透 内网穿透是指通过一种技术让外部网络可以访问到内网的NAS设备,这样即使在不同网络环境下,也能够远程访问和管理NAS设备。以下是一些常见的内网穿透方案: Synology官方提供的Quick…

IDEA 配置 gradle6.8.3 解决导入gradle项目下载太慢问题

由于平时用的是springboot 2.7 这里下载gradle-6.8.3 Gradle官网地址:https://services.gradle.org/distributions/ 1.下载gradle后,配置环境变量 GRADLE_HOME {gradle 文件路径} GRADLE_USER_HOME {jar下载路径,可以放maven jar保存路径…

链接2:静态链接、目标文件、符号和符号表

文章目录 静态链接符号解析 (symbolresolution)重定位 (relocation) 目标文件1.可重定位目标文件2.可执行目标文件3.共享目标文件 可重定位目标文件text:rodata:.data.bss.symtab.rel.text.rel.data:debug:line:strtab: 符号和符号表由m定义并能被其他模块引用的全局符号由其他…

基于Pix2Struct的文档信息提取【DocVQA】

文档信息提取涉及使用计算机算法从非结构化或半结构化文档(例如报告、电子邮件和网页)中提取结构化数据(例如员工姓名、地址、职务、电话号码等)。 提取的信息可用于各种目的,例如分析和分类。 DocVQA(文档…

MySQL基础进阶篇

进阶篇 存储引擎 MySQL体系结构: 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引擎也可以被称为表引擎。 默认存储引擎是InnoDB。 相关操作: -- 查询建表语句 show create …

BGP综合实验(IP)

实验要求: 实验思路: 1.划分IP地址: 将172.16.0.0/16的网段划分为172.16.0.0/24的多个网段,因为在实际工程当中,24的网段更符合用户网段,因此先将网段划分为172.16.0.0 /24的多个子网掩码为24的网段&…

filebeat(远程收集日志工具)

(一)filebeat 1、filebeat和logstash相同 (1)filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小的多 (2)filebeat可以运行在非Java环境、可以代理l…

C语言——计算Fibonacci数列

方式一 for循环 (20位) #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int n;int a[20]{1,1};for ( n 1; n <20; n){a[n]a[n-2]a[n-1];}for ( n 0; n < 20; n){if(n%50)printf("\n");printf("%12d ",a[n]);}return 0; …