Efficient physics-informed neural networks using hash encoding

news2024/11/16 12:53:43

论文阅读:Efficient physics-informed neural networks using hash encoding

  • Efficient physics-informed neural networks using hash encoding
    • 简介
    • 方法
      • PINN
      • 哈希编码
      • 具有哈希编码的 PINN
    • 实验
      • Burgers 方程
      • Helmholtz 方程
      • N-S 方程
      • 训练效率对比
  • 总结

Efficient physics-informed neural networks using hash encoding

简介

在 PINN 中,一个偏微分方程问题的求解就需要一次对神经网络的优化才能获得,这使得求解 PDE 问题的成本可能很高。传统的 PINN 训练需要消耗 10000 个 epoch,其成本通常远高于传统的数值方法,这使得除了求解奇异方程之外,将 PINN 用于实际应用的吸引力较小。 PINN 成本高的主要原因是收敛所需的 epoch 数量,特别是对于复杂的函数解决方案。其中一些限制可归因于神经网络的低频偏差。随机初始化的多层感知器需要一段时间的训练才能找到通往潜在局部最小值(有时是数千个epoch)的路径。换句话说,考虑到神经网络空间通常具有高维性质,在找到局部最小值之前,它首先会在随机搜索中迷失。部分问题是由于解的坐标值(输入)受其维度(通常是三个空间维度再加上时间维度)的限制,对神经网络施加的影响很小,这迫使网络最初在参数空间中自由漫游,几乎没有受到任何指引。通过编码增加输入的影响,这一限制已得到部分解决,编码允许输入空间具有更高维度的表示,其中标量输入被向量替换。频率或位置编码给出的示例将相邻样本坐标的微小差异替换为位置向量表示中较大差异所表示的网络中更深刻的变化。

提高 PINN 训练的效率的方法大致可以分为以下三个组成部分:神经网络 (NN) 架构设计、损失函数设计和训练过程。本文重点关注神经网络的设计,特别是表示输入(使用嵌入层)。在某种程度上,PINN 可以被视为神经场表示任务(例如NeRF),其输入是空间坐标,输出是体素或物理场,但以偏微分方程损失作为训练信号。受嵌入方法成功的启发,特别是对神经场表示的输入坐标的编码,以及多分辨率哈希编码在 NeRF 上最近取得的巨大进展,引发了一个逻辑问题:可以利用哈希编码来加速 PINN 训练吗?多年来用作输入坐标加密形式的哈希编码可以提供更本地化的坐标值表示。这一多分辨率特征为图像神经网络功能表示(NeRF)的收敛提供了相当大的加速。 1000 个 epoch 的收敛率降低到 100 以下。这是一项重大改进,使 NeRF 得以实际使用。然而,此类表示中涉及的监督训练不需要计算导数,而 PINN 中的 PDE 损失函数则需要计算导数。

本文将哈希编码引入 PINN,并研究了它通过减少收敛所需的 epoch 数来解决 PINN 的成本限制。本文还研究了通过哈希编码自动微分的适用性。具体来说,本文使用有限差分方法来确保具有哈希编码的 NN 函数导数的稳定计算,并将其用于 PINNs 训练。在数值示例中,在几个偏微分方程上测试了本文的方法,以证明其在显着降低 PINN 成本方面的潜力,并分享了可能遇到的限制。

方法

PINN

