论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

news2024/11/17 16:13:59

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

Deformable DETR: 基于稀疏空间采样的注意力机制,让DCN与Transformer一起玩! - 知乎 (zhihu.com)

【Deformable DETR 论文+源码解读】Deformable Transformers for End-to-End Object Detection_deformable detr: deformable transformers for end-t-CSDN博客

HuKai97/detr-annotations: detr官方源码中文注释版! (github.com)

Abstract

最近提出了DETR,以消除对象检测中对许多手工设计组件的需求,同时表现出良好的性能。然而,由于Transformer注意力模块在处理图像特征 map 方面的局限性,它存在收敛慢和特征空间分辨率有限的问题。为了缓解这些问题,我们提出了Deformable DETR,其注意力模块只关注参考周围的一小组关键采样点。Deformable DETR可以在训练时间减少10倍的情况下实现比DETR更好的性能(尤其是在小物体上)。对COCO基准的广泛实验证明了我们方法的有效性。代码发布于github.com/fundamentalvision/Deformable-DETR

image-20240728214512431

3 Revisiting Transformers and DETR

Multi-Head Attention in Transformers Transformers(瓦斯瓦尼等人,2017)是基于机器翻译注意力机制的网络架构。给定 query 元素(例如,输出句子中的目标词)和一组 key 元素(例如,输入句子中的源词),多头注意力模块根据衡量query-key对兼容性的注意力权重自适应地聚集关键内容。为了使模型专注于来自不同表示子空间和不同位置的内容,不同注意力头的输出与可学习的权重进行线性聚合。令 q ∈ Ω q q\in \Omega_q qΩq 索引具有表示特征 z q ∈ R C z_q\in \mathbb{R}^C zqRC 的 query 元素, k ∈ Ω k k\in \Omega_k kΩk 索引具有表示特征 x k ∈ R C x_k\in \mathbb{R}^C xkRC 的 key 元素,其中 C C C 是特征维度, Ω q \Omega_q Ωq Ω k \Omega_k Ωk 分别指定查询和关键元素的集合。然后计算多头注意力特征:
MultiHeadAttn ( z q , x ) = ∑ m = 1 M W m [ ∑ k ∈ Ω k A m q k ⋅ W m ′ x k ] \text{MultiHeadAttn}(\boldsymbol{z}_q,\boldsymbol{x})=\sum_{m=1}^M\boldsymbol{W}_m{\left[\sum_{k\in\Omega_k}A_{mqk}\cdot\boldsymbol{W}_m^{\prime}\boldsymbol{x}_k\right]} MultiHeadAttn(zq,x)=m=1MWm[kΩkAmqkWmxk]
其中 m m m 索引注意力头, W m ′ ∈ R C v × C W_m^{\prime}\in\mathbb{R}^{C_v\times C} WmRCv×C W m ∈ R C × C v W_m\in\mathbb{R}^{C\times C_v} WmRC×Cv 具有可学习的权重(默认情况下 C v = C / M C_v = C/M Cv=C/M)。注意力权重 A m q k ∝ exp ⁡ { z q T U m T V m x k C v } A_{mqk}\propto\exp\{\frac{\boldsymbol{z}_q^T\boldsymbol{U}_m^T\boldsymbol{V}_m\boldsymbol{x}_k}{\sqrt{C_v}}\} Amqkexp{Cv zqTUmTVmxk} 被标准化为 ∑ k ∈ Ω k A m q k = 1 \sum_{k\in\Omega_k}A_{mqk} = 1 kΩkAmqk=1,其中 U m , V m ∈ R C v × C U_m,V_m\in\mathbb{R}^{C_v\times C} Um,VmRCv×C也是可学习的权重。为了消除不同的空间位置的歧义,表示特 z q z_q zq x k x_k xk 通常是元素内容和位置嵌入的级联/总和。

Transformer 有两个已知问题。一是 transformer 在融合之前需要很长的训练时间表。假设 query 和 key 元素的数量分别为 N q N_q Nq N k N_k Nk。通常,通过适当的参数初始化, U m z q U_mz_q Umzq V m x k V_mx_k Vmxk 遵循均值为0、方差为1的分布,这使得当 N k N_k Nk 较大时,注意力权重 A m q k ≈ 1 N k A_{mqk}\approx\frac1{N_k} AmqkNk1。这将导致输入特征的渐变不明确。因此,需要较长的训练时间表,以便注意力权重可以专注于特定的key。在图像域中,key 元素通常是图像像素, N k N_k Nk 可能非常大,并且收敛是冗长的。

