论文阅读:GS-Blur: A 3D Scene-Based Dataset for Realistic Image Deblurring

news2025/4/2 5:19:05

今天介绍一篇 2024 NeurIPS 的文章,是关于真实世界去模糊任务的数据集构建的工作,论文作者来自韩国首尔大学

Abstract

要训练去模糊网络,拥有一个包含成对模糊图像和清晰图像的合适数据集至关重要。现有的数据集收集模糊图像的方式主要有两种:一种是通过合成的方式,将连续的清晰帧进行聚合;另一种是使用复杂的相机系统来捕捉真实的模糊图像。然而,这些方法要么在模糊类型(模糊轨迹)方面提供的多样性有限,要么需要大量的人力来重建大规模数据集,无法充分反映现实世界中的模糊场景。
为解决这一问题,我们提出了 GS - Blur 数据集,这是一个采用新方法合成的逼真模糊图像数据集。为此,我们首先利用三维高斯散点法(3DGS)从多视图图像中重建三维场景,然后沿着随机生成的运动轨迹移动相机视角来渲染模糊图像。通过在重建 GS - Blur 数据集时采用多种相机轨迹,我们的数据集包含了逼真且多样的模糊类型,提供了一个能很好地适用于现实世界模糊情况的大规模数据集。
将 GS - Blur 数据集与各种去模糊方法结合使用,我们证明了与之前的合成或真实模糊数据集相比,它具有更强的泛化能力,在去模糊性能上有显著提升。

Introduction

单张图像去模糊是图像恢复领域中的一项关键挑战,其重点在于消除由相机与物体之间的相对运动所导致的模糊。为了解决这一问题,一些开创性的方法提出了配对数据集,该数据集由模糊图像及其对应的清晰图像组成,旨在用于训练深度神经网络。具体而言,他们在创建去模糊数据集方面的工作主要依赖两种方法:合成数据生成方法和真实数据生成方法。然而,这两种方法都严重依赖于人为的启发式采集技术,这往往会导致一些局限性,例如无法全面覆盖大规模数据集,以及对各种不同类型的模糊(即模糊长度和方向)的代表性不足。

由于使用单个传感器同时捕捉模糊图像和清晰图像具有挑战性,早期的方法采取了从连续的清晰帧中合成生成模糊图像的方式。他们通过使用高速相机捕捉连续的清晰帧,然后将这些相邻的帧进行聚合来创建合成的模糊图像,以此实现这一目的。尽管这种方法能够轻松生成模糊图像,但所得到的模糊效果源于高度离散的帧,这就导致了与现实世界中的模糊情况存在差异,并且无法很好地推广应用到真实世界的模糊图像上。

后来的方法引入了配备分光镜的专用相机系统。这些系统将进入相机镜头的光线分成两路,分别投射到两个具有不同曝光时间的图像传感器上,由曝光时间较短的传感器生成清晰图像,而曝光时间较长的传感器则生成模糊图像。虽然这种方法能够生成更接近现实的模糊效果,使其更适合实际应用场景,但它也带来了一些挑战。首先,这种方法需要精确设计相机系统,这使得使用不同的相机型号变得复杂。实际上,[47] 和 [30] 的数据集分别来自单一的相机型号,即索尼 A7R3 和机器视觉相机。其次,尽管两个传感器采用了不同的曝光时间,一个用于捕捉模糊图像,另一个用于捕捉清晰图像,但图像信号处理(ISP)过程中仍可能出现差异,这就需要进行额外的图像处理,如白平衡和颜色映射。此外,这些数据集在很大程度上依赖人工采集,这不仅限制了数据集的规模,而且在模糊长度和方向方面也导致了模糊轨迹的局限性。