考虑 n n n Ω ⊆ R n \Omega \subseteq \mathbb R^n ΩRn 和边界 ∂ Ω \partial \Omega Ω 的连通域,一般的时间相关 PDE 可以定义为:
u t ( x ) + S ( u ( x ) , a ( x ) ) = 0 , x ∈ Ω , t ∈ [ 0 , T ] u_t(\mathbf{x})+S(u(\mathbf{x}),a(\mathbf{x}))=0,\quad\mathbf{x}\in\Omega,\quad t\in[0,T] ut(x)+S(u(x),a(x))=0,xΩ,t[0,T]
其中 t t t x x x 分别是时间和空间坐标, S ( u , a ) S(u, a) S(u,a) 是非线性微分算子, a ∈ A a \in A aA 表示偏微分方程的参数,例如系数和初始或边界条件, u u u 表示我们想要解决的物理场。在普通 PINN 中,由可训练参数 θ \theta θ 参数化的神经网络 Φ ( θ , x , t ) \varPhi (\theta, x, t) Φ(θ,x,t) 经过训练,将输入坐标(包括与时间相关的方程的时间)映射到输出,输出代表物理场(例如, 速度、压力、涡度等)在输入坐标位置,满足以下方程:
∂ Φ ( θ , x ) ∂ t + S ( Φ ( θ , x ) , a ( x ) ) = 0. \frac{\partial\Phi(\theta,\mathbf{x})}{\partial t}+S(\Phi(\theta,\mathbf{x}),a(\mathbf{x}))=0. tΦ(θ,x)+S(Φ(θ,x),a(x))=0.
因此,我们可以在损失函数中使用该偏微分方程的均方残差以及任何初始或边界条件,
L = 1 N i ∑ j = 1 N i ( ∂ Φ ( θ , x j ) ∂ t + S ( Φ ( θ , x j ) , a ( x j ) ) ) 2 ⏟ Interior PDE loss + 1 N b ∑ i = 1 N b ( B ( Φ ( θ , x i ) ) − u b ( x i ) ) 2 , ( 3 ) ⏟ Supcrivesd loss on boundary \mathrm{L}=\underbrace{\frac1{N_i}\sum_{j=1}^{N_i}\left(\frac{\partial\Phi(\theta,\mathbf{x}_j)}{\partial t}+S(\Phi(\theta,\mathbf{x}_j),a(\mathbf{x}_j))\right)^2}_{\text{Interior PDE loss}}+\underbrace{\frac1{N_b}\sum_{i=1}^{N_b}\left(\mathcal{B}(\Phi(\theta,\mathbf{x}_i))-u_b\left(\mathbf{x}_i\right)\right)^2,\quad(3)}_{\text{Supcrivesd loss on boundary}} L=Interior PDE loss Ni1j=1Ni(tΦ(θ,xj)+S(Φ(θ,xj),a(xj)))2+Supcrivesd loss on boundary Nb1i=1Nb(B(Φ(θ,xi))ub(xi))2,(3)
优化神经网络的参数 θ \theta θ,其中 N i N_i Ni 是域内收集点的数量, N b N_b Nb 是边界上的收集点的数量, u b u_b ub 是边界值, B \mathcal B B 是边界算子,表示域的导数或值。

哈希编码

对于函数学习,本文的目标是提高神经网络对偏微分方程的逼近质量,以及给定神经网络的训练速度。请注意,速度是本文的主要目标。一种聪明的方法是将输入查询(例如空间坐标和时间)编码到高维空间。在这里,本文使用 Müller 等人提出的哈希编码。哈希编码的总体思想是将多分辨率分解与哈希表相结合,以紧凑地表示 3D 形状。然后,复杂的 3D 现实世界可以通过小型神经网络和可训练的哈希编码参数来表示。

在这里插入图片描述

上图描述了根据 Müller 等人使用的图表建模的哈希编码机制。 模拟域 x i x_i xi 中的每个样本都可以使用从低到高的 S S S 级分辨率来描述。对于每个分辨率级别,如上图中的粉色或蓝色点,计算嵌入向量。具体来说,首先找到它的体素顶点(2D 情况下有 4 个顶点,3D 情况下有 8 个顶点),然后使用可训练的哈希表,其中包括每个分辨率级别的长度为 L L L 的固定特征和哈希表大小 T T T,评估每个顶点相应的嵌入向量。然后,我们使用顶点向量的线性插值来获得 x i x_i xi 在不同级别的嵌入向量。最后, x i x_i xi 的哈希编码是来自不同级别的这些嵌入向量的串联。