另一方面,多头注意力的计算和存储复杂性可能非常高,并且有大量的 query 和 key 元素。式子1的计算复杂性是 O ( N q C 2 + N k C 2 + N q N k C ) O(N_qC^2+N_kC^2+N_qN_kC) O(NqC2+NkC2+NqNkC)。在图像域中,query 和 key 元素都是像素, N q = N k ≫ C N_{q}={N}_{k}\gg C Nq=NkC,复杂性由第三项主导,即 O ( N q N k C ) O(N_qN_kC) O(NqNkC)。因此,多头注意力模块随着特征地图大小而遭受二次复杂性增长的影响。

DETR DETR(Carion等人,2020)构建在Transformer编码器-解码器架构之上,结合了基于集合的匈牙利损失,通过双方匹配强制对每个 GT 边界框进行独特的预测。我们简要回顾网络架构如下。

给定CNN主干提取的输入特征地图 x ∈ R C × H × W x\in\mathbb{R}^{C\times H\times W} xRC×H×W(例如,ResNet(He等人,2016)),DETR利用标准的Transformer编码器-解码器架构将输入特征映射转换为一组对象查询的特征。在对象查询特征(由解码器产生)顶部添加3层前向神经网络(FFN)和线性投影作为检测头。FFN充当回归分支来预测边界框坐标 b ∈ [ 0 , 1 ] 4 b\in[0,1]^4 b[0,1]4,其中 b = { b x , b y , b w , b h } \boldsymbol{b}=\{b_x,b_y,b_w,b_h\} b={bx,by,bw,bh} 编码标准化框中心坐标、框高度和宽度(相对于图像大小)。线性投影作为分类分支来产生分类结果。

对于DETR中的Transformer编码器,query 和 key 元素都是特征地图中的像素。输入是ResNet特征地图(具有编码的位置嵌入)。令 $ H$ 和 W W W 分别表示特征地图的高度和宽度。自我注意力的计算复杂度为 O ( H 2 W 2 C ) O(H^2W^2C) O(H2W2C),随着空间大小的二次增长。

对于DETR中的Transformer解码器,输入包括来自编码器的特征图,以及由可学习的位置嵌入表示的 N N N 个对象查询(例如, N = 100 N = 100 N=100 )。解码器中有两种类型的注意力模块,即交叉注意力模块和自我注意力模块。在交叉注意模块中,对象查询从特征地图中提取特征。查询元素是对象查询,key 元素是编码器的输出特征图。其中, N q = N N_q = N Nq=N N k = H × W N_k = H \times W Nk=H×W,交叉注意的复杂度为 O ( H W C 2 + N H W C ) O(HW C^2 + N HW C) O(HWC2+NHWC)。复杂性随着特征地图的空间大小而线性增长。在自我注意模块中,对象查询相互交互,以捕捉它们的关系。query和 key 元素都是对象查询。其中 N q = N k = N N_q = N_k = N Nq=Nk=N,自我注意模块的复杂度为 O ( 2 N C 2 + N 2 C ) O(2NC^2 + N^2C) O(2NC2+N2C)。对于中等数量的对象查询,复杂性是可以接受的。

DETR是一种有吸引力的目标检测设计,它消除了对许多手动设计组件的需要。然而,它也有自己的问题。这些问题主要可归因于Transformer在将图像特征图作为关键元素处理时的注意力不足:

(1)DETR在检测小目标方面的性能相对较低。现代物体探测器使用高分辨率特征图来更好地检测小物体。然而,高分辨率的特征映射会给DETR的Transformer编码器中的自我注意模块带来不可接受的复杂性,其复杂度是输入特征映射空间大小的平方。

(2)与现代目标检测器相比,DETR需要更多的训练周期才能收敛。这主要是因为处理图像特征的注意模块很难训练。例如,在初始化时,交叉注意模块对整个特征图的注意力几乎是平均的。然而,在训练结束时,注意图被学习到非常稀疏,只专注于物体的末端。看来,DETR需要很长的训练计划才能学习到注意图中的如此重大变化。

