当前位置: 首页 > news >正文

【论文阅读笔记】Detecting Camouflaged Object in Frequency Domain

1.论文介绍

Detecting Camouflaged Object in Frequency Domain
基于频域的视频目标检测
2022年发表于CVPR
[Paper] [Code]

2.摘要

隐藏目标检测(COD)旨在识别完美嵌入其环境中的目标,在医学,艺术和农业等领域有各种下游应用。然而,以人眼的感知能力来识别遮挡的物体是一项极具挑战性的任务。因此,我们主张COD任务的目标不仅仅是在单个RGB域中模仿人类的视觉能力,而是超越人类的生物视觉。然后,我们引入频域作为一个额外的线索,以更好地检测从背景中隐藏的对象。为了更好地将频率线索纳入CNN模型,我们提出了一个具有两个特殊组件的强大网络。我们首先设计了一个新的频率增强模块(FEM),在频域中挖掘隐藏对象的线索。它包含离线离散余弦变换,然后是可学习的增强。然后,我们使用一个特征对齐融合的特征,从RGB域和频域。此外,为了进一步充分利用频率信息,我们提出了高阶关系模块(HOR)来处理丰富的融合特征。在三个广泛使用的COD数据集上的综合实验表明,该方法明显优于其他国家的最先进的方法的大幅度。

Keywords: 频域、频率增强、隐藏目标检测

3.Introduction

以前的尝试:纹理增强模块、注意力机制来引导模型关注隐藏区域、额外边缘信息、新的监督数据、将分割的对象视为两个阶段。

以前的SOTA COD方法都有一个共同的特点:它们只是通过复杂的技术来增强图像的RGB域信息。然而,根据生物学和心理学的研究动物捕食往往利用感知过滤器分离目标猎物与背景,动物比人类在处理视觉场景时有更多的波段,这使得人类视觉系统(HVS)很难发现隐藏的对象。本文提出COD任务的目标不仅仅是模仿人类在单一RGB域的视觉能力,而是超越人类的生物视觉。因此,为了更好地从背景中检测隐藏的对象,需要图像中的一些其他线索(例如,频域中的线索)。

隐藏对象检测(COD)任务是检测与其周围环境融合的隐藏对象。之前的工作:①首先粗略地搜索隐藏的对象,然后执行分割。②将实例分割和对抗性攻击用于COD的方法。③提出了一种基于图的模型,通过对多级关系的综合推理,同时执行隐藏对象检测和隐藏对象感知边缘提取。④考虑了隐藏对象和背景之间的细微纹理差异。

频域中的压缩表示包含用于图像理解任务的丰富模式。之前已经有从频域提取特征以分类图像和将空间域CNN模型转换到频域的算法。还有为了避免复杂的模型转换过程,使用SE-Block来选择频率信道。有人提出频道注意网络。尽管以前的方法在频域上取得了成就,但如何建模频域和RGB域之间的相互作用关系以进行密集预测几乎没有探索。

设计了频率增强模块,将频域感知线索引入CNN模型;特征对齐融合RGB信息与频域信息;设计了频率损失,直接限制在频率和引导网络更专注于频率信号;为了区分真实的隐藏对象,提出了高阶关系模块(由于目标和噪声对象总是共享相似的结构信息,低阶关系不足以获得区分特征)。

4.网络结构详解

在这里插入图片描述
上图是本文的网络结构图,主干采用Res2Net和ResNet50进行特征提取。首先RGB输入被转换到频域并由频率增强模块(FEM)增强。RGB和频率输入分别以RGB流和频率流的形式送入网络。特征对齐(FA)是用来融合这些功能,从RGB和频域。为了在特征中发现更多细微的差异以区分被隐藏的对象,在主网络中构建了高阶关系模块(HOR)。令 x r g b ∈ R H × W × 3 x_{rgb} ∈ R^{H×W×3} xrgbRH×W×3表示RGB输入,其中H,W是图像的高度和宽度。并且来自骨干的每一层的最后一个残差块的特征图可以被认为是{X1,X2,X3,X4}。那么所有这些特征图在跳过连接中被处理并且以自底向上的方式被解码。每个解码块由两个卷积层组成,后面是BN和ReLU。

FEM频率增强模块

在这里插入图片描述
FEM把RGB输入转换到频域并进行频率增强。FEM包含两个步骤:离线DCT(离散余弦变换)过程和神经网络在线增强。