在本文中,我们探索了合成逼真模糊图像的方法,以普遍提高针对真实世界模糊图像的去模糊质量。为此,我们提出了一个全新的数据集,即 GS-Blur,它利用三维高斯溅射(3D Gaussian Splatting,3DGS)技术来合成模糊图像。具体而言,我们使用现有的大规模多视角数据集 MVImgNet [43],在清晰的多视角图像上训练 3DGS 模型,从而实现三维场景的重建。然后,从这些重建的场景中,我们使用两个相机视角来渲染图像:一个视角来自固定位置,另一个视角来自沿着随机生成的运动轨迹移动的位置,这两个视角分别对应着清晰图像和模糊图像。

具体来说,我们遵循 [23, 22, 46] 中的方法,通过聚合沿轨迹的多个相机拍摄的图像来创建模糊图像,但与 [23, 22, 46] 中使用高度离散的帧不同,我们通过在轨迹上布置多个相机来采用更密集的帧,从而产生更逼真的模糊效果。此外,通过利用模糊轨迹的不同程度,我们的 GS-Blur 数据集在模糊长度和方向方面包含了各种不同的模糊轨迹。

通过使用 MVImgNet(它由来自不同相机型号的大规模多视角图像组成),我们的 GS-Blur 数据集提供了多样化的去模糊图像对,具有显著的优势,展现出了良好的通用性,具体内容见实验部分 4.3。此外,在 4.4 节中,我们进行了全面的消融实验,以验证我们的 GS-Blur 数据集重建的合理性。GS-Blur 数据集的样本如图 1 所示。

在这里插入图片描述

GS-Blur dataset

Preliminary: 3D Gaussian Splatting

三维高斯溅射(3D Gaussian Splatting,3DGS)利用高斯基元 { μ k , Σ k , σ k , S k } k ∈ K \{\mu_k, \Sigma_k, \sigma_k, S_k\}_{k\in K} {μk,Σk,σk,Sk}kK 从多视角图像中对三维场景进行建模,其中每个参数分别代表稀疏三维点 k ∈ K k \in K kK 的位置 μ k \mu_k μk、协方差 Σ k \Sigma_k Σk、不透明度 σ k \sigma_k σk 以及球谐系数 S k S_k Sk,这些参数从结构从运动(Structure from Motion,SfM)[32] 算法初始化得到。在渲染图像时,高斯基元会被投影到相机的图像平面上,每个像素 p p p 的颜色会使用基于点的 α \alpha α 混合( α \alpha α-blending)方法 [48] 按如下方式计算。

C ^ ( p ) = ∑ k ∈ K α k c ( v k ; S k ) ∏ j = 1 k − 1 ( 1 − α j ) (1) \hat{C}(\boldsymbol{p}) = \sum_{k \in \mathcal{K}} \alpha_k \mathbf{c}(\mathbf{v}_k; \boldsymbol{S}_k) \prod_{j = 1}^{k - 1} (1 - \alpha_j) \tag{1} C^(p)=kKαkc(vk;Sk)j=1k1(1αj)(1)

α k = σ k e − 1 2 ( p − μ k ↓ ) ⊤ Σ k ↓ − 1 ( p − μ k ↓ ) (2) \alpha_k = \sigma_k e^{-\frac{1}{2} (\boldsymbol{p} - \boldsymbol{\mu}^{\downarrow }_k)^\top \boldsymbol{\Sigma}_k^{\downarrow -1} (\boldsymbol{p} - \boldsymbol{\mu}^{\downarrow }_k)} \tag{2} αk=σke21(pμk)Σk1(pμk)(2)

k k k 个高斯的颜色是使用针对相机观察方向 v k \mathbf{v}_k vk 的球谐函数 c ( v k ; S k ) \mathbf{c}(\mathbf{v}_k; \boldsymbol{S}_k) c(vk;Sk) 来计算的,而密度 α k \alpha_k αk 则根据 [48] 中介绍的二维投影高斯权重 μ k ↓ \boldsymbol{\mu}_k^\downarrow μk Σ k ↓ − 1 \boldsymbol{\Sigma}_k^{\downarrow - 1} Σk1 来确定。公式(1)中基于点的 α \alpha α 混合本质上遵循与神经辐射场(NeRF)[20] 相同的成像模型。然而,与 NeRF 相比,高斯基元的显式表示能够实现显著更快的渲染速度。具体来说,经济高效的高斯光栅化取代了 NeRF 中使用的计算量很大的多层感知和射线 - 点采样方法。因此,3DGS 能够实现高质量的实时视图合成,并将训练时间缩短至几十分钟。在这项工作中,我们利用 3DGS 快速的训练和渲染速度,通过沿着移动相机轨迹密集采样视图来生成逼真的模糊图像。