具体地,给定编码级别S以及最细和最粗分辨率 R f R_f Rf R c R_c Rc,每个级别的分辨率 R s R_s Rs 由几何级数确定,如下:
R s : = ⌊ R c ⋅ b s ⌋ , b : = exp ⁡ ( ln ⁡ R f − ln ⁡ R c S − 1 ) . \begin{aligned} R_s&:=\left\lfloor R_c\cdot b^s\right\rfloor,\\ b&:=\exp\left(\frac{\ln R_f-\ln R_c}{S-1}\right). \end{aligned} Rsb:=Rcbs,:=exp(S1lnRflnRc).
那么对于 x i x_i xi,它的顶点是 $\lfloor\mathbf{x}_{i,s}\rfloor:=\lfloor\mathbf{x}i\cdot R_s\rfloor $ 和 $\lceil\mathbf{x}{i,s}\rceil:=\lceil\mathbf{x}_i\cdot R_s\rceil $。对于粗分辨率,当顶点数 ( R s + 1 ) d (R^s+1)^d (Rs+1)d 小于哈希表 T T T 时,哈希表可以提供一对一的查询。然而,为了更高分辨率,顶点和哈希表之间的映射是通过哈希函数来实现的
h ( x i ) = ( ⨁ j = 1 d x i , j π j ) m o d   T h(\mathbf{x}_i)=\left(\bigoplus_{j=1}^dx_{i,j}\pi_j\right)\quad\mathrm{mod~}T h(xi)=(j=1dxi,jπj)mod T
其中 ⨁ \bigoplus 是按位“异或”XOR, π j \pi_j πj 是唯一且大的素数。这种编码不仅提供了输入维度的紧凑表示,而且由于几乎即时的哈希表查找机制,计算复杂度为 O ( 1 ) O(1) O(1),非常高效。

具有哈希编码的 PINN

本文的目标是利用哈希编码来加速 PINN 的收敛。然而,与 NeRF 应用不同,PINN 的损失函数需要输出场相对于输入坐标的导数。由于所提出的哈希编码包括线性插值,因此这些导数可能是不连续的,这导致评估不准确,尤其是在分辨率网格的边界附近,并且这些潜在的不连续导数对于哈希编码的高分辨率级别更为频繁。以一个简单函数 f ( x ) = s i n ( x ) f (x) = sin(x) f(x)=sin(x) 为例,其各种阶导数很容易获得,可以在一个简单的输入为 x x x 的网络上测试自动微分(PINN 中经常使用)的性能,该网络函数经过训练以输出 f ( x ) f (x) f(x) 的值。然而,这个简单的网络将包含一个哈希编码层。

在这里插入图片描述

如上图所示,可以观察到基于哈希编码的神经网络的导数值并不准确,其准确性很大程度上取决于哈希编码的超参数。具体来说,需要仔细选择最粗和最细的分辨率、编码级别以及哈希表大小,以减轻不连续性的影响,这也取决于搭配点。本文的观点是,与高分辨率哈希中的高频细节非常适合的哈希编码的强度将被自动微分计算中的这一弱点所抵消。例如,使用很多级别并包括最精细的分辨率将使整个神经网络(带编码的神经网络)更好近似训练样本点的值,但生成的函数将缺乏平滑性,导致不稳定的导数。这是用于哈希向量的线性插值的直接结果。因此,使用当前哈希编码实现通过自动微分评估的神经网络的导数是不稳定的。

为了寻求有效的实现,本文转而使用有限差分(FD)方法来计算导数,因为自动微分对于高阶导数来说也很昂贵。由于有限差分(顾名思义)计算有限长度上的导数,因此它相对不受点引起的导数不连续性的影响。然而,在处理突然变化的函数时,准确性可能会略有下降,这是 PINN 的普遍弱点。 FD 方法建立在泰勒级数展开的基础上。给定一个网格点 x i x_i xi,可以通过限制其泰勒级数展开的长度来近似其物理场 u ( x i ) u(x_i) u(xi),如下:
u ( x i + Δ x ) = u ( x i ) + Δ x ∂ u ∂ x ∣ x i + Δ x 2 2 ∂ 2 u ∂ x 2 ∣ x i + ⋯ u\left(\mathbf{x}_i+\Delta\mathbf{x}\right)=u\left(\mathbf{x}_i\right)+\left.\Delta\mathbf{x}\frac{\partial u}{\partial\mathbf{x}}\right|_{\mathbf{x}_i}+\left.\frac{\Delta\mathbf{x}^2}2\frac{\partial^2u}{\partial\mathbf{x}^2}\right|_{\mathbf{x}_i}+\cdots u(xi+Δx)=u(xi)+Δxxu xi+2Δx2x22u xi+
停在二阶精度,有限差分一阶和二阶导数由下式给出:
∂ u ∂ x ∣ x i ≈ u ( x i + Δ x ) − u ( x i − Δ x ) 2 Δ x , ∂ 2 u ∂ x 2 ∣ x i ≈ u ( x i + Δ x ) − 2 u ( x i ) + u ( x i − Δ x ) Δ x 2 . \begin{aligned} \left.\frac{\partial u}{\partial\mathbf{x}}\right|_{\mathbf{x}_i}& \approx\frac{u\left(\mathbf{x}_i+\Delta\mathbf{x}\right)-u\left(\mathbf{x}_i-\Delta\mathbf{x}\right)}{2\Delta\mathbf{x}}, \\ \left.\frac{\partial^2u}{\partial\mathbf{x}^2}\right|_{\mathbf{x}_i}& \approx\frac{u\left(\mathbf{x}_i+\Delta\mathbf{x}\right)-2u\left(\mathbf{x}_i\right)+u\left(\mathbf{x}_i-\Delta\mathbf{x}\right)}{\Delta\mathbf{x}^2}. \end{aligned} xu xix22u xixu(xi+Δx)u(xiΔx),Δx2u(xi+Δx)2u(xi)+u(xiΔx).
在训练过程中,导数计算所需的网格点应输入神经网络以获得相应的场值。