离线离散余弦变换。也就是上图中的step1。首先处理输入的RGB图像,将 x r g b x^{rgb} xrgb变换到 Y C b C r YCbCr YCbCr空间(表示为 x y c b c r x^{ycbcr} xycbcr R H × W × 3 R^{H×W×3} RH×W×3)。然后,将 x y c b c r x^{ycbcr} xycbcr划分为一组8×8块(在图像的滑动窗口上密集地进行DCT是JPEG压缩等频率处理的常见操作),可以得到{ p i , j c p^c_{ i,j} pi,jc| 1 ≤ i,j ≤ H 8 \frac{H}{8} 8H }, p i , j c p^c_{ i,j} pi,jc R 8 × 8 R^{8×8} R8×8表示某个颜色通道的补丁。每片图像经离散余弦变换(DCT)处理后得到频谱 d i , j c d^c_{ i,j} di,jc R 8 × 8 R^{8×8} R8×8,其中每个值对应于某一频带的强度。为了将相同频率的所有分量分组到一个通道中,展开频谱并重新整形它们以形成新的输入(把三维变成一维),遵循补丁索引: x o f r e q = x i , j f r e q = f l a t t e n ( d i , j ) x^{freq}_o = x^{freq}_{i,j} = flatten(d_{i,j}) xofreq=xi,jfreq=flatten(di,j),其中 x o f r e q x^{freq}_o xofreq R H 8 × W 8 × 192 R^{\frac{H}{8} ×\frac{W}{8}×192} R8H×8W×192 d i , j d_{i,j} di,j R 8 × 8 × 3 R^{8×8×3} R8×8×3表示所有 d i , j c d^c_{i,j} di,jc的级联。通过这种方式,重新排列的信号,在一个补丁的锯齿状秩序和每个通道的 x o f r e q x^{freq}_o xofreq属于一个频带。因此,原始颜色输入被变换到频域。

索引中各值的含义: x o f r e q x^{freq}_o xofreq是三维数组,是频谱展开的最终结果。对于原始图像的每个8x8块,我们会得到一个大小为 192 的频谱展开结果。 x i , j f r e q x^{freq}_{i,j} xi,jfreq表示图像中位置为(i,j)的8x8块,经过频谱展开后的结果。 f l a t t e n ( d i , j ) flatten(d_{i,j}) flatten(di,j)表示图像中位置为(i,j)的8x8块的频谱,经过频谱展开成一维数组。

RGB与YCbCr都是颜色空间。
分离亮度和色度信息:YCbCr颜色空间将亮度信息(Y)与色度信息(Cb和Cr)分离开来。亮度表示图像的明亮度,而色度表示图像的颜色信息。这种分离使得在压缩和处理图像时更加方便,因为在某些情况下,我们可能更关心亮度而不是具体的颜色信息。
人眼感知: YCbCr 颜色空间更符合人眼的感知。人眼对亮度更为敏感,而对颜色的感知相对较弱。通过将图像分成亮度和色度,可以更好地利用有限的数据量来表示图像,尤其在视频压缩等应用中。
压缩和传输效率: 在许多应用中,如视频压缩、广播和存储,YCbCr 被广泛用于提高效率。由于人眼对亮度更敏感,可以对亮度信号进行更高的采样率,而对色度信号进行较低的采样率,从而减小数据量,提高压缩效率。
色彩子样: 在YCbCr中,色度信息被表示为差异信号(Cb和Cr),这种表示方式有助于色彩子样,即降低色彩信息的采样率,以减小数据量。
总的来说,RGB颜色空间更适合直观地表示颜色,而YCbCr颜色空间则更适合处理和传输图像,尤其是在需要考虑带宽和存储空间的情况下。

在线学习增强。即上图中的Step2。其中图像被映射到频域并由可学习模块增强,以发现隐藏在频率空间中的伪装对象的线索。在实际应用中,图像中的物体种类繁多,背景复杂,固定的离线DCT算法可能无法很好地处理这些问题。因此还需要一个适应性学习过程来适应复杂的场景。由于信息在JPEG压缩等预处理过程中会丢失。所以需要加强频率信号;因此,引入在线学习增强,以增加信号的适应性。从单个补丁内和补丁之间构建增强模块。

参考论文[Image Enhancement Using a Contrast Measure in the Compressed Domain],对压缩域进行直接增强,通过对DCT系数的处理来增强图像。基于对比度度量实现的,对比度度量定义为DCT矩阵的频带中的高频和低频内容的比率。

下面是论文里的内容:Image Enhancement Using a Contrast Measure in the Compressed Domain