Preliminary: MVImgNet dataset

MVImgNet [43] 是一个大规模的多视角图像数据集,它包含来自 219,199 个视频的 650 万帧图像,涵盖了 238 个类别的物体。这些视频是使用各种常见相机(如智能手机)拍摄的,反映了现实世界中多样的图像分布情况。在此基础上,我们利用这个数据集来重建我们的 GS-Blur 数据集。具体而言,我们手动挑选了 26 个适合构建去模糊数据集的类别。

Pipeline for blur synthesis of GS-Blur

在这里插入图片描述

  • 图 3 我们的 GS-Blur 数据集中生成模糊图像与清晰图像对的整体流程如下。为此,我们首先训练一个三维高斯溅射模型,以便从多视角图像中重建三维场景。然后,基于这些重建的三维场景以及随机生成的运动轨迹 \mathbf{T},我们从固定的相机视角渲染出清晰图像 I ( P 0.5 ( τ o + τ c ) ) \mathcal{I}(\mathbf{P}_{0.5(\tau_o + \tau_c)}) I(P0.5(τo+τc)) ,并从移动的相机视角渲染出模糊图像 B ( T ) \mathcal{B}(\mathbf{T}) B(T)。具体来说,我们沿着运动轨迹渲染出 M \mathcal{M} M 张清晰图像,然后对这些清晰的帧进行平均处理,从而合成模糊图像。

图 3 展示了我们的 GS-Blur 数据集的构建过程概览。为了收集 GS-Blur 数据集,我们首先使用一组带有对应相机位姿 { P i } i ∈ N \{P_i\}_{i\in N} {Pi}iN N \mathcal{N} N 个带位姿的清晰图像 { I ( P i ) } i ∈ N \{I(P_i)\}_{i\in \mathcal{N}} {I(Pi)}iN 来训练 3DGS 模型。在此过程中,每个场景使用 3DGS 模型训练 30,000 次迭代。然后,从重建的三维场景中,我们从任意相机视角 \mathbf{P} 渲染出图像 I ( P ) I(\mathbf{P}) I(P) 。具体来说,为了模拟现实世界中拍摄模糊图像的过程(即移动的相机在快门打开时产生模糊图像),我们通过让相机沿着三维轨迹移动来模仿这一过程。然后,我们通过累积多个渲染图像来创建模糊图像,这些渲染图像由沿着运动轨迹的相机逐个拍摄。令 T = { P τ } τ ∈ [ τ o , τ c ] \mathbf{T} = \{\mathbf{P}_\tau\}_{\tau\in[\tau_o,\tau_c]} T={Pτ}τ[τo,τc]表示沿着生成运动模糊图像 B ( T ) \mathcal{B}(\mathbf{T}) B(T) 的轨迹的连续相机位姿,我们可以从 3DGS 渲染的清晰图像中合成模糊图像,如下所示:

B ( T ) = g ( ∫ τ o τ c g − 1 ( I ( P τ ) ) d τ ) ≃ g ( 1 M ∑ t = 1 M g − 1 ( I ( P t ) ) ) (3) \mathcal{B}(\mathbf{T}) = g\left(\int_{\tau_o}^{\tau_c} g^{-1}(\mathcal{I}(\mathbf{P}_\tau)) d\tau\right) \simeq g\left(\frac{1}{\mathcal{M}} \sum_{t = 1}^{\mathcal{M}} g^{-1}(\mathcal{I}(\mathbf{P}_t))\right) \tag{3} B(T)=g(τoτcg1(I(Pτ))dτ)g(M1t=1Mg1(I(Pt)))(3)

