【图像水印 2022 ACM】PIMoG

news2025/1/31 11:09:24

【图像水印 2022 ACM】PIMoG

论文题目:PIMoG: An Effective Screen-shooting Noise-Layer Simulation for Deep-Learning-Based Watermarking Network

中文题目:PIMoG:深度学习水印网络中一种有效的截屏噪声层仿真

论文链接:https://dl.acm.org/doi/abs/10.1145/3503161.3548049

论文代码:https://github.com/FangHanNUS/PIMoG-An-Effective-Screen-shooting-Noise-Layer-Simulation-for-Deep-Learning-Based-Watermarking-Netw

论文团队:新加坡国立大学

发表时间:

DOI:

引用:Fang H, Jia Z, Ma Z, et al. PIMoG: An Effective Screen-shooting Noise-Layer Simulation for Deep-Learning-Based Watermarking Network[C]//Proceedings of the 30th ACM International Conference on Multimedia. 2022: 2267-2275.

引用数:3

摘要

随着照相手机和数字显示器的普遍存在,用照相手机捕捉数字显示的图像得到了广泛的应用。在水印的背景下,这带来了屏幕拍摄的稳健性问题。获得屏幕拍摄鲁棒性的关键是设计一个好的噪声层,它可以在基于深度学习的水印框架中代表屏幕拍摄的失真。然而,由于拍摄过程太过复杂,要定量地制定拍摄失真是非常困难的。

为了设计一个有效的屏幕射击鲁棒性的噪声层,我们在本文中提出了新的见解,即没有必要定量模拟屏幕射击噪声层的整体程序,只包括影响最大的失真就足以产生一个具有强大鲁棒性的有效噪声层。为了验证这一见解,我们提出了一个被称为PIMoG的屏幕射击噪声层。

具体来说,我们将屏幕拍摄过程中影响最大的失真总结为三部分(透视失真、光照失真和摩尔纹失真),并进一步以可区分的方式模拟它们。对于其余的失真,我们利用高斯噪声来逼近它们的主要部分。因此,整个网络可以用这种噪声层进行端到端的训练。大量的实验说明了所提出的PIMoG噪声层的卓越性能。除了噪声层的设计,我们还提出了梯度掩码引导的图像损失和边缘掩码引导的图像损失,以分别进一步提高整个网络的鲁棒性和隐蔽性。基于所提出的损失和PIMoG噪声层,整个框架在提取精度上优于SOTA水印方法至少5%,并在不同的屏幕拍摄条件下达到了97%以上的精度。

1. 介绍

数字水印技术可以作为实现泄漏源追踪的一种方式。通过在不同的副本中嵌入独特的识别信息,泄露的副本可以很容易地被识别出来。水印方案最重要的特性是稳健性。由于在传输过程中,被泄露的拷贝可能会遭受很多失真,因此实现可追溯性的关键是水印应该对失真具有鲁棒性。传统的数字水印更注重数字编辑失真的鲁棒性[1, 3, 5, 11-13, 19, 26, 29],如JPEG压缩、高斯噪声等,因为传统的信息泄露多发生在电子渠道。然而,随着数字设备的发展,人们很容易通过手机拍照获得高质量的拷贝,屏幕拍摄过程可能会严重破坏水印信号,但对数字文件的影响却很小,如图1所示。因此,设计一个屏幕拍摄的鲁棒性水印框架已经成为现阶段的迫切要求。


传统的数字水印方案通常是根据对失真的分析来设计算法的。例如,为了抵抗JPEG的失真,一些算法会选择在DCT域嵌入水印[16]。

然而,由于屏幕拍摄过程的复杂性,很难对屏幕拍摄的失真进行定量分析。

因此,设计一种算法来保证射屏过程的稳健性是一个挑战。

对于传统的屏幕拍摄弹性水印算法,他们只是定性地分析了屏幕拍摄过程中可能出现的失真,并使用一些通用的水印嵌入方法来保证鲁棒性[6]。