在这里插入图片描述

如上图所示,具有哈希编码的 NN 的导数通常比自动微分的导数更准确,但同样需要仔细选择编码超参数。在这里,上图© 中 FD 方法出现了失败的情况,该案例是由于使用小型哈希表而导致的,这迫使神经网络学习区分不同位置的样本,从而导致导数计算的准确性下降。与自动微分方法相比,(b)中的二阶导数虽然不平滑,但其趋势与解析解一致。

实验

本文通过其在三个众所周知的偏微分方程(PDE)上的应用来展示该方法的有效性。在所有情况下,都使用 MLP 架构作为主干,使用 Tanh 作为激活函数。为了公平的效率比较,使用 FD 方法来获得普通 PINN 和带有哈希编码的 PINN 的导数。同时稍微增加了普通 PINN 的宽度,使可训练参数的数量几乎等于具有哈希编码的 PINN。本文在所有实验中使用 Adam 优化器和衰减学习率来训练这些神经网络。

对于每个测试,通过设置解决方案精度的阈值(通过神经网络预测的解决方案与参考解决方案之间的绝对误差)以停止训练并根据轮数和每个轮次的成本评估方法。由于 FD 方法在导数计算方面的灵活性,本文使用 tiny-cuda-nn 框架实现了神经网络以进一步加速训练过程。

Burgers 方程

首先,考虑一个具有代表粘性流体一维流动的狄利克雷边界条件的一维时间相关方程,称为 Burgers 方程,它是 PINN 中广泛使用的基准。控制方程如下:
∂ u ∂ t + u ∂ u ∂ x = ν ∂ 2 u ∂ x 2 , t ∈ [ 0 , 1 ] , x ∈ [ − 1 , 1 ] , u ( t , − 1 ) = u ( t , 1 ) = 0 , u ( 0 , x ) = − s i n ( π x ) , \begin{aligned} &\begin{aligned}\frac{\partial u}{\partial t}+u\frac{\partial u}{\partial x}&=\nu\frac{\partial^2u}{\partial x^2},&t\in[0,1],&x\in[-1,1],\end{aligned} \\ &u(t,-1)=u(t,1)=0, \\ &u(0,x)=-sin(\pi x), \end{aligned} tu+uxu=νx22u,t[0,1],x[1,1],u(t,1)=u(t,1)=0,u(0,x)=sin(πx),
其中 ν \nu ν 是粘度参数,此处设置为 0.01 π 0.01 \pi 0.01π。对于普通 PINN,使用具有三个隐藏层 { 96 , 96 , 96 } \{96,96,96\} {96,96,96} 的 MLP,而对于具有哈希编码的 PINN,使用大小为 { 64 , 64 , 64 } \{64,64,64\} {64,64,64} 的 MLP。学习率为 1 e − 3 1\text e-3 1e3,在 3000、5000、7000 和 10000 epoch 时减少 0.8 倍。使用数值解作为评估预测准确性的参考。

在这里插入图片描述

上图 (a) 显示了所提出的方法和使用 12800 个配置点的普通 PINN 的收敛速度。如前所述,通过测量达到预定义精度阈值所需的 epoch 数来关注收敛速度,可以发现采用哈希编码的 PINN 可以在不到 2500 epoch 内达到此目标精度,而普通 PINN 需要近20000个epoch。这里考虑的阈值精度为与参考解等效的解上图 (b)

Helmholtz 方程