在这里,相机响应函数(Camera Response Function,CRF) g g g 将图像从线性 RGB 空间映射到 sRGB 空间, g − 1 g^{-1} g1 是其逆函数。我们在线性空间中累积渲染的清晰图像,然后按照 [23, 22] 中的方法将累积得到的模糊图像转换到 sRGB 空间。在实际相机中,RGB 颜色在快门打开时会持续累积。为了模拟这种连续累积过程,我们使用 M \mathcal{M} M 个中间子帧的有限和来近似,当 M \mathcal{M} M 足够大时,这种近似是有效的。与实际相机系统不同,通过 3DGS 进行的子帧渲染不会降低图像质量,无论 M \mathcal{M} M 取值如何。在实际操作中,我们将 M \mathcal{M} M 设置为 121,并选择中间子帧作为真实清晰图像对。也就是说,清晰图像是从固定相机位置 P 0.5 ( τ o + τ c ) \mathbf{P}_{0.5(\tau_o + \tau_c)} P0.5(τo+τc) 渲染得到的;因此,清晰图像表示为 I ( P 0.5 ( τ o + τ c ) ) \mathcal{I}(\mathbf{P}_{0.5(\tau_o + \tau_c)}) I(P0.5(τo+τc))

随机模糊生成。通过新视角合成来生成去模糊数据具有独特优势,即模糊图像可由随机生成的相机运动合成。虽然任何多项式曲线或样条模型都可用作相机运动轨迹,但我们采用了随机阶贝塞尔曲线,该曲线在先前的研究 [34, 13, 12] 中被广泛应用。

对于在训练视角中给定初始相机位姿 P i P_i Pi的相机运动生成,我们遵循以下步骤:

  • 在六自由度(6DOF)位姿空间中随机生成一条线性运动轨迹。
  • 通过对将线性运动轨迹等分为 n + 1 n + 1 n+1段的点进行随机扰动,生成一条 n n n 阶贝塞尔曲线。
  • 将贝塞尔曲线的中心位姿对齐到 P i P_i Pi,并从该曲线上采样 M \mathcal{M} M 个相机位姿。

需注意,我们随机选择曲线参数 { n , δ t , δ r } \{n, \delta_t, \delta_r\} {n,δt,δr} ,其中 n ∈ [ 1 , 5 ] n \in [1, 5] n[1,5]表示贝塞尔曲线的阶数, δ t ∈ R 3 \delta_t \in \mathbb{R}^3 δtR3表示曲线长度, δ r ∈ R 3 \delta_r \in \mathbb{R}^3 δrR3表示方向偏移 。这里, δ t \delta_t δt δ r \delta_r δr的三个维度分别对应三维空间中的 x , y , z x,y,z x,y,z 轴。

由于随机选择的、对应相机运动的曲线会直接影响模糊效果的形成,我们在预定义范围内选择参数 δ t \delta_t δt δ r \delta_r δr,以体现真实的模糊情况。具体来说,考虑到先前数据集中的模糊长度,我们从区间 [ 0 , 0.7 ] [0, 0.7] [0,0.7] 中随机采样三维长度 δ t \delta_t δt;考虑到在现实世界拍摄模糊图像时,短曝光时间内旋转的影响极小,我们从区间 [ − 1. 5 ∘ , 1. 5 ∘ ] [-1.5^{\circ}, 1.5^{\circ}] [1.5,1.5] 中随机采样三维方向 δ r \delta_r δr