JPEG图像压缩由编码器解码器构成。编码器中,图像被分成不重叠的8*8的块,然后对每个8 × 8块计算二维DCT。一旦获得DCT系数,就使用指定的量化表对它们进行量化。DCT系数的量化是一个有损过程,在这一步中,许多小系数(通常是高频)被量化为零。DCT矩阵的Z字形扫描之后的熵编码利用该属性来降低编码系数所需的比特率。在解码器中,压缩图像被解码,然后通过逐点乘以量化表和逆DCT变换进行解量化。设 x i , j {x_{i,j}} xi,j 为原始图像中的一个8 × 8块,其DCT变换为 d k , l {d_{k,l}} dk,l。2-DCT变换表示为在这里插入图片描述
k,l ∈{0~7},在这里插入图片描述
DCT逆变换为(3):
在这里插入图片描述
从上式中,可以看到每个 d k , l d_{k,l} dk,l 表示对应于第kl个波形的贡献,并且输出DCT块中的系数 d k , l d_{k,l} dk,l 分别按照水平和垂直空间维度中增加的空间频率的顺序从左到右和从上到下排列。DCT系数的空间频率特性提供了一种自然的方式来定义DCT域中的对比度度量。因此,可以将对比度度量定义为DCT矩阵的频带中的高频和低频内容的比率

频带的划分:8*8的块组成的二维DCT输出矩阵,可以把系数沿右上左下的对角可划分成15个频带,第n频带由具有的系数 n = k + l n=k+l n=k+l组成。定义的频带给出了近似于圆的菱形,因此选择近似相等的径向频率。因此,使用(3)通过仅保留一个频带而生成的图像块可以被认为是原始图像块的带通版本。随着频带数的增加,带通图像块的频率内容对应于更高的频率,因此,创建了原始的多尺度结构。我们的局部对比度度量定义在每个波段上,波段数大于0。第n波段的对比度定义为:
在这里插入图片描述
频谱带上的平均振幅:(5) 在这里插入图片描述

令原始块的对比度为 C = ( c 1 , c 2 . . . ) C=(c_1,c_2...) C=(c1,c2...),其中 c n c_n cn是对应于 E n E_n En的特定频带处的对比度,并且令增强块的对比度表示为 C ‾ = ( c ‾ 1 , c ‾ 2 . . . ) \overline{C}=(\overline{c}_1,\overline{c}_2...) C=(c1,c2...)。例如,如果希望针对所有频率均匀地增强对比度,则 c ‾ n = λ c n \overline{c}_n=λc_n cn=λcn
E ‾ n = λ H n E n , n ≥ 1 \overline{E}_n=λH_nE_n,n≥1 En=λHnEn,n1(9),其中 H n = ∑ t = 0 n − 1 E ‾ t ∑ t = 0 n − 1 E t H_n=\frac{\sum^{n-1}_{t=0}{\overline{E}_t}}{\sum^{n-1}_{t=0}{E_t}} Hn=t=0n1Ett=0n1Et(10);增强的DCT系数 d ‾ k , l \overline{d}_{k,l} dk,l d ‾ k , l = λ H k + l d k , l , k + l ≥ 1 \overline{d}_{k,l}=λH_{k+l}d_{k,l}, k+l≥1 dk,l=λHk+ldk,l,k+l1(11)
整个算法流程如下:
在这里插入图片描述
其实就是:1.先初始化;2.n++,计算 H n H_n Hn;3.计算 d k , l d_{k,l} dk,l;4.如果n<14,计算 E ‾ n \overline{E}_n En E n E_{n} En,否则算法完成;5.跳到第二步。
(不懂为什么不是n≤14)

首先按照上述方法增强局部频带中的系数。然后对信号进行下采样并将其划分为两部分,低频信号 x l f r e q x^{freq}_{l} xlfreq 和高信号 x h f r e q x^{freq}_{h} xhfreq R 96 × k 2 R^{96×k^2} R96×k2,其中k表示大小。为了增强相应频带中的信号,我们将它们分别馈送到两个多头自注意(MHSA)[Attention is all you need]中,并将它们的输出连接起来以恢复原始形状。然后,再用一个MHSA调和所有不同的频带,并且新形成的信号表示 x f f r e q x^{freq}_{f} xffreq。MHSA能够捕获输入特征中每个项目之间的丰富相关性。在这一点上,图像的不同频谱完全相互作用。对于DCT,图像块是相互独立的,上述过程只增强了单个图像块。为了帮助网络识别被隐藏对象的位置,还需要在补丁之间建立连接。因此,首先将 x f f r e q x^{freq}_{f} xffreq 整形为 x s f r e q x^{freq}_{s} xsfreq R k 2 × C R^{k^2 ×C} Rk2×C。然后,使用MHSA建模所有补丁之间的关系。最后,上采样并得到增强的频率信号 x f r e q x^{freq} xfreq x r g b x^{rgb} xrgb x f r e q x^{freq} xfreq 都被输入网络。

要素对齐

构建FA模块来融合RGB域和频域的特征,如下图所示,特征对齐是一个相互加强的过程。
在这里插入图片描述
频域信息对隐藏物体更有优势,RGB域信息具有更大的感受野可以补偿频率特征。由于前面的处理确保了 x r g b x^{rgb} xrgb x f r e q x^{freq} xfreq在空间上对齐,因此在这部分中只将频域与RGB域对齐。