然而,这类方法往往会产生严重的视觉失真,因为嵌入方法是非自适应的,不能充分利用主机图像的特征。


为了充分利用图像特征和设计更好的算法,人们提出了基于深度学习的水印架构[2, 25, 27, 28]。

基于深度学习的水印的骨干是一个类似于自动编码器的端到端结构,它包含一个编码器、一个解码器和一个噪声层。确保鲁棒性的关键是设计一个好的噪声层。通过对目标噪声层的训练,可以保证相应的鲁棒性。

但可训练的前提是噪声层必须是可分的,所以当面对屏幕拍摄失真这种不可分的失真时,这种框架就不能直接应用。


对于不可区分的失真,一个直观的想法是用神经网络来近似整个失真过程,并将其作为训练的噪声层。但这种方法需要大量的数据,而生成训练数据是一个耗时耗力的过程。

此外,如果训练数据来自不同的设备,用模拟神经网络训练可能会出现训练数据和测试数据不匹配的问题,这将进一步影响算法的泛化。


因此,实现屏幕拍摄鲁棒性的最大挑战是设计一个有效的屏幕拍摄噪声层。 为了实现这一目标,本文提出了一个新的观点:不需要在屏幕拍摄噪声层中模拟整个过程,只需要包含影响最大的失真就可以生成一个具有较强鲁棒性的有效噪声层。


为了证明这一见解的正确性,我们生成了一个称为PIMoG的屏幕拍摄噪声层。

具体来说,我们把在屏幕拍摄过程中发生的影响最大的失真总结为三个主要部分:透视失真、照明失真和摩尔纹失真。

对于每一种失真,我们提出了一个可微分的公式来近似它。整个噪声层由模拟透视失真、模拟光照失真、模拟摩尔纹失真和用于表示其余失真主要部分的Gaussain噪声层组成。

广泛的实验证明了我们的见解的正确性和设计的噪声层的有效性。与网络模拟相比,提议的PIMoG噪声层在鲁棒性和适应性方面具有明显的优势。


除了噪声层,我们还设计了一个梯度掩模引导的图像损耗来进一步提高鲁棒性,并设计了一个边缘掩模引导的图像损耗来更好的不可见性。利用PIMoG和这两种损耗进行训练,所提出的水印网络既能实现高的不可见性,又具有较强的鲁棒性。

  1. 我们在屏幕拍摄噪声层的设计上给出了一个新的见解,即不需要模拟整个屏幕拍摄过程,只需将该过程中受影响最大的失真描述为噪声层就足以保证较强的鲁棒性。 我们希望这一思想能对后续的基于深度学习的水印框架中复杂噪声层的设计有所启发。
  2. 我们提出了一个噪声层PIMOG,它包含了拍摄过程中受影响最大的畸变,并进一步以可微的方式表达了这些畸变。 通过PIMOG训练,可以很好地实现屏幕拍摄的鲁棒性。
  3. 设计了梯度掩码引导的图像丢失,提高了图像拍摄的鲁棒性;设计了边缘掩码引导的图像丢失,帮助编码器以高质量的方式嵌入水印。
  4. 实验结果表明,该方案在保证高视觉质量的前提下,对屏幕拍摄失真有较好的抑制效果。

本文的其余部分组织如下。 在第2节中,我们主要讨论所提方案的相关工作。 第3节介绍了所提出的水印方案的体系结构。 第四节给出了相应的实验结果。 第5节介绍了所提出的噪声层的潜在应用。 第六节总结全文。

2. 相关工作

2.1 传统水印方案