一对多模糊生成。所提出的数据集生成方法的另一个优势是具备一对多模糊生成的能力。现有的通过高速相机或配备分光镜的相机收集的数据集,通常每张清晰图像仅对应生成一张模糊图像,或者通过改变合成的帧数来调整模糊程度。相比之下,我们的方法通过多次生成独立的轨迹,能够为一张清晰图像合成多张对应的模糊图像,这对于防止去模糊架构出现过拟合现象至关重要。图 4(左侧)展示了一张清晰图像对应多张( n n n 张)模糊图像 B ( T ) \mathcal{B}(\mathbf{T}) B(T) 的示例,这些模糊图像使用了不同的模糊轨迹。

刚体对象运动模糊。使用三维高斯溅射(3DGS)生成去模糊数据的主要局限性在于它只能渲染静态场景,仅能产生由相机移动引起的运动模糊。然而,在现实世界的模糊图像中,运动模糊常常来自于行人或车辆等移动物体,与相机运动无关。为了解决这个问题,我们利用对象的二值分割掩码 m s ∈ { 0 , 1 } \mathbf{m}_s \in \{0, 1\} ms{0,1}来模拟刚体运动。具体而言,我们生成两条随机运动轨迹:一条轨迹 T o b j \mathbf{T}_{obj} Tobj 用于为对象 B ( T o b j ) \mathcal{B}(\mathbf{T}_{obj}) B(Tobj) 创建刚体运动模糊,另一条轨迹 T b g \mathbf{T}_{bg} Tbg 用于模拟背景中的相机运动模糊 B ( T b g ) \mathcal{B}(\mathbf{T}_{bg}) B(Tbg)。利用这两条轨迹和对象掩码 m s \mathbf{m}_s ms,我们应用阿尔法抠图(alpha matting)技术来生成一张模糊图像,在这张图像中,对象和背景因各自的运动而产生明显不同的模糊效果。在此,用于映射的阿尔法值 m s ( T o b j ) \mathbf{m}_s(\mathbf{T}_{obj}) ms(Tobj) 是在沿着 T o b j \mathbf{T}_{obj} Tobj m s \mathbf{m}_s ms 进行三维变形后取平均值计算得到的,如下所示:

m s ( T o b j ) = 1 M ∑ t = 1 M π ( m s ; P t ) (4) \mathbf{m}_s(\mathbf{T}_{obj}) = \sqrt{\frac{1}{\mathcal{M}} \sum_{t = 1}^{\mathcal{M}} \pi(\mathbf{m}_s; \mathbf{P}_t)} \tag{4} ms(Tobj)=M1t=1Mπ(ms;Pt) (4)

B ( T o b j , T b g ) = m s ( T o b j ) ⋅ B ( T o b j ) + ( 1 − m s ( T o b j ) ) ⋅ B ( T b g ) (5) \mathcal{B}(\mathbf{T}_{obj}, \mathbf{T}_{bg}) = \mathbf{m}_s(\mathbf{T}_{obj}) \cdot \mathcal{B}(\mathbf{T}_{obj}) + (1 - \mathbf{m}_s(\mathbf{T}_{obj})) \cdot \mathcal{B}(\mathbf{T}_{bg}) \tag{5} B(Tobj,Tbg)=ms(Tobj)B(Tobj)+(1ms(Tobj))B(Tbg)(5)

每个子帧的对象掩码通过反向变形 [7] π ( m s ; P t ) \pi(\mathbf{m}_s; \mathbf{P}_t) π(ms;Pt)计算得出,其中相机内参、子帧t的深度和位姿是变形函数 π : ∈ R H × W ↦ R H × W \pi : \in \mathbb{R}^{H\times W} \mapsto \mathbb{R}^{H\times W} π:∈RH×WRH×W 的参数。请注意,对阿尔法值取平方根可在对象边界处实现更自然的融合,因为在合成 B ( T o b j ) \mathcal{B}(\mathbf{T}_{obj}) B(Tobj) 时,背景颜色已在边界处混合。图 4(右侧)展示了分别针对对象和背景使用不同随机运动轨迹 T o b j \mathbf{T}_{obj} Tobj T b g \mathbf{T}_{bg} Tbg生成的模糊图像$ \mathcal{B}(\mathbf{T}{obj}, \mathbf{T}{bg})$示例。