由于CNN对低频信息更敏感,所以先用滤波器处理 x f r e q x^{freq} xfreq:二进制基滤波器 f b a s e f_{base} fbase覆盖高频段,添加三个可学习的滤波器 f i i = 1 3 {{f_i}^3_{i=1}} fii=13处理Y、Cb、Cr空间。滤波是频率响应和组合滤波器 f b a s e + σ ( f i ) f_{base} + σ(fi) fbase+σ(fi)之间的点积,其中 σ ( y ) = 1 − e x p ( − y ) 1 + e x p ( − y ) σ(y)= \frac{1−exp(−y)}{1+exp(−y)} σ(y)=1+exp(y)1exp(y)。对于输入频域特征 x f r e q x^{freq} xfreq,网络可以通过下式自动聚焦于最重要的频谱: X i f r e q = x i f r e q ⨀ [ f b a s e + σ ( f i ) ] X^{freq}_i = x^{freq}_i\bigodot[f_{base} + σ(f_i)] Xifreq=xifreq[fbase+σ(fi)],其中 ⨀ \bigodot 是逐元素乘积。最后,将它们重新组合在一起:
X f r e q = C o n c a t ( [ X 1 f r e q , X 2 f r e q , X 3 f r e q ] ) X^{freq} = Concat([X^{freq}_1,X^{freq}_2,X^{freq }_3]) Xfreq=Concat([X1freq,X2freq,X3freq])

然后,分别从空间域和频率域计算两种信号的变换。由于 X i X_i Xi具有不同的大小,因此需要将 X f r e q X^{freq} Xfreq缩放到其相应的大小。连接 X i X_i Xi X f r e q X^{freq} Xfreq,然后将其馈送到具有4n个输出通道的Conv层,其输出为T。我们将 T j ∈ R H × W × n ( j = 1 , 2 , 3 , 4 ) T_j ∈ R^{H×W×n}(j = 1,2,3,4) TjRH×W×n(j=1,2,3,4)从第三维中取出,并将它们整形为 H W × n HW × n HW×n。因此,获得RGB域融合矩阵 T 1 ∈ R H W × H W T_1 ∈ R^{HW×HW} T1RHW×HW 和频域的融合矩阵 T 2 T_2 T2 T 1 = T 1 ( T 2 ) T , T 2 = T 3 ( T 4 ) T T_1 = T_1(T_2)^T,T_2 = T_3(T_4)^T T1=T1(T2)T,T2=T3(T4)T。其次,对齐特征图。乘以变换和学习向量 v ∈ R 1 × C v ∈ R^{1×C} vR1×C以调整每个通道的强度,每个通道的对齐特征:
在这里插入图片描述
最后,可以通过添加两个域特征来获得融合特征: X s i = X r b g 2 s i + X f r e q 2 s X^i_s = X^i_{rbg2s} + X_{freq 2s} Xsi=Xrbg2si+Xfreq2s。通过这种方式,可以利用区分频率信息来找到隐藏的对象,同时保持CNN线索,以确保对象的完整性和细节。\

频率预测损失:

引入了一种新的损失来约束网络:除了直接在RGB域中计算损耗外,还在频域中提供网络的监督。给定输入RGB图像x、对应的真实掩码M和预测掩码Y,定义损失:
在这里插入图片描述
其中,q是量化表,并且 ⊗ \otimes 表示元素级乘积。特别地,Y和M将首先被复制并扩展到与x相同的大小。

高阶频道选择

为了更好地区分被标记的物体和其他未被标记的物体,需要深入挖掘 X s i X^i_s Xsi中不同像素之间的关系。具体地说,真正的干扰和干扰对象可以从背景中分离出来,与频域信息的帮助。然而,真正的干扰对象和干扰对象通常具有极其相似的结构信息,并且频域线索很难区分细微的差异。一种直观的方法是引入注意机制(例如常用的自我注意模块[Non-local neural networks])来探索特征 X s i X^i_s Xsi内不同像素的关系,这可能有助于区分细微的差异。然而,常用的注意机制只能捕捉到低层次的关系,不足以发现这种细微的差异。因此,本文提出了一个高阶关系模块(HOR)来解决这个问题,以充分利用频率信号中的信息,如下图所示。
在这里插入图片描述