4 Method

4.1 Deformable Transformers for End-to-End Object Detection

Deformable Attention Module 将Transformer注意力应用于图像特征地图的核心问题是它将查看所有可能的空间位置。为了解决这个问题,我们提出了一个可变形的注意力模块。受可变形卷积的启发(Dai等人,2017年;朱等人,2019 b),可变形注意力模块仅关注参考点周围的一小组关键采样点,而无论特征地图的空间大小如何,如图2所示。通过为每个 query 仅分配少量固定数量的 key,可以缓解收敛和特征空间分辨率的问题。

给定输入特征地图 x ∈ R C × H × W x\in\mathbb{R}^{C\times H\times W} xRC×H×W,让 q q q 索引具有内容特征 z q z_q zq和2-D参考点 p q p_q pq 的查询元素,可变形注意力特征计算如下:
DeformAttn ⁡ ( z q , p q , x ) = ∑ m = 1 M W m [ ∑ k = 1 K A m q k ⋅ W m ′ x ( p q + Δ p m q k ) ] \operatorname{DeformAttn}(\boldsymbol{z}_q,\boldsymbol{p}_q,\boldsymbol{x})=\sum_{m=1}^M\boldsymbol{W}_m[\sum_{k=1}^KA_{mqk}\cdot\boldsymbol{W}_m^{\prime}\boldsymbol{x}(\boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk})] DeformAttn(zq,pq,x)=m=1MWm[k=1KAmqkWmx(pq+Δpmqk)]
其中 m m m 对注意力头进行索引, k k k 对采样的key进行索引, K K K 是总采样的 key 数( K ≪ H W K\ll HW KHW)。 Δ p m q k \Delta p_{mqk} Δpmqk 和 $ A_{mqk}$ 分别表示第 m m m 个注意力头中第 k k k 个采样点的采样偏差和关注权重。纯量注意力权重 A m q k A_{mqk} Amqk 位于 [ 0 , 1 ] [0,1] [0,1] 范围内,通过 ∑ k = 1 K A m q k = 1 \sum_{k=1}^KA_{mqk} = 1 k=1KAmqk=1 进行标准化。 Δ p m q k ∈ R 2 \Delta\boldsymbol{p}_{mqk}\in\mathbb{R}^2 ΔpmqkR2 是范围无约束的2-d实数。由于 p q + Δ p m q k p_q+\Delta p_{mqk} pq+Δpmqk 是小数,因此在计算 x ( p q + Δ p m q k ) {\boldsymbol{x}(\boldsymbol{p}_q+\Delta\boldsymbol{p}_{mqk})} x(pq+Δpmqk) 时应用双线性插值,如Dai等人(2017)所述。 Δ p m q k \Delta p_{mqk} Δpmqk A m q k A_{mqk} Amqk 都是通过 query 特征 z q z_q zq 上的线性投影获得的。在实现中,查询特征 z q z_q zq 被提供给 3 M K 3 M K 3MK个通道的线性投影运算符,其中前 2 M K 2 MK 2MK 个通道对采样偏差 Δ p m q k \Delta p_{mqk} Δpmqk进行编码,其余 M K MK MK 个通道被提供给softmax运算符以获得关注权重 A m q k A_{mqk} Amqk

可变形注意力模块旨在将卷积特征图作为关键元素进行处理。设 N q N_q Nq 为查询元素的数量,当 M K MK MK 相对小时,可变形注意力模块的复杂度为 O ( 2 N q C 2 + min ⁡ ( H W C 2 , N q K C 2 ) ) O(2N_{q}C^{2}+\operatorname*{min}(HWC^{2},N_{q}KC^{2})) O(2NqC2+min(HWC2,NqKC2))(详情见附录A.1)。当将其应用于DETR编码器时,其中 N q = H W N_q = HW Nq=HW ,复杂度变为 O ( H W C 2 ) O(HWC^{2}) O(HWC2),其与空间大小呈线性复杂度。当它作为DETR解码器中的交叉注意模块应用时,其中 N q = N N_q = N Nq=N N N N 是对象查询的数量),复杂性变为 O ( N K C 2 ) O(N KC^2) O(NKC2),这与空间大小 H W HW HW 无关。