在这里插入图片描述

  • 图 4 随机生成的三维轨迹及其对应的运动模糊图像 B ( T ) \mathcal{B}(\mathbf{T}) B(T) 的可视化展示。(左侧)通过对不同图像使用不同的轨迹 T \mathbf{T} T,我们能够生成与一张清晰图像相对应的多张模糊图像。在此处,我们对对象和背景使用了相同的轨迹 T \mathbf{T} T。(右侧)通过分别对对象和背景使用不同的运动轨迹,即 T o b j \mathbf{T}_{obj} Tobj T b g \mathbf{T}_{bg} Tbg,我们可以模拟刚体运动模糊效果。请注意,图中的第一列和第四列展示的是固定相机视角下的清晰图像。

添加噪声。3DGS 利用球谐函数对与视角相关的 RGB 颜色进行建模,这使得即使输入图像包含轻微噪声,渲染结果也会很平滑。然而,使用这些平滑的渲染结果来训练去模糊深度网络会降低其对真实世界模糊图像的泛化能力,因为网络可能无法学习到自然存在的噪声和复杂模糊变化中典型的必要特征。因此,我们整合了 RSBlur [29] 中提出的逼真模糊合成流程,将逼真的图像噪声合成到由 3DGS 生成的模糊渲染图像中。为此,我们将图像从 sRGB 空间转换到相机 RAW 空间,然后添加泊松噪声和高斯噪声,最后再将它们转换回 sRGB 空间,以此近似真实相机系统中的噪声生成原理。

多分辨率。作为 GS-Blur 数据集来源的 MVImgNet [43],主要包含以物体为中心的场景,在这些场景中物体通常在靠近相机视角的位置被拍摄,渲染图像的相当一部分像素可能仅由物体构成。然而,在训练去模糊网络时,图像块通常会被裁剪为较小尺寸(如 256×256),由于物体占比过大,这可能导致训练效果不佳。为解决此问题,我们从渲染的高分辨率图像(如 1920×1080)中引入随机下采样渲染(×1/2、×1/3、×1/4 )作为数据增强手段,使裁剪后的图像块能包含更广泛的三维区域。不过需注意,我们的下采样与先前数据集 [14, 22] 的下采样目的不同,先前数据集下采样是为了减少噪声,而我们是在下采样后添加噪声。

最后,我们从 MVImgNet 子集中重建了 3408 个场景,并训练 3DGS 模型,以获得用于生成模糊图像的 156209 张清晰渲染图像。通过渲染多组随机模糊图像对并利用下采样渲染增强技术,我们构建了一个 GS-Blur 数据集,该数据集总共包含 752335 张模糊图像。

为评估我们的 GS-Blur 数据集的有效性,我们采用了当前最先进的去模糊架构,包括基于 Transformer 的架构(Uformer [40])以及基于卷积神经网络(CNN)的架构(MIMO-UNet [4] 和 NAFNet [3]),并遵循它们各自的训练协议。具体而言,去模糊网络在随机裁剪为 256×256 大小的图像块上进行训练,MIMO-UNet 和 Uformer 每个 GPU 的批量大小设为 4,NAFNet 每个 GPU 的批量大小设为 8,使用 4 块 NVIDIA Quadro RTX 8000 显卡。根据每个网络的协议,对训练样本还应用了随机水平翻转和图像旋转操作,总共进行 20 万次迭代。对于 Uformer,采用余弦退火策略 [19] ,学习率从 2e−4 开始衰减至 1e−6;对于 NAFNet,学习率从 1e−3 开始衰减至 1e−6 。就 MIMO-UNet 而言,每 3 万次迭代学习率减半。在评估指标方面,我们使用峰值信噪比(PSNR)和结构相似性指数(SSIM)[41] 等传统图像质量评估指标来评价结果。