传统的水印算法得到了广泛的研究,但大多数水印算法仍然致力于图像处理的鲁棒性。 最近有几部作品关注到了相机拍摄失真的问题。 中村等。 艾尔。 [20]最早提出用两个正交模板表示水印信号,并以叠加的方式嵌入。 之后是普拉米拉等。 艾尔。 [21]遵循了这样的作品,并提出了几个更好的表现的作品。 然而,这类方案只能用于打印-拍摄过程。 古格尔曼等。 艾尔。 [7]建议通过调制不同区域的亮度将水印嵌入到屏幕中。 但是这种方案不能很好地平衡鲁棒性和不可见性。 方等。 艾尔。 [6]分析了截屏失真,提出了一种基于SIFT和DCT的截屏鲁棒性方法。 但是这种算法在嵌入区域会产生视觉失真。 由于传统的水印算法只使用手工提取的特征进行嵌入和提取,不能充分利用宿主图像的特征。

2.2 基于深度学习的水印算法

近年来,越来越多的基于深度学习的水印方案被提出。 塔奇克等。 艾尔。 [22]用几个可微操作训练网络以获得打印拍摄的鲁棒性。 但是这种噪声层试图模拟打印拍摄过程的整体过程,不仅不能应用于屏幕拍摄场景,而且会产生严重的视觉失真。 最近,Wengrowski et。 艾尔。 [24]训练了一个摄像机-显示器传递函数(CDTF)网络来模拟摄像机拍摄过程。 通过设置CDTF作为噪声层,该网络可以实现截屏恢复。 但是,由于需要大量的屏幕-摄像机图像对来训练CDTF,这种方法在新设备产生的数据上性能较差。 刘等。 艾尔。 [18]提出了一种针对不可微失真的两阶段训练策略。 在第一阶段,他们首先初始化一个无噪声编码器和解码器,在第二阶段,他们使用畸变图像进一步微调解码器以适应畸变。 然而,由于编码特征在屏幕拍摄过程后可能会被擦除,即使经过微调,鲁棒性仍然不能有效地保证。

3. 整体架构

为了实现屏幕拍摄过程的鲁棒性,我们提出了一种称为PIMOG的屏幕拍摄噪声层,并给出了相应的框架,如图所示 2.

整个框架包括七个主要部分:

(1)扩散块,接收以长度为输入的水印消息,并输出消息隐藏层。 将被进一步重塑并级联到编码器的隐藏层; (2)带参数的编码器,将宿主图像∈R××馈入,生成带水印的图像∈R××;

(3)预训练的边缘掩码生成网络,其目的是生成的边缘掩码;

(4)带参数的敌手,它试图判断是否是水印图像;

(5)屏幕拍摄噪声层,它由多个可微畸变组成,通过畸变生成带噪声的图像;

(6)参数解码器,接收解码后的信息作为输入输出;

(7)梯度掩码生成器,通过损失传播计算宿主图像中信息损失的梯度掩码。

值得注意的是,边缘掩码生成网络是预先训练的,并且是固定的,这意味着它在训练后不会参加最终的水印嵌入过程。

image-20230529104031001

整个系统的框架。该系统主要由三部分组成:编码器、拍屏噪声层和解码器。整个网络可以端到端训练。为了实现屏幕拍摄的鲁棒性和高视觉质量,我们提出了边缘掩模引导的图像损耗和梯度掩模引导的图像损耗来应对整个框架。

3.1 Diffusion 块

为了更好地结合消息和图像特征,将消息嵌入到宿主图像中,我们提出了扩散块对消息进行预处理。

是一个完整的连接层,它接收长度的消息∈{0,1}并输出一个长度为256的向量,该向量被进一步重塑和重复以生成消息隐藏层 F m ∈ R 64 × 16 × 16 . F_{m}\in\mathbb{R}^{64\times16\times16}. FmR64×16×16.。 然后将分别向上采样到相同大小的编码器隐藏层,如图所示 2.

3.2 编码器

编码器的结构如图所示 2. 该编码器旨在以尽可能小的视觉失真将水印嵌入到宿主图像中。