Multi-scale Deformable Attention Module 大多数现代物体检测框架都受益于多尺度特征地图(Liu等人,2020年)。我们提出的可变形注意力模块可以自然扩展用于多尺度特征地图。

{ x l } l = 1 L \{x^l\}_{l=1}^L {xl}l=1L 是输入的多尺度特征地图,其中 x l ∈ R C × H l × W l x^l\in\mathbb{R}^{C\times H_l\times W_l} xlRC×Hl×Wl。令 p ^ q ∈ [ 0 , 1 ] 2 \hat{p}_q\in[0,1]^2 p^q[0,1]2 是每个查询元素 q q q 的参考点的规范化坐标,那么多尺度可变形注意力模块应用为
M S D e f o r m A t t n ( z q , p ^ q , { x l } l = 1 L ) = ∑ m = 1 M W m [ ∑ l = 1 L ∑ k = 1 K A m l q k ⋅ W m ′ x l ( ϕ l ( p ^ q ) + Δ p m l q k ) ] \mathrm{MSDeformAttn}(\boldsymbol{z}_q,\hat{\boldsymbol{p}}_q,\{x^l\}_{l=1}^L)=\sum_{m=1}^M\boldsymbol{W}_m[\sum_{l=1}^L\sum_{k=1}^KA_{mlqk}\cdot\boldsymbol{W}_m^{\prime}\boldsymbol{x}^l(\phi_l(\hat{\boldsymbol{p}}_q)+\Delta\boldsymbol{p}_{mlqk})] MSDeformAttn(zq,p^q,{xl}l=1L)=m=1MWm[l=1Lk=1KAmlqkWmxl(ϕl(p^q)+Δpmlqk)]
其中 m m m 对注意力头进行索引, l l l 对输入特征级别进行索引, k k k 对采样点进行索引。 Δ p m l q k \Delta p_{mlqk} Δpmlqk A m l q k A_{mlqk} Amlqk 分别表示第 l l l 个特征级别中第 k k k 个采样点和第 m m m 个注意力头的采样偏差和注意力权重。纯量注意力权重 A m l q k A_{mlqk} Amlqk 通过 ∑ l = 1 L ∑ k = 1 K A m l q k \sum_{l=1}^L\sum_{k=1}^KA_{mlqk} l=1Lk=1KAmlqk 进行标准化。这里,为了清晰度公式,我们使用规格化坐标 p ^ q ∈ [ 0 , 1 ] 2 \hat{\boldsymbol{p}}_q\in[0,1]^2 p^q[0,1]2,其中规格化坐标 ( 0 , 0 ) (0,0) (0,0) ( 1 , 1 ) (1,1) (1,1) 分别指示左上角和右下角图像角。等式3中的函数 ϕ l ( p ^ q ) \phi_l(\hat{\boldsymbol{p}}_q) ϕl(p^q) 将规格化坐标 p ^ q \hat{\boldsymbol{p}}_q p^q 重新缩放到第 l l l 层的输入特征地图。多尺度可变形注意力与之前的单尺度版本非常相似,只是它从多尺度特征地图中采样 L K LK LK 点,而不是从单尺度特征地图中采样 K K K 点。

提出的注意力模块将退化为可变形卷积(Dai等人,2017),当 L = 1 L = 1 L=1 K = 1 K = 1 K=1,并且 W m ′ ∈ R C v × C \boldsymbol{W}_m^{\prime} \in \mathbb{R}^{C_v\times C} WmRCv×C 被固定为单位矩阵时。可变形卷积专为单尺度输入而设计,仅关注每个注意头的一个采样点。然而,我们的多尺度可变形注意力会从多尺度输入中查看多个采样点。提出的(多尺度)可变形注意力模块也可以被视为 Transformer注意力的有效变体,其中可变形采样位置引入预过滤机制。当采样点穿过所有可能的位置时,建议的注意力模块相当于Transformer注意力。