接下来,在二阶导数问题上测试偏微分方程,该问题由著名的亥姆霍兹方程给出,该方程描述了波动现象并在地震和电磁领域有很多应用。这里考虑亥姆霍兹方程的简单形式:
∂ 2 u ∂ 2 x + ∂ 2 u ∂ 2 y + λ u − f ( x , y ) = 0 , u ( x , 2 ) = 0 , u ( − 2 , y ) = 0 , u ( x , − 2 ) = 0 , u ( y , 2 ) = 0 , f = − ( a 1 π ) 2 sin ⁡ ( a 1 π x ) sin ⁡ ( a 2 π y ) − ( a 2 π ) 2 sin ⁡ ( a 1 π x ) sin ⁡ ( a 2 π y ) + λ sin ⁡ ( a 1 π x ) sin ⁡ ( a 2 π y ) , \begin{aligned} &\begin{aligned}\frac{\partial^2u}{\partial^2x}+\frac{\partial^2u}{\partial^2y}+\lambda u-f(x,y)=0,\end{aligned} \\ &\begin{aligned}u(x,2)=0,&u(-2,y)=0,&u(x,-2)=0,&u(y,2)=0,\end{aligned} \\ &f=-\left(a_1\pi\right)^2\sin\left(a_1\pi x\right)\sin\left(a_2\pi y\right) \\ &-\left(a_2\pi\right)^2\sin\left(a_1\pi x\right)\sin\left(a_2\pi y\right) \\ &+\lambda\sin\left(a_1\pi x\right)\sin\left(a_2\pi y\right), \end{aligned} 2x2u+2y2u+λuf(x,y)=0,u(x,2)=0,u(2,y)=0,u(x,2)=0,u(y,2)=0,f=(a1π)2sin(a1πx)sin(a2πy)(a2π)2sin(a1πx)sin(a2πy)+λsin(a1πx)sin(a2πy),
其中 f f f 是源函数, u u u 是波场, λ \lambda λ 是波数的平方, a 1 a_1 a1 a 2 a_2 a2 是控制源项正弦特性的参数。该方程存在解析解:
u ( x , y ) = s i n ( a 1 π x ) s i n ( a 2 π y ) u(x,y)=sin(a_1\pi x)sin(a_2\pi y) u(x,y)=sin(a1πx)sin(a2πy)
在本例中,本文对普通 PINN 使用具有三个隐藏层 { 144 , 144 , 144 } \{144,144,144\} {144,144,144} 的 MLP,而对于具有哈希编码的 PINN,使用 { 128 , 128 , 128 } \{128,128,128\} {128,128,128} 的 MLP。学习率为 1.5 e − 3 1.5\text e-3 1.5e3,在 3000、5000 和 7000 epoch 时降低了 0.8 倍。统一采样 10000 个收集点来训练神经网络。

在这里插入图片描述

亥姆霍兹方程训练的收敛速度如上图 (a) 所示。可以观察到,使用哈希编码的 PINN 收敛速度更快,并且使用哈希编码的 PINN 的 PDE 损失和测试数据错误仍然可以减少。尽管如此,预测解和参考解(如上图 (b) 所示)看起来是相同的。

N-S 方程

最后,在动态流体中的一个著名方程——纳维-斯托克斯方程上测试了所提出的方法。具体来说,考虑不可压缩流体的情况,产生基于质量和动量守恒的两个控制方程,如下所示:
∂ t u ⃗ ( x , y , t ) + u ⃗ ( x , y , t ) ⋅ ∇ u ⃗ ( x , y , t ) + ∇ p = 1 R e Δ u ⃗ ( x , y , t ) + f ( x , y ) , x ∈ ( 0 , 1 ) 2 , t ∈ ( 0 , T ] ∇ ⋅ u ⃗ ( x , t ) = 0 x ∈ ( 0 , 1 ) 2 , t ∈ [ 0 , T ] u ⃗ ( x , 0 ) = u ⃗ 0 ( x ) x ∈ ( 0 , 1 ) 2 \begin{aligned} \partial_{t}\vec{u}(x,y,t)+\vec{u}(x,y,t)\cdot\nabla\vec{u}(x,y,t)+\nabla p& =\frac1{Re}\Delta\vec{u}(x,y,t)+f(x,y), &x\in(0,1)^2,t\in(0,T] \\ \nabla\cdot\vec{u}(x,t)& =0 & x\in(0,1)^2,t\in[0,T] \\ \vec{u}(x,0)& =\vec{u}_0(x) & x\in(0,1)^2 \\ \end{aligned} tu (x,y,t)+u (x,y,t)u (x,y,t)+pu (x,t)u (x,0)=Re1Δu (x,y,t)+f(x,y),=0=u 0(x)x(0,1)2,t(0,T]x(0,1)2,t[0,T]x(0,1)2
其中 R e Re Re 是雷诺数,在实验中设置为100, ∇ \nabla 是散度算子, Δ \Delta Δ 是拉普拉斯算子, u ⃗ \vec{u} u 是速度场, u ⃗ 0 \vec{u}_0 u 0 是初始速度场, p p p 是压力, f f f 是外力,这里设置为零。普通 PINN 具有三个隐藏层 { 112 , 112 , 112 } \{112,112,112\} {112,112,112} ,相比之下,使用 { 64 , 64 , 64 } \{64,64,64\} {64,64,64} 作为具有哈希编码的 PINN。学习率为 1.2 e − 3 1.2\text e-3 1.2e3,在 3000、5000 和 7000 epoch 时降低了 0.8 倍。统一采样 10000 个收集点来训练神经网络。