通过采用位置感知的门控操作来构造结构关系,从而为进一步的信道交互和判别谱选择提供高阶空间增强。设 X ∈ R C × H × W X ∈ R^{C×H×W} XRC×H×W表示输入特征,首先将其整形为 C × H W C×HW C×HW。由于频率响应来自局部区域,因此需要对具有位置重要性的原始特征进行编码,以将被捕获的对象与其他对象区分开。位置注意力权重可以表示为:
在这里插入图片描述
ψ(X)表示比X更后面的层,具有更大的感受野。因此,W用作注意力权重以找到跨不同层的RGB和频率响应相关性。然后,位置权重加强原始特征,并随后通过自适应选通操作来选择出现不同样本时最有用的特征:
在这里插入图片描述
其中 g ( W ) ∈ R H W g(W)∈ R^{HW} g(W)RHW表示由FC层生成的选通权重,并且它可以被认为是函数 G : R H W → R 1 G:R^{HW} → R^1 GRHWR1。门控操作是基于空间感知生成的,以形成位置感知特征。

在获得位置增强特征A之后,可以通过类似的操作来构建信道感知关系矩阵:
在这里插入图片描述
其中C表示位置感知特征的通道维度。通道感知关系中的每个张量具有对应于原始特征通道和频谱的语义和频率映射的相同C维。最后,将该关系矩阵应用于X,得到有利于伪装目标的选择信息 X o u t = r e s h a p e ( H X ) ∈ R H × W × C X_{out} = reshape(HX)∈ R^{H×W×C} Xout=reshape(HX)RH×W×C。然后将特征Xout馈送到解码过程中。

监督损失

如网络整体结构图中可见,令{D1,D2,D3,D4}表示从解码块的每一级提取的特征。在网络中的不同分辨率下进行四次预测{Pi}4 i=1,并且在每次FA之后从卷积层进行{Yi}4 i=1。每个Pi和Yi首先被重新缩放到输入图像大小。通过频率感知损失Lf在频域中监督网络。还在通用RGB域中提供监督,以确保细节。将联合收割机的加权BCE损失率和加权IoU损失率结合起来,以更多地关注牵引区域。损失函数定义为:
在这里插入图片描述

其中M表示真值标签,i表示网络的第i级。最后,总损失函数为:
在这里插入图片描述

5. 结果

在这里插入图片描述
在这里插入图片描述

相关文章:

【论文阅读笔记】Detecting Camouflaged Object in Frequency Domain

1.论文介绍 Detecting Camouflaged Object in Frequency Domain 基于频域的视频目标检测 2022年发表于CVPR [Paper] [Code] 2.摘要 隐藏目标检测&#xff08;COD&#xff09;旨在识别完美嵌入其环境中的目标&#xff0c;在医学&#xff0c;艺术和农业等领域有各种下游应用。…...

Mysql(5日志备份恢复)

一.日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data 先看下mysql的日志文件有无&#xff1a; 修改配置文件添加&#xff1a;错误日志&#xff0c;用来记录当MySQL启动、停止或运行时发生的错误信息&#xff0c;默认已开启 修改配置文件添加&#xff1a;通用查…...

MR实战:实现数据去重

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据文件1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、Map阶段实现&#xff08;1&#xff09;创建Maven项目&#xff08;2&#xff09;添加相关依赖…...

JVM 常用知识和面试题

1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区&#xff1b; 程序计数器&#xff1a;线程私有的&#xff0c;是一块很小的内存空间&#xff0c;作为当前线程的行号指示器&#xff0c;用于记录当前虚拟…...

【教3妹学编程-算法题】一年中的第几天

3妹&#xff1a;“太阳当空照&#xff0c;花儿对我笑&#xff0c;小鸟说早早早&#xff0c;你为什么背上炸药包” 2哥 :3妹&#xff0c;什么事呀这么开森。 3妹&#xff1a;2哥你看今天的天气多好啊&#xff0c;经过了一周多的寒潮&#xff0c;天气总算暖和些了。 2哥&#xff…...

ramdump 中的memory统计

0. 前言 ramdump是指某个时刻系统或者子系统发生crash等异常&#xff0c;系统将内存中的数据通过一定的方式保存下来&#xff0c;相当于一个系统内存快照&#xff0c;用以开发者离线分析系统异常问题。 ramdump 工具中有很多内存统计的脚本&#xff0c;本文逐一剖析内存相关的…...

Element-Ui树形数据懒加载,删除到最后一个空数组不刷新问题

使用elemenui树形删除数据的时候刷新页面&#xff0c;我在网上找了好多方法&#xff0c;要么没用&#xff0c;要么都是部分代码&#xff0c;自己又看不懂&#xff0c;不得不硬着头皮看源码&#xff0c;发现了有个方法可以刷新。 使用elemenui树形删除数据的时候刷新页面。源码里…...

基于NASM搭建一个能编译汇编语言的汇编软件工具环境(利用NotePad++)

文章目录 一、创建汇编语言源程序二、Notepad的下载、安装、使用三、下载和安装编译器NASM3.1 下载NASM编译器3.2 安装并配置环境变量 四、编译汇编语言源程序&#xff08;使用命令&#xff09;五、下载和使用配套源码及工具六、将编译功能集成到Notepad 一、创建汇编语言源程序…...