Deformable Transformer Encoder 我们将DETR中处理特征映射的 Transformer 注意模块替换为所提出的多尺度可变形注意模块。编码器的输入和输出都是具有相同分辨率的多尺度特征地图。在编码器中,我们从ResNet(He 等人,2016年) C 3 C_3 C3 C 5 C_5 C5 阶段的输出特征图(经 1 × 1 1\times 1 1×1 卷积变换)提取多尺度特征图 { x l } l = 1 L − 1 ( L = 4 ) \{\boldsymbol{x}^{l}\}_{l=1}^{L-1} (L=4) {xl}l=1L1(L=4),其中 C l C_l Cl 的分辨率比输入图像低 2 l 2^l 2l 。最低分辨率特征图 $ x^L$ 是在最后的 C 5 C_5 C5 级上通过 3 × 3 3×3 3×3 步长 2 2 2 卷积获得的,记为 C 6 C_6 C6。所有的多比例特征地图都是 C = 256 C=256 C=256 通道。注意,FPN(Lin等人,2017a)中的自上而下结构没有使用,因为我们提出的多尺度可变形注意本身可以在多尺度特征地图之间交换信息。多比例尺要素地图的构建也在附录A.2中进行了说明。第5.2节中的实验表明,添加FPN不会提高性能。

在编码器中应用多尺度可变形注意力模块时,输出是与输入具有相同分辨率的多尺度特征地图。关键元素和查询元素都是来自多比例特征地图的像素。对于每个查询像素,参考点就是其本身。为了识别每个查询像素位于哪个特征级别,除了位置嵌入之外,我们还向特征表示添加了标度级别嵌入(表示为 e l \boldsymbol{e}_l el )。与固定编码的位置嵌入不同,尺度级嵌入 { e l } l = 1 L \{\boldsymbol{e}_l\}_{l=1}^L {el}l=1L 是随机初始化并与网络联合训练的。

Deformable Transformer Decoder 解码器中有交叉注意和自我注意模块。两种类型的注意模块的查询元素都是对象查询。在交叉注意模块中,对象查询从特征地图中提取特征,其中关键元素是编码器输出的特征地图。在自我注意模块中,客体查询相互作用,其中关键要素是客体查询。由于我们提出的可变形注意模块是为处理卷积特征映射而设计的,所以我们只将每个交叉注意模块替换为多尺度可变形注意模块,而保持自我注意模块不变。对于每个对象查询,从其对象查询嵌入的参考点 p ^ q \hat{p}_q p^q 的2-D归一化坐标经由后面跟随Sigmoid函数的可学习线性投影来预测。

由于多尺度可变形注意模块提取参考点周围的图像特征,因此我们让检测头预测边界框为相对偏移量w.r.t。该参考点进一步降低了优化的难度。参考点被用作长方体中心的初始猜测。检测头预测相对偏移量W.r.t。参照点。有关详细信息,请查看附录A.3。这样,学习到的解码者注意力将与预测的包围盒具有很强的相关性,这也加速了训练收敛。通过用DETR中的可变形注意模块替换变压器注意模块,我们建立了一种高效、快速的收敛检测系统,称为可变形DETR(见图1)。

image-20240728211945617

4.2 Additional Improvements and Variants for Deformable DETR

由于其快速收敛以及计算和存储效率,可变形DETR为我们利用端到端物体检测器的各种变体开辟了可能性。由于篇幅有限,我们在这里仅介绍这些改进和变体的核心思想。实施详情见附录A.4。

迭代边界框优化。这是受到光流估计(Teed&Den,2020)中发展的迭代精化的启发。为了提高检测性能,我们建立了一种简单有效的迭代包围盒求精机制。这里,每个解码层基于来自前一层的预测来细化边界框。

两级可变形DETR。在原始的DETR中,解码器中的对象查询与当前图像无关。受两阶段目标检测器的启发,我们探索了一种变形DETR的变体,作为第一阶段,用于生成区域建议。生成的区域建议将作为对象查询送入解码器进行进一步细化,形成一个两级可变形的DETR。

在第一阶段,为了实现高召回率,多尺度特征地图中的每个像素都将作为对象查询。然而,直接将对象查询设置为像素会给解码器中的自我注意模块带来不可接受的计算和存储开销,其复杂度随着查询次数的增加而呈二次曲线增长。为了避免这个问题,我们去掉了解码器,形成了一个只有编码器的可变形DETR来生成区域方案。在该方法中,每个像素被指定为一个对象查询,该查询直接预测一个边界框。得分最高的边界框被选为区域提案。在将区域建议提交到第二阶段之前,不应用NMS。

5 Experiment