在这里插入图片描述

结果如上图所示,其中参考解是从数值求解器获得的。与之前的实验一样,所提出的方法具有快速收敛性,并且只需 2270 个 epoch 即可达到目标精度(1.5e-3)。然而,即使有 50000 个 epoch,vanilla PINN 也无法满足目标精度。这表明所提出的方法加速了训练并提高了准确性。

训练效率对比

上述实验表明,使用哈希编码的 PINN 可以在比普通 PINN 少得多的 epoch 内进行训练,从而实现良好的目标准确度。

在这里插入图片描述

在上表中,对此处使用的三个示例的两种方法进行了定量比较。可以发现采用哈希编码的 PINN 可以使用单个 NVIDIA A100 GPU 卡在 30 秒内求解这三个著名方程。

总结

本文将哈希编码引入 PINN 中,并使用有限差分方法克服了哈希编码带来的自动微分的不准确性,加速了 PINN 的训练过程。

之前一直觉得 NeRF 和求解 PINN 之间有共同之处,也在2022中科大计算机图形学暑期课程里看过哈希编码加速NeRF的那篇文章,但没有意识到在这点上是共通的,看来在这方面敏感度还是不太够。当然,将输入映射到高维这一方法也是十分有趣的话题,而本人对这方面其实不太感兴趣,或许我该多看点这方面的方法。

相关链接:

  • 原文:[2302.13397] Efficient physics-informed neural networks using hash encoding (arxiv.org)

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

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

相关文章

将项目代码上传到github

文章目录 1. 上传步骤1.1. 设置保存项目代码的文件夹1.2. 打开git1.3. 连接到github仓库1.4. 将本地文件上传到github 附录. git 常用命令 摘要:该文章主要从上传代码步骤讲起,关于git下载和其环境配置没有涉及到。 1. 上传步骤 1.1. 设置保存项目代码…

Java-网络通信总结

文章目录 网络程序设计基础局域网与互联网 网络协议IP协议TCP/IP 协议端口域套接字 TCP 程序InterAddress 类ServerSocket 类 UDP 程序DatagramPacket 类DatagramSocket 类 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素…

【Pyqt】QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

问题说明 文本框接收到新的数据 不会自动滚动,并提示警告 QObject::connect: Cannot queue arguments of type ‘QTextCursor’ (Make sure ‘QTextCursor’ is registered using qRegisterMetaType().) 原因 线程回来的槽函数里面 调用了ui的代码 我们不能通过线程…

刚刚,深兰科技在国际顶级会议EMNLP竞赛中再夺两冠

12月6日至10日,自然语言处理领域的国际顶级会议EMNLP(自然语言处理中的经验方法会议)在新加坡召开,研究人员、学者和业界专业人士齐聚一堂,展示和讨论该领域的最新研究成果、进展和创新。 会上公布了各项任务竞赛的获奖名单,深兰科…

JumpServer初探

JumpServer资产,用户关系如图所示。 资产管理下有资产列表和系统用户,系统用户分为特权用户和普通用户。资产列表下管理的是服务器,而特权用户就是JumpServer用来登录服务器的账号,因此特权用户需要拥有较高的权限,比…

计算机基础知识67--BBS

迁移表格 # 以后你写的每个python项目,都必须有一个txt文件叫 requirements.txt,里面放了当前项目所有的依赖,别人拿到项目---》需要执行 pip install -r requirements.txt # 装好该项目所有依赖 django3.2.20 # 模块 pillow mysqlclient # 主体项目功…