虽然我们的 GS-Blur 数据集能够有效地模拟真实的模糊效果,并且通过在各种基准数据集上进行交叉验证证明了其价值,但它仍存在两个潜在的局限性。首先,尽管 GS-Blur 数据集通过沿着随机模糊轨迹移动相机视角来模拟真实的模糊效果,并且使用不同的模糊轨迹(分别为对象 T o b j T_{obj} Tobj和背景 T b g T_{bg} Tbg)来模拟刚体对象的运动,但它无法考虑随时间改变形状的对象。例如,由于三维场景是基于静态图像构建的,像行人行走时手臂和腿部的动作,或者行驶中车辆旋转的车轮这类动态动作,在 GS-Blur 数据集中并未体现。不过,通过利用最近在四维高斯溅射技术方面的进展(该技术可以从多视角视频输入中重建随时间变化的三维场景),我们计划在未来的工作中扩展我们的数据集,将此类动态变化纳入其中。其次,与直接从相机拍摄的传统清晰图像不同,我们的清晰图像是从三维场景中渲染得到的,这可能会在这些图像与现实世界中的干净图像之间产生差异。尽管如此,我们相信,近期在三维重建和单张图像生成技术方面的进展能够改进我们的方法,从而使我们的 GS-Blur 数据集的重建更加精确。

在这里插入图片描述

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

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

相关文章

Cocos Creator Shader入门实战(七):RGB不同算法效果的实现,及渲染技术、宏定义、属性参数的延伸配置

引擎:3.8.5 您好,我是鹤九日! 回顾 上篇文章,讲解了Cocos Shader如何通过setProperty动态设置材质的属性,以及设置属性时候的一些注意事项,比如: 一、CCEffect部分properties参数的设定后&…

算法学习记录:递归

递归算法的关键在于回复现场,dfs()函数返回值、结束条件、它的作用。 目录 1.综合练习 2. 二叉树的深搜 1.综合练习 39. 组合总和 - 力扣(LeetCode) 关键在画出的决策树当中,前面使用过的2、3,…

可发1区的超级创新思路(python\matlab实现):MPTS+Lconv+注意力集成机制的Transformer时间序列模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等。 一、模型整体架构(本文以光伏功率预测为例) 本模型由多尺度特征提取模块(MPTS)…

三、分类模块,通用组件顶部导航栏Navbar