使用setoolkit制作钓鱼网站并结合dvwa靶场储存型XSS漏洞利用

setoolkit是一款kali自带的工具 使用命令启动 setoolkit 1) Social-Engineering Attacks 1&#xff09; 社会工程攻击 2) Penetration Testing (Fast-Track) 2&#xff09; 渗透测试&#xff08;快速通道&#xff09; 3) Third Party Module…...

计算机组成原理-总线概述

文章目录 总线简图总线的物理实现总览总线定义总线的特性总线的分类按数据格式分类串行总线并行总线 按总线功能分类注意系统总线的进一步分类 总线的结构单总线的机构双总线的结构三总线的结构四总线的结构 小结 总线简图 总线的物理实现 如果该为数据总线&#xff0c;那么当…...

三角函数两角和差公式推导

一.几何推理 1.两角和公式 做一斜边为1的直角△ABC,任意旋转非 k Π , k N kΠ,kN kΠ,kN,补充如图,令 ∠ A B C ∠ α &#xff0c; ∠ C B F ∠ β ∠ABC∠α&#xff0c;∠CBF∠β ∠ABC∠α&#xff0c;∠CBF∠β ∴ ∠ D B F ∠ D B A ∠ α ∠ β 90 , ∠ D A …...

HarmonyOS page生命周期函数讲解

下面 我们又要看一个比较重要的点了 页面生命周期 页面组件有三个生命周期 onPageShow 页面显示时触发 onPageHide 页面隐藏时触发 onBackPress 页面返回时触发 这里 我们准备两个组件 首先是 index.ets 参考代码如下 import router from ohos.router Entry Component struc…...

3D视觉-结构光测量-线结构光测量

概述 线结构光测量中&#xff0c;由激光器射出的激光光束透过柱面透镜扩束&#xff0c;再经过准直&#xff0c;产生一束片状光。这片光束像刀刃一样横切在待测物体表面&#xff0c;因此线结构光法又被成为光切法。线结构光测量常采用二维面阵 CCD 作为接受器件&#xff0c;因此…...

ssm基于web的马病管理系统设计与实现+jsp论文

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;马病信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广大…...

SaaS版Java基层健康卫生云HIS信息管理平台源码(springboot)

云his系统源码&#xff0c;系统采用主流成熟技术开发&#xff0c;B/S架构&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问&#xff0c;前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff0c;功能易扩展。多集团统一登录…...

redis,memcached,nginx网络组件,网络编程——reactor的应用

目录 目标网络编程关注的问题连接的建立连接的断开消息的到达消息发送完毕 网络 IO 职责检测 IO检测 io剖析 操作 IO 阻塞IO 和 非阻塞IOIO 多路复用epoll结构以及接口 reactor编程连接建立连接断开数据到达数据发送完毕 reactor 应用&#xff1a;后续补充源码解析单 reacrtor多…...

【机电、机器人方向会议征稿|不限专业|见刊快】2024年机械、 图像与机器人国际会议(IACMIR 2024)

【机电、机器人方向会议征稿|不限专业|见刊快】2024年机械、 图像与机器人国际会议&#xff08;IACMIR 2024&#xff09; 2024 International Academic Conference on Machinery, Images, and Robotics 会议将聚焦“机械、成像和机器人”相关的最新研究领域&#xff0c;为国内…...

uniapp学习之路

uniapp 学习之路 1. 下载HBuilderX2. 下载uView初始框架3. 开始学习1.更改页面背景色&#xff0c;渐变色 1. 下载HBuilderX https://www.dcloud.io/hbuilderx.html?ivk_sa1024320u2. 下载uView初始框架 https://ext.dcloud.net.cn/plugin?id15933. 开始学习 1.更改页面背景…...

移动开发新的风口?Harmony4.0鸿蒙应用开发基础+实践案例

前段时间鸿蒙4.0引发了很多讨论&#xff0c;不少业内人士认为&#xff0c;鸿蒙将与iOS、安卓鼎足而三了。 事实上&#xff0c;从如今手机操作系统竞赛中不难看出&#xff0c;安卓与iOS的形态、功能逐渐趋同化&#xff0c;两大系统互相取长补短&#xff0c;综合性能等差距越来越…...