C语言精选——选择题Day39

第一题 1. 有下面的定义,则 sizeof(s) 为多少? char *s "\ta\017bc"; A:9 B:5 C:6 D:7 答案及解析 C 本题涉及到了转义字符 \t 是水平制表符,算一个字节 \017 是表示八进制数&#…

【开放集检测OSR】open-set recognition(OSR)开集识别概念辨析

开放集学习 Openset Learning 主动学习 Active Learning 例外检测 Out-of-Distribution open-set recognition(OSR)开集识别 anomaly detection和outlier detection 文章目录 OOD检测OSR开放集识别OSR开放集识别在训练和测试阶段的数据集使用数据分布似然函数OSR开放集识别的特…

VMware安装OpenEuler(安装界面)

本文中使用的OpenEuler版本:22.03 LTS SP2 VMware:17.0.0 一、下载镜像 根据CPU和场景,按需下载 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系统 四、安装操作系统 …

爱智EdgerOS之深入解析如何在EdgerOS中使用SQLite3数据库引擎

一、SQLite 简介 数据管理是应用开发者最常遇到的挑战之一,无论是支付宝的余额,或是京东购物车里的商品,都需要存储在对应服务后端的数据库中,以满足用户查询、转账、购买等各种各样的使用场景。EdgerOS 智能边缘计算操作系统内置…

CCF 202104-2:邻域均值--C++

#include<iostream> #include<bits/stdc.h>using namespace std;int A[601][601]; int n;//长宽都为n个像素double FindNeighborSum(int i,int j,int r,int A[][601]) {int sum0;//像素和 int gs0;//领域 中的像素个数 for(int xi-r;x<ir;x)//找到每一个领域像素…

Numpy数组的运算(第7讲)

Numpy数组的运算(第7讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

盘点11月Sui生态发展,了解Sui的近期成长历程!

11月是Web3的“回暖期”&#xff0c;行业持续展现增长趋势。Sui紧随行业脚步&#xff0c;开展了一系列生态活动。其中历时一个多月的Quest 3游戏活动顺利结束并公布奖励&#xff0c;在多地区成功举办Move和Sui生态黑客松&交流会&#xff0c;还有针对中文社区开发者教育的星…

一.初始typescript

什么是ts 首先我们要确认typescript是一个语言&#xff0c;是等同于JavaScript层级得&#xff0c;并不是一些人认为得是JavaScript得类型规范工具或者插件。 ts与js的差异 从type script这个名字就可以看出&#xff0c;ts其实是JavaScript的一个类型化超集&#xff0c;它增…

低多边形游戏风格3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

[linux] kaggle 数据集用linux下载

你可以通过以下步骤获取Kaggle的下载链接并在Linux中进行下载&#xff1a; 首先&#xff0c;确保你已经安装了Python和Kaggle API。如果没有安装&#xff0c;你可以通过以下命令安装&#xff1a; pip install kaggle 接着&#xff0c;你需要在Kaggle网站上获取API Token。登录…

大数据技术1:大数据发展简史

前言&#xff1a;学习大数据技术&#xff0c;知道会用已经够了&#xff0c;但是要想走得更远&#xff0c;应该了解它发展的来龙去脉&#xff0c;为何会有新的技术/工具的出现&#xff0c;相比老的技术有什么样的进步。 1、传统数据处理系统存在的问题 随着信息时代互联网技术爆…

重新认识Word——多级列表和项目符号

重新认识Word——多级列表和项目符号 多级列表没有运用标题样式但标题格式统一 正式公本文书项目符号和自动编号项目符号自动编号软回车重新起头开始编号解决编号与文本距离过大问题 之前我们重新认识了Word里面的样式&#xff0c;现在的情况就是&#xff0c;我的一些文字已经运…

【kubernetes】k3s集群搭建(正在更新……)

文章目录 一、k3s简介二、快速搭建1.控制平面2.镜像加速 Pod容器集1.创建和管理pod Deployment(部署)与ReplicaSet(副本集)滚动更新 Service命名空间YAML语法管理对象常用命令缩写YAML规范 声明式配置对象标签选择器 容器运行时接口(CRI)与镜像导入导出容器运行时接口(CRI) 金丝…

案例062:基于微信小程序的健身房私教预约系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…