具体来说,三个“双conv”块(2×conv-bn-relu-maxpool)首先向下采样到/8×/8特征映射。 然后在特征映射上添加一个额外的卷积层,生成一个全局的/32×/32特征映射,并将其进一步级联到/8×/8特征映射上。 最后,采用多个“Up-Double-Conv”块(2×Upsampling-Conv-BN-Relu-Maxpool)层生成与原始图像大小相同的最终水印图像。 其中,经过整形和上采样后的消息隐藏层S级联到的隐藏层。 我们认为,将宿主图像的隐藏层和水印信息串联起来是一种非常有效的结合特征和生成更好图像的方法。

3.3 预训练的边缘掩模发生器

在嵌入水印信号时赋予图像边缘区域较大的权重是提高水印图像视觉质量的有效途径[15]。 为了在深度学习框架中自动实现这一点,我们提出了一种掩码引导的图像丢失。 该掩模由一个预训练的边缘检测网络BDCN[8]生成,该网络在计算图像边缘方面被证明是有效的。 所以在生成边缘掩码∈{0,1}之后,我们可以将编码图像的损失函数设置为:
L I = E m ′ ∗ M S E ( I o , I e m ) = E m ′ ∗ M S E ( I o , E ( θ E , I o , M ) ) ( 1 ) \mathcal{L}_{I}=E_{m}^{'}*MSE(I_{o},I_{em})=E_{m}^{'}*MSE(I_{o},E(\theta_{E},I_{o},M))\quad(1) LI=EmMSE(Io,Iem)=EmMSE(Io,E(θE,Io,M))(1)
where
E m ′ = E m × α E + β E E^{'}_m=E_m\times\alpha_E+\beta_E Em=Em×αE+βE
α E \alpha_E αE β E \beta_E βE用于调整掩模的重量。 在本文中,设置为1,并且默认设置为1。 中,边缘区域保持较低值。

3.4 对抗

为了提高水印图像的视觉质量,该框架采用了对抗网络。一方面,编码后的图像试图误导对抗网络,从而导致与宿主图像相似的图像;所以使用𝐿𝐴𝑑loss通过更新𝜃𝐸来提高𝐼𝑒𝑚的图像质量:
L A d = l o g ( A d ( I e m ) ) = l o g ( A d ( E ( θ E , I o , M ) ) ) {\mathcal{L}}_{A d}=l o g(A d(I_{e m}))=l o g(A d(E(\theta_{E},I_{o},M))) LAd=log(Ad(Iem))=log(Ad(E(θE,Io,M)))
此外,𝐴𝑑应该更新,以便在𝐼𝑒𝑚和𝐼𝑜之间给出一个正确的分类,这可以通过更新𝜃𝐴𝑑来实现:
L A d v = l o g ( 1 − A d ( θ A d , I e m ) ) = l o g ( 1 − A d ( θ A d , E ( I o , M ) ) ) ( 4 ) \mathcal{L}_{Adv}=log(1-Ad(\theta_{Ad},I_{em}))=log(1-Ad(\theta_{Ad},E(I_{o},M)))(4) LAdv=log(1Ad(θAd,Iem))=log(1Ad(θAd,E(Io,M)))(4)
在本文中,我们默认使用Patchgan[10]。

3.5 屏幕拍摄噪声层

正如前面所分析的,我们提出了一个新的见解,即没有必要把整个过程作为噪声层来模拟,相反,我们只制定影响最大的扭曲,并把它们混合在一起作为一个组合的噪声层进行训练。我们相信组合噪声层将导致更强的鲁棒性。

在本节中,我们将详细介绍噪声层。经过对屏幕拍摄过程的调查,我们总结出受影响最大的失真分为三个主要部分:透视失真、照度失真和摩尔纹失真。然后,我们以可分化的方式制定了其中的每一项。至于其余失真主要部分,我们遵循[22]中的设置,使用高斯噪声作为近似值。因此,一般来说,我们提出的PIMoG噪声层包含以下几个部分,如图3所示。

image-20230530105723226

1. 透视失真

透视失真来自于不同的拍摄角度,这将导致拍摄的图像出现不同的变形。

在本文中,我们生成了一个随机同源映射来模拟透视失真的影响。具体来说,如图4所示,左边图像的4个顶点分别表示为 P 1 ( x 1 , y 1 ) , P 2 ( x 2 , y 2 ) , P 3 ( x 3 , y 3 ) P_{1}(x_1,y_1),P_{2}(x_2,y_2),P_{3}(x_3,y_3) P1(x1,y1),P2(x2,y2),P3(x3,y3)以及 P 4 ( x 4 , y 4 ) P_4(x_4,y_4) P4(x4,y4)。而对应于图像右侧的这4个点的变换坐标分别表示为: P 1 ′ ( x 1 ′ , y 1 ′ ) , P 2 ′ ( x 2 ′ , y 2 ′ ) , P 3 ′ ( x 3 ′ , y 3 ′ ) P_{1}^{\prime}(x_{1}^{\prime},y_{1}^{\prime}),P_{2}^{\prime}(x_{2}^{\prime},y_{2}^{\prime}),P_3'(x_3',y_3') P1(x1,y1),P2(x2,y2),P3(x3,y3) P 4 ′ ( x 4 ′ , y 4 ′ ) P_{4}^{\prime}(x_{4}^{\prime},y_{4}^{\prime}) P4(x4,y4)。将这8个坐标代入公式(5),我们可以得到8个方程,因此,通过解决这些方程,可以得到 a 1 , b 1 , c 1 , a 0 , b 0 , a 2 , b 2 , c 2 a_1,b_1,c_1,a_0,b_0,a_2,b_2,c_2 a1,b1,c1,a0,b0,a2,b2,c2的值。
x ′ = a 1 x + b 1 y + c 1 a 0 x + b 0 y + 1 y ′ = a 2 x + b 2 y + c 2 a 0 x + b 0 y + 1 \begin{gathered} x^\prime ={\frac{a_{1}x+b_{1}y+c_{1}}{a_{0}x+b_{0}y+1}} \\ y' =\frac{a_{2}x+b_{2}y+c_{2}}{a_{0}x+b_{0}y+1} \end{gathered} x=a0x+b0y+1a1x+b1y+c1y=a0x+b0y+1a2x+b2y+c2
确定所有参数之后,就生成了透视映射。并且所有的像素都可以根据映射到生成的图像中一个新的坐标中。在本文中,我们随机扰动图像的四个角(最多±8像素),并应用它们作为每个角的新坐标。然后我们将原始水印图像 I e m I_{em} Iem的每个像素双线性采样到透视失真图像 I P D I_{PD} IPD中,生成透视失真图像。

image-20230530105744398

2. 光照失真

在屏幕拍摄过程中,由于环境照度和屏幕照度的影响,不同的拍摄条件会导致拍摄的图像出现不同的照度分布。我们用点光源和线光源两类来模拟照度条件。在本文中,我们提出利用点扩散分布和线扩散分布来逼近这些条件。具体来说,对于点光源失真,我们生成的分布权重矩阵为:
I W p ( x , y ) = ( x − p x ) 2 + ( y − p y ) 2 m a x d i s ( p x p y ) × ( l m i n − l m a x ) + l m a x ( 6 ) I W_p(x,y)=\frac{\sqrt{(x-p_x)^2+(y-p_y)^2}}{maxdis(p_xp_y)}\times(l_{min}-l_{max})+l_{max}(6) IWp(x,y)=maxdis(pxpy)(xpx)2+(ypy)2 ×(lminlmax)+lmax(6)
其中 ( p x , p y ) (p_{x},p_{y}) (px,py)表示模拟点光源的坐标,是在整个图像中随机选择的。 m a x d i s ( p x , p y ) maxdis(p_x,p_y) maxdis(px,py)表示从 ( p x , p y ) (p_{x},p_{y}) (px,py)到图像的四个角的最大距离。 l m i n l_{min} lmin表示最小照度变化率,从 [ 0.7 , 0.9 ] [0.7, 0.9] [0.7,0.9]中均匀采样。 l m a x l_{max} lmax表示最大照度变化率,从 [ 1.1 , 1.3 ] [1.1, 1.3] [1.1,1.3]中均匀取样。 ( x , y ) (x,y) (x,y)表示分布权重矩阵的坐标,而 x ∈ H , y ∈ W x\in H,y\in W xH,yW

对于线光源畸变,我们生成的分布权重矩阵为:
I W l ∼ U { T 0 , T 90 , T 180 , T 270 } I W_{l}\sim\mathbb{U}\{T^{0},T^{90},T^{180},T^{270}\} IWlU{T0,T90,T180,T270}
where
T 0 ( x , y ) = ( x − H ) × ( l m i n − l m a x ) H + l m i n T^0(x,y)=\frac{(x-H)\times(l_{min}-l_{max})}{H}+l_{min} T0(x,y)=H(xH)×(lminlmax)+lmin
T 90 , T 180 , T 270 T^{90},T^{180},T^{270} T90,T180,T270表示将 T 0 T^0 T0分别旋转90◦, 180◦, 270◦度的矩阵。 I W l I W_{l} IWl是从 { T 0 , T 90 , T 180 , T 270 } \{T^{0},T^{90},T^{180},T^{270}\} {T0,T90,T180,T270}中随机选择的。而最终的照度失真 I D ID ID是从 { I W p , I W l } \{IW_p,IW_l\} {IWp,IWl}中随机选择。

3. 摩尔纹失真

在屏幕拍摄过程中出现的最特殊的失真是摩尔纹失真。由于屏幕和摄像机之间的采样频率不同,可能会有一些不规则的纹理出现在拍摄的图像中。我们用以下公式来模拟这种失真,根据
Z 1 ( x , y ) = 0.5 + 0.5 cos ⁡ ( 2 π ( x − z x ) 2 + ( y − z y ) 2 ) Z 2 ( x , y ) = 0.5 + 0.5 cos ⁡ ( cos ⁡ ( γ π ) × y + sin ⁡ ( γ π ) × x ) Z ( x , y ) = min ⁡ ( Z 1 ( x , y ) , Z 2 ( x , y ) ) M D ( x , y ) = ( Z ( x , y ) + 1 ) / 2 \begin{gathered} Z_{1}(x,y)=0.5+0.5\cos\left(2\pi{\sqrt{(x-z_{x})^{2}+\left(y-z_{y}\right)^{2}}}\right) \\ Z_{2}(x,y)=0.5+0.5\cos\left(\cos\left({\frac{\gamma}{\pi}}\right)\times y+\sin\left({\frac{\gamma}{\pi}}\right)\times x\right) \\ Z(x,y)=\operatorname*{min}{(Z_{1}(x,y),Z_{2}(x,y)}) \\ M D(x,y)=(Z(x,y)+1)/2 \end{gathered} Z1(x,y)=0.5+0.5cos(2π(xzx)2+(yzy)2 )Z2(x,y)=0.5+0.5cos(cos(πγ)×y+sin(πγ)×x)Z(x,y)=min(Z1(x,y),Z2(x,y))MD(x,y)=(Z(x,y)+1)/2

其中 γ \gamma γ是从 [ 0 , π ] [0,\pi] [0,π]中均匀选择的, ( z x , z y ) (z_x,z_y) (zx,zy)表示一个选定点的坐标,它是在整个图像中随机采样的。MD表示我们模拟的摩尔纹失真。最后的屏幕拍摄噪声层是由以下方式产生的:
I n o = δ 1 × I D × I P D + δ 2 × M D + G N I_{no}=\delta_1\times ID\times I_{PD}+\delta_2\times MD+G_N Ino=δ1×ID×IPD+δ2×MD+GN
其中表示剩余噪声的主要部分,并用高斯噪声(=0.001)对其进行模拟。 1和2表示相应的失真比,默认设置为0.85和0.15。

3.6 解码器

所提解码器的结构如图所示 2. 解码器的目的是恢复水印信息。 整个译码器由“单conv”(conv-bn-relu-maxpool)块、九个“残差”块和一个“线性”块组成,其中在“残差”块中进行三次下采样操作。

𝐷的目标是通过更新𝑀𝑑𝑒和原始水印M之间的差异最小:
L M = M S E ( M , M d e ) = M S E ( M , D ( θ D , I n o ) ) {\mathcal{L}}_{M}=M S E\left(M,M_{d e}\right)=M S E\left(M,D\left(\theta_{D},I_{n o}\right)\right) LM=MSE(M,Mde)=MSE(M,D(θD,Ino))

3.7 梯度掩模发生器

除了训练一个强的译码器以获得更好的鲁棒性外,生成更好的水印图像以利于译码也是非常重要的。 为了实现这一目标,我们提出使用梯度掩码来引导编码器。 梯度掩码是通过将信息丢失传播回宿主图像来生成的,它反映了对每个象素的期望修改,以便正确地解码水印。 我们认为梯度较大的区域应该优先进行修改,因为这将导致较大权重的准确解码。

掩码生成可表述为:
G m = ∂ L D ∂ L α G_{m}={\frac{\partial{\mathcal{L}}_{D}}{\partial L_{\alpha}}} Gm=LαLD
然后我们利用𝐺𝑚的归一化形式作为最终的梯度掩码来指导编码器。而相应的损失函数可以写成::
L G = G m ′ ∗ M S E ( I o , I e m ) = G m ′ ∗ M S E ( I o , E ( θ E , I o , M ) ) \mathcal{L}_G=G^{'}_m*MSE(I_o,I_em)=G^{'}_m*MSE(I_o,E(\theta_E,I_o,M)) LG=GmMSE(Io,Iem)=GmMSE(Io,E(θE,Io,M))

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

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

相关文章

Redis-- 缓存预热+缓存雪崩+缓存击穿+缓存穿透

Redis-- 缓存预热缓存雪崩缓存击穿缓存穿透**加粗样式** 一 面试题引入二 缓存预热三 缓存雪崩3.1 问题现象3.2 预防解决 四 缓存穿透4.1 定义4.2 解决方案4.2.1 空对象缓存或者缺省值4.2.2 Google布隆过滤器Guava解决缓存穿透 五 缓存击穿5.1 定义5.2 危害5.3 解决 六 总结 一…

Excel·VBA统计多部门多商品销售量前10%的商品

如图:根据表中唯一的货品ID,有m个事业部中分别有n种货品,统计各事业部销量前10%的货品名称,生成统计表(以下为2种统计方式) 目录 仅统计货品ID方法1:字典嵌套字典结果 方法2:自定义函…

【LED子系统】十、详细实现流程(番外篇)

个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 文章目录…

Hive ---- 文件格式和压缩

Hive ---- 文件格式和压缩 1. Hadoop压缩概述2. Hive文件格式1. Text File2. ORC3. Parquet3. 压缩1. Hive表数据进行压缩2. 计算过程中使用压缩 1. Hadoop压缩概述 为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器,如下表所示: Hadoo…

CodeForces..李华和迷宫.[简单].[找规律]

题目描述: 题目解读: 存在矩阵迷宫nm,(r,c)表示从顶部开始的第r行和左起第c列。 如果两单元格共享一个边,则是相邻的。路径是相邻空单元格的序列。 每个单元格初始状态都为空。对于从&#x…

代码随想录额外题目——图论部分

记录一下代码随想录中额外题目的图论部分 841.钥匙和房间 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。 当你进入一个…

山海大模型亮相,云知声交出AGI第一份答卷

有人说,AI大模型是少数巨头才能玩得转的游戏。 截至目前,认同此观点的人不在少数。自从ChatGPT去年迅速火遍全球之后,忽如一夜春风来,AI大模型遍地开。Google、Amazon、阿里、百度等巨头们纷纷加入AI大模型的“军备竞赛”&#x…

【数据分享】1929-2022年全球站点的逐日平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

大数据分析案例-基于决策树算法构建世界杯比赛预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

EMC VNX Unified Storage 关机顺序方法

EMC Unfied的VNX存储系统要比单纯的Block系统复杂很多,相当于是两套存储系统,不管在物理硬件上还是逻辑的软件OS上,都复杂很多很多。 客户经常遇到由于机房停电或者机房搬迁等情况,需要对存储系统做关机下电甚至物理搬迁的动作&a…

FPGA基于AXI 1G/2.5G Ethernet Subsystem实现UDP通信DMA传输 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统UDP网络通信方案本方案详细设计说明DMA和BRAMAXIS-FIFOUDP模块设计UDP模块FIFOAXI 1G/2.5G Ethernet Subsystem:输出 4、vivado工程详解5、上板调试验证并演示注意事项 6、福利:工程代码的获取 1、…

【simple-cache】一款只用一个注解就实现缓存的框架-我们终于迎来了SpringBoot版本

上次我们讲了【simple-cache】的使用: 【simple-cache】我开发了一款只要一个注解就可以轻松实现缓存的框架 这次主要更新的内容为: 添加springboot项目框架中去除了redisconfig类,避免了redis的单机和集群问题用户可以自定义使用自己项目中…

Python之字符串(str)基础知识点

strip() 删除指定字符 当token为空时,默认删除空白符(含’\n’,‘\r’,‘\t’,’ ),当非空时,根据指定的token进行删除。 字符的删除又可分为以下几种情况: string.strip(token):删除string字符串中开头(left)、结尾处(right)的…

【操作系统】02.进程管理

多道程序系统 多道就是将多个程序同时装入内存,使之并发运行。操作系统也是基于多道产生的,提高了资源利用率和系统吞吐量。 进程 定义 进程是程序的一次执行 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位 在引入线…

会流程图却不会UML活动图?活动图深度剖析,就怕你学不会!

1. UML活动图是啥? 也许很多人都不怎么了解活动图,但是却对流程图很熟悉,你暂且可以简单的把活动图理解为UML里的流程图,用来描述系统的行为特征。不过UML活动图对比于流程图来说也存在不少差异,本文将在第三章节讲解活…

解决 MobaXterm X11 server 打开 wsl2 linux 子系统 rviz 可视化窗口卡顿问题

1、问题 环境: MobaXtermwsl2 Ubuntu-18.04ROS1Intel 核显 一直使用 MobaXterm 这个远程软件 ssh 链接 linux 服务器,因为它集成了 X11 server,即可以显示一些 linux 下有图形化界面的程序,如 ROS 的 rviz 等。 但是 MobaXterm…

宝塔面板一键部署Z-Blog博客 - 内网穿透实现公网访问

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 转发自cpolar极点云的…

一步一步的实现使用 Tensorflow Hub 进行图像分割

在本文中,我们将学习如何使用 TensorFlow Hub中提供的预训练模型执行语义图像分割。TensorFlow Hub 是一个库和平台,旨在共享、发现和重用预训练的机器学习模型。TensorFlow Hub 的主要目标是简化重用现有模型的过程,从而促进协作、减少冗余工…

[比赛简介]ICR - Identifying Age-Related Conditions

比赛链接:https://www.kaggle.com/competitions/icr-identify-age-related-conditions 比赛简介 本次比赛的目标是预测一个人是否患有三种疾病中的任何一种。您被要求预测该人是否患有三种疾病中的任何一种或多种(1 类),或者三种…

第14届蓝桥杯Scratch选拔赛(STEMA) 真题集锦

一、选择题 第 1题单选题 运行以下程序 (小象仅有两个造型),小象的造型是哪个? () 答案 A 解析 本题正确答案是A,考察的知识点是角色造型,在Scratch中,切换造型有两个指令,分别是“换成xx造型“和“下一个造型”,其中前者将角色切换为指定造型,而后者则从当前造型切换…