QT上位机开发(倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 倒计时软件是生活中经常遇到的一种场景。比如运动跑步&#xff0c;比如学校考试&#xff0c;比如论文答辩等等&#xff0c;只要有时间限制规定的地…...

2023 楚慧杯 --- Crypto wp

文章目录 初赛so large e 决赛JIGE 初赛 so large e 题目&#xff1a; from Crypto.Util.number import * from Crypto.PublicKey import RSA from flag import flag import randomm bytes_to_long(flag)p getPrime(512) q getPrime(512) n p*q e random.getrandbits(1…...

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…...

Spring Cloud Gateway 常见过滤器的基本使用

目录 1. 过滤器的作用 2. Spring Cloud Gateway 过滤器的类型 2.1 内置过滤器 2.1.1 AddResponseHeader 2.1.2 AddRequestHeader 2.1.3 PrefixPath 2.1.4 RequestRateLimiter 2.1.5 Retry 2.2 自定义过滤器 1. 过滤器的作用 过滤器通常用于拦截、处理或修改数据流和事…...

maven依赖无法传递问题排查

一、背景 在A模块中引入B模块&#xff0c;C服务引入A模块但是B模块没有传递进来。 二、排查 使用mvn clean install -Dmaven.test.skiptrue查看打包日志信息&#xff0c;通过搜索A模块名称&#xff0c;出现如下警告信息&#xff1a; [WARING] The POM for A:jar:0.0.1-SNAP…...

JVM钩子

JVM钩子 简介 在Java应用程序中&#xff0c;可以通过注册关闭钩子&#xff08;Shutdown Hook&#xff09;函数来实现在JVM关闭时执行特定的代码。关闭钩子是一种用于在JVM关闭时执行清理任务的机制&#xff0c;它允许开发者在JVM关闭之前执行一些必要的清理工作&#xff0c;如…...

linux cat命令增加-f显示文件名功能

在使用cat命令配合grep批量搜索文件内容时&#xff0c;我仅仅能知道是否搜索到&#xff0c;不知道是在哪个文件里找到的。比如cat ./src/*.c | grep full_write,在src目录下的所有.c文件里找full_write,能匹配到所有的full_write&#xff0c;但是不知道它们分别在哪些文件里。于…...

linux更改登录shell

从bash修改成python 在/etc/passwd下可以更改用户登录bash 例 root:x:0:0:root:/root:/bin/bash //更改bin/bash为/bin/python&#xff0c;就可以用root登录python页面了从python修改成bash 方法一 重启页面按e进入内核编辑模式linux16这行后添加&#xff1a;init/bin/…...

【JS】报错:Uncaught TypeError: Cannot read properties of null (reading ‘classList‘)

错误展示 今天写js代码的时候遇到报错&#xff1a; 源代码&#xff1a; <ul class"slider-indicator"><li class"active"></li><li></li><li></li><li></li><li></li><li><…...

kali2.0安装VMware Tools 和自定义改变分辨率

kali2.0安装VMware Tools 和自定义改变分辨率 VMware Tools 简介&#xff1a;VMware Tools安装&#xff1a;自定义改变分辨率&#xff1a;xrandr命令修改分辨率&#xff1a; 前言&#xff1a; 因为kali2.0比较老 所以需要手动安装 WMware Tools 进行复制粘贴操作&#xff01; …...

redis中根据通配符删除key

redis中根据通配符删除key 我们是不是在redis中keys user:*可以获取所有key&#xff0c;但是 del user:*却不行这里我提供的命令主要是SCANSCAN 0 MATCH user:* COUNT 100使用lua保证原子性 SCAN参数描述 在示例中&#xff0c;COUNT 被设置为 100。这是一个防止一次性获取大…...

【HDFS联邦(2)】HDFS Router-based Federation官网解读:HDFSRouterFederation的架构、各组件基本原理

文章目录 一. 介绍二、HDFS Router-based Federation 架构1. 示例说明2. Router2.1. Federated interface2.2. Router heartbeat2.3. NameNode heartbeat2.4. Availability and fault toleranceInterfaces 3. Quota management4. State Store 三、部署 ing 本文主要参考官网&am…...

【头歌实训】Spark 完全分布式的安装和部署

文章目录 第1关&#xff1a; Standalone 分布式集群搭建任务描述相关知识课程视频Spark分布式安装模式示例集群信息配置免密登录准备Spark安装包配置环境变量修改 spark-env.sh 配置文件修改 slaves 文件分发安装包启动spark验证安装 编程要求测试说明答案代码报错问题基本过程…...

Leetcode—86.分隔链表【中等】

2023每日刷题&#xff08;六十九&#xff09; Leetcode—86.分隔链表 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* partition(struct ListNode* head, int x) {struct ListNode…...

淘宝/天猫商品API:实时数据获取与安全隐私保护的指南

一、引言 随着电子商务的快速发展&#xff0c;淘宝/天猫等电商平台已成为商家和消费者的重要交易场所。对于电商企业而言&#xff0c;实时掌握店铺商品的销售情况、库存状态等信息至关重要。然而&#xff0c;手动管理和更新商品信息既费时又费力。因此&#xff0c;淘宝/天猫提…...

使用 SSH 方式实现 Git 远程连接GitHub

git是目前世界上最先进的分布式版本控制系统&#xff0c;相比于SVN&#xff0c;分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在&#xff0c;也就是有没有联网都可以正常工作&#xff01;当有网络的时候&#xff0c;再把本地提交推送一下就完成了同步&…...

Centos7部署Keepalived+lvs服务

IP规划&#xff1a; 服务器IP地址主服务器20.0.0.22/24从服务器20.0.0.24/24Web-120.0.0.26/24Web-220.0.0.27/24 一、主服务器安装部署keepalivedlvs服务 1、调整/proc响应参数 关闭Linux内核的重定向参数&#xff0c;因为LVS负载服务器和两个页面服务器需要共用一个VIP地…...

12/31

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;用于密集预测的多路径视觉Transformer1、研究背景2、方法提出3、相关方法3.1、Vision Transformers for dense predictions3.2、C…...

python使用openpyxl为excel模版填充数据,生成多个Sheet页面

目标&#xff1a;希望根据一个给定的excel模版&#xff0c;生成多个Sheet页面&#xff0c;比如模版&#xff1a; 示例程序 import openpyxlexcel_workbook openpyxl.load_workbook("模版.xlsx") for _i in range(3): # 比如填充3个页面# 复制模版sheet页&#x…...

基于ssm的4S店预约保养系统开发+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…...

【Git】Git的基本操作

前言 Git是当前最主流的版本管理器&#xff0c;它可以控制电脑上的所有格式的文件。 它对于开发人员&#xff0c;可以管理项目中的源代码文档。&#xff08;可以记录不同提交的修改细节&#xff0c;并且任意跳转版本&#xff09; 本篇博客基于最近对Git的学习&#xff0c;简单介…...

【超图】SuperMap iClient3D for WebGL/WebGPU —— 数据集合并缓存如何控制对象样式

作者&#xff1a;taco 最近在支持的过程中&#xff0c;遇到了一个新问题&#xff01;之前研究功能的时候竟然没有想到。通常我们控制单个对象的显隐、颜色、偏移的参数都是根据对象所在的图层以及对象单独的id来算的。那么问题来了&#xff0c;合并后的图层。他怎么控制单个对象…...

intellij IDEA开发工具的使用(打开/关闭工程;删除类文件;修改类/包/模块/项目名称;导入/删除模块)

1&#xff0c;打开工程 打开IDEA&#xff0c;会看到如下界面 1栏目里是自己曾经打开过的project&#xff08;工程&#xff09;&#xff0c;直接点击就好。如果需要打开其他工程&#xff0c;则点击open&#xff0c;会出下以下界面。 选择需要加载的project&#xff08;工程&…...

抖音详情API:开发环境搭建与工具选择

随着短视频的流行&#xff0c;抖音已经成为了一个备受欢迎的社交媒体平台。对于开发人员而言&#xff0c;利用抖音详情API开发定制化的抖音应用具有巨大的潜力。本文将为你详细介绍开发抖音应用的开发环境搭建与工具选择&#xff0c;帮助你顺利地开始开发工作。 一、开发环境搭…...

IntelliJ IDEA [插件 MybatisX] mapper和xml间跳转

文章目录 1. 安装插件2. 如何使用3. 主要功能总结 MybatisX 是一款为 IntelliJ IDEA 提供支持的 MyBatis 开发插件 它通过提供丰富的功能集&#xff0c;大大简化了 MyBatis XML 文件的编写、映射关系的可视化查看以及 SQL 语句的调试等操作。本文将介绍如何安装、配置和使用 In…...

Havenask 分布式索引构建服务 --Build Service

Havenask 是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎&#xff0c;深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内几乎整个阿里的搜索业务。本文针对性介绍了 Havenask 分布式索引构建服务——Build Service&#xff0c;主打稳定、快速、易管理&#xff0c;是在线系…...

vscode软件安装步骤

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址&#xff0c;找到下载界面 链接如下&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑&#xff0c;各位小伙伴自己选择合适的版本&#xff0c;点击下载按钮…...

C语言中灵活多变的动态内存,malloc函数 free函数 calloc函数 realloc函数

文章目录 &#x1f680;前言&#x1f680;管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 &#x1f680;在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一…...

小细节处理

重载运算符&#xff1a;重载<运算符。 bool operator<(const Edge&s)const{return w<s.w;}...

【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…...

Python正则的匹配与替换

import re 查找时的注意事项&#xff0c;要查找的内容左右两边打出来&#xff0c;用真正的字符&#xff0c;不要用.*?&#xff0c;离查找内容远一点&#xff0c;再用.*? a /aksj<a>哈哈哈<a><p>拉阿鲁<p>\.askjp b re.findall(<a>(.*?)<…...