数据集。我们对COCO 2017数据集进行实验(林等人,2014年)。我们的模型在训练集上训练,并在val集和test-dev集上进行评估。

实施细节。ImageNet(邓等人,2009年)预先训练的ResNet-50(何 等人,2016年)被用作消融的主干。多比例特征地图的提取没有FPN(Lin等人,2007a)。默认情况下,为可变形关注设置 M = 8 M=8 M=8 K = 4 K=4 K=4 。可变形变压器编码器的参数在不同的特征级别之间共享。其他超参数设置和训练策略主要遵循DETR(Carion等人,2020),除了将损失权重为2的焦点损失(Lin等人,2007b)用于边界框分类,以及对象查询数量从100增加到300。我们还报告了具有这些修改的DETR-DC5的性能,以进行公平的比较,表示为DETR-DC5+。默认情况下,模型训练50个时期,学习速率在40个时期衰减0.1倍。在DETR(Carion等人,2020年)之后,我们使用Adam优化器(Kingma&BA,2015年)训练我们的模型,基本学习率为2×10−4,β1=0.9,β2=0.999,权重衰减为10−4。用于预测对象查询参考点和采样偏移量的线性投影的学习率乘以0.1倍。运行时间在NVIDIA Tesla V100图形处理器上进行了评估。

5.1 Comparison with DETR

如表1所示,与更快的R-CNN + FPN相比,DETR需要更多的训练时期才能收敛,并且在检测小对象时的性能较低。与DETR相比,可变形DETR以减少10倍的训练周期实现了更好的性能(尤其是在小对象上)。详细的收敛曲线如图3所示。借助迭代边界盒细化和两阶段范式,我们的方法可以进一步提高检测准确性。我们提出的可变形DETR具有与更快的R-CNN + FPN和DETR-DC 5同等的FLOP。但运行时速度比DETR-DC 5快得多(1.6倍),仅比Faster R-CNN + FPN慢25%。DETR-DC 5的速度问题主要是由于Transformer注意力中的大量内存访问造成的。我们提出的可变形注意力可以缓解这个问题,但代价是无序存储器访问。因此,它仍然比传统卷积稍微慢一些。

image-20240728213250685

image-20240728213302048

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

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

相关文章

Linux嵌入书学习—数据结构——栈(seqstak)

一、栈; 定义: 是限定仅在表尾(栈顶)进行插入和删除操作的线性表 栈又称为 后进先出(Last In First Out) 的线性表,简称 LIFO 结构 栈顶(Top) 栈顶是栈中允许进行添加&…

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式: 基于Session Cookie的登录基于JWT的登录:登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

【 C++ 】 类和对象的学习

前言: 😘我的主页:OMGmyhair-CSDN博客 目录 引言: 一、类的作用域 二、计算类对象的大小 三、this指针 this指针❓1 this指针❓2 this指针❓3 引言: 通过类我们可以对数据和方法进行封装 封装的意义&#xf…

【Android】实现一个优雅的自定义底部导航栏(速通安卓大作业必备)

文章目录 前言一、实现思路二、代码实现流程①修改theme:②在color文件中添加颜色:③添加图标文件④添加选中时布局的背景⑤修改布局文件⑥按钮效果图:⑦修改MainActivity中的代码⑦创建各个界面的Fragment⑧运行结果: 三、 总结 …

【学术会议征稿】第五届人工智能与教育国际学术会议(ICAIE 2024)

第五届人工智能与教育国际学术会议(ICAIE 2024) 2024 5th International Conference on Artificial Intelligence and Education 第五届人工智能与教育国际学术会议(ICAIE 2024)由集美大学诚毅学院主办,闽南师范大学…

福昕PDF编辑器v13专业版 授权版

福昕高级PDF编辑器是一款功能强大的PDF文件编辑软件,提供多种实用的编辑功能。 软件截图: 使用说明: 解压后,双击start.bat来运行软件 下载地址:FoxitPDFEditor-Pro-v13 解压密码:helloh 下载时可能会有…

动手学大模型应用开发笔记--用dash开发一个大模型知识库

简介 动手学,把自己学到的东西动手自己做出来并输出,是最好的学习方式。最近一直在关注和使用各种ai工具,也在学一些ai开发的知识,看到datawhale的开源学习教程,动手学大模型开发( [github.com/datawhalech…])这个教…