1.封装通用组件顶部导航栏Navbar 不同效果 Component export struct MkNavbar {Prop title: string Prop leftIcon: ResourceStr $r("app.media.ic_public_left")ProprightIcon: ResourceStr $r("app.media.ic_public_more")PropshowLeftIcon: boolean…

PHY——LAN8720A 寄存器读写 (二)

文章目录 PHY——LAN8720A 寄存器读写 (二)工程配置引脚初始化代码以太网初始化代码PHY 接口实现LAN8720 接口实现PHY 接口测试 PHY——LAN8720A 寄存器读写 (二) 工程配置 这里以野火电子的 F429 开发板为例,配置以太网外设 这里有一点需要注意原理图 RMII_TXD0…

Flutter_学习记录_AppBar中取消leading的占位展示

将leading设置为null将automaticallyImplyLeading设置为false 看看automaticallyImplyLeading的说明: Controls whether we should try to imply the leading widget if null. If true and [AppBar.leading] is null, automatically try to deduce what the leading…

未来派几何风格包装徽标品牌海报标牌logo设计无衬线英文字体安装包 Myfonts – Trakya Sans Font Family

Trakya Sans 是一种具有几何风格的现代无衬线字体。Futura、Avant Garde 等。它具有现代条纹,这是宽度和高度协调的结果,尤其是在小写字母中,以支持易读性。 非常适合广告和包装、编辑和出版、徽标、品牌和创意产业、海报和广告牌、小文本、寻…

C语言深度解析:从零到系统级开发的完整指南

一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性,成为系统级开发的首选语言。例如,Linux内核通过C语言直接操作内存和硬件寄存器,实现高效进程调度。 关键点: malloc/free直接管理内存&#…

ctfshow WEB web8

首先确定注入点,输入以下payload使SQL恒成立 ?id-1/**/or/**/true 再输入一下payload 使SQL恒不成立 ?id-1/**/or/**/false 由于SQL恒不成立, 数据库查询不到任何数据, 从而导致页面空显示 由以上返回结果可知,该页面存在SQL注入,注入点…

【Linux】U-Boot 加载并启动 Linux 系统程序

U-Boot 加载并启动 Linux 系统程序 零、介绍 最近在玩一些嵌入式的开发板,在引导操作系统时需要用到U-Boot,故此研究一下。 U-Boot(Universal Bootloader)是一款开源的通用引导加载程序,专为嵌入式系统设计&#xff…

jarvisoj API调用 [JSON格式变XXE]

http://web.jarvisoj.com:9882/ 题目要求:请设法获得目标机器 /home/ctf/flag.txt 中的flag值 抓包得到: POST /api/v1.0/try HTTP/1.1 Host: web.jarvisoj.com:9882 Content-Length: 36 Accept-Language: zh-CN,zh;q0.9 User-Agent: Mozilla/5.0 (W…

机器学习的一百个概念(4)下采样

前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

NNI 适配 TensorRT10教程

引言 本文涉及两个框架及其版本分别为 NNI (Neural Network Intelligence) :3.0TensorRT:10.9.0.34 NNI 在文档 Speed Up Quantized Model with TensorRT里描述了如何使用 TensorRT 为NNI量化的模型实现加速,但是从NNI 的源代码https://gi…

多路径 TCP 调度的另一面

参考前面的文章 一个原教旨的多路径 TCP 和 MP-BBR 公平性推演,一直都破而不立,不能光说怎样不好,还得说说现状情况下,该如何是好。 如果 receiver 乱序重排的能力有限(拜 TCP 所赐),如果非要在多路径上传输 TCP&…

vcpkg安装指定版本的库

一.vcpkg安装 使用git将vcpkg源码克隆到本地制定目录(D:\vcpkg),并初始化 git clone https://github.com/microsoft/vcpkg.git cd vcpkg ./bootstrap-vcpkg.sh # Linux/macOS .\bootstrap-vcpkg.bat # Windows 如下图: 二.安…

【工具变量】上市公司供应链稳定性数据两个维度(2013-2023年)

供应链稳定性是指供应链在面对各种内外部因素的冲击和不确定性时,能够保持持续、顺畅运作的能力,而供应链稳定性指数是用于评估企业在其供应链管理中保持稳定性的一个重要指标。本分享数据参考钟涛(2022)、董浩和闫晴(…

Redis场景问题2:缓存击穿

Redis 缓存击穿是指在缓存系统中,大量请求(高并发访问)同时访问一个不存在于缓存中(一般是因为缓存过期或者数据未被加载到缓存)但在数据库中存在的热点数据,从而导致这些请求直接穿透缓存层,涌…

RocketMQ - 从消息可靠传输谈高可用

先稍微介绍下RocketMQ架构。 主从架构 Broker 集群:每个 Broker 分为 Master 和 Slave 角色,Master 负责读写,Slave 作为热备。 同步复制(SYNC_MASTER):消息写入 Master 后,需等待 Slave 同步完…

ES拼音分词自动补全实现

#测试拼音分词 POST /_analyze { "text":"如家酒店真不错", "analyzer": "pinyin" } #这里把拼音的首字母放到这里,也说明了这句话没有被分词,而是作为一个整体出现的 #还把每一个字都形成了一个拼音&#…

EFISH-SBC-RK3576 + 5G模组:无线工业相机与分布式AI质检‌

在智能制造与仓储物流场景中,传统有线工业相机存在部署成本高、灵活性差等痛点。‌eFish-SBC-RK3576‌ 通过 ‌5G无线传输 分布式NPU协同‌,实现跨产线、跨工厂的AI质检系统,检测效率提升300%,布线复杂度降低90%。 ‌1. 系统架构…