高频面试题基本总结回顾(含笔试高频算法整理)暂存篇

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

dockerfile部署镜像 ->push仓库 ->虚拟机安装建木 ->自动部署化 (详细步骤)

目录 创建私服仓库 vi /etc/docker/daemon.json vim deploy.sh判断脚本内容 创建 建木 后端部署 命名空间 设置密码用户名 创建git仓库 gitignore文件内容 图形项目操作 git maven docker镜像 点击流程日志 vim /etc/docker/daemon.json 执行部署脚本 ip 开发…

代码性能优化(3)——聊聊多线程

代码的性能优化,有些是从逻辑层面进行的,比如同时对50W个人发放奖励,可以改成用户登录的时候,自动领取有没奖励,或者统计每日的每个业务员的销售额和实时累积的销售额,将实时sum函数改成,每一笔…

24种设计模式介绍与6大设计原则(电子版教程)

前言 您是一个初级的 coder,可以从中领会到怎么设计一段优秀的代码;您是一个高级程序员,可以从中全面了解到设计模式以及 Java 的边角技术的使用;您是一个顶级的系统分析师,可以从中获得共鸣,寻找到项目公共问题的解决…

StarRock3.3 安装部署

服务器前置要求: 1、内存>32GB 2、JDK 8 is not supported, please use JDK 11 or 17 1、安装 wget https://releases.starrocks.io/starrocks/StarRocks-3.3.0.tar.gz tar zxvf StarRocks-3.3.0.tar.gz 2、FE服务启动 2.1 配置FE节点(默认配置,…

dns和 openELB

DNS yum -y install bind允许其他的主机来监听,允许其他的主机来查询,改这两个地方就行了。 把需要解析的文件都添加进来,cp -p的意思是保留原来的权限控制 注意本地dns放在 DNS1 二、负载均衡 OpenELB Layer2 模式 BGP模式 OpenELB …

DBeaver使用SQL脚本编辑器

文章目录 1 新建脚本2 选择数据库3 编写脚本【按行执行】参考 1 新建脚本 2 选择数据库 3 编写脚本【按行执行】 光标放到需要执行的行上,点击【最上面的按钮】 或者选中某片代码,然后执行 也可以编写一个脚本然后执行 参考 dbeaver安装和使用教程 …

Linux文件恢复

很麻烦 一般还是小心最好 特别恢复的时候 可能不能选择某个文件夹去扫描恢复 所以 删除的时候 用rm -i代替rm 一定小心 以及 探索下linux的垃圾箱机制 注意 一定要恢复到不同文件夹 省的出问题 法1 系统自带工具 debugfs 但是好像不能重启? testdisk 1、安装 …

酒店智能门锁接口pro[0922]D801 对接收银-SAAS本地化-未来之窗行业应用跨平台架构

proUSB接口函数[0922中性版]-D801 调用函数库: 提供Windows下的32位动态连接库proRFL.DLL,函数使用详细说明 //-----------------------------------------------------------------------------------// 功能:读DLL版本,不涉…

【大数据】:hdfs相关进程启停管理命令

HADOOP_HOME/sbin/start-dfs.sh,一键启动HDFS集群 执行原理: 在执行此脚本的机器上,启动SecondaryNameNode 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,启动NameNode 读取wor…

AI变现:科技与商业化的交织

随着科技的飞速发展,人工智能(AI)已经从科幻电影中的概念走进了现实生活的各个领域,深刻影响着经济、社会与科技的发展。AI不仅代表着技术的革新,更是推动商业变现的重要力量。本文将深入剖析AI的发展历程,…

数据结构(5.3_5)——二叉树的线索化

第一种寻找中序前驱方法 中序线索化 本质上就是一次中序遍历,只不过需要在一边遍历一边处理结点线索化 代码: //全局变量pre 指向当前访问结点的前驱 ThreadNode* pre NULL;struct ElemType {int value; };//线索二叉树结点 typedef struct ThreadNode…

姜夔,师法自然的不仕道人

姜夔(ku),字尧章,号白石道人,约生于南宋绍兴二十四年(公元1154年),卒于南宋嘉定十四年(公元1221年),享年67岁。他的艺术成就涵盖了诗词、散文、书…