【MM24】【水下目标分割】Dual_SAM

news2024/9/23 9:31:24

论文:https://arxiv.org/abs/2404.04996

代码:https://github.com/Drchip61/Dual_SAM


点评

  1. 这篇文章介绍的改进SAM,面向海洋生物的分割。但是海洋图像易受噪声影响,论文中仅是通过一个gamma变换减弱了这种影响。双主干网络的参数量并没有提及,但我猜估计不小,但性能提升并不是很高,同时堆了不少料,属于力大砖飞的工作。

  2. 引言部分前三段都是一些老生常谈的问题,写作上的技巧并不是很高。

  3. 逻辑性较差,DFAM模块介绍的时候并没有说到感受野的问题,然后就说为了改善感受野,这里描述太唐突。当然论文中不止这一处。

  4. 这篇工作的作者和MDSAM这篇工作属于同一个作者。

  5. 总体感觉讲的通,效果涨点就顶会了?

摘要

作为水下智能的重要支柱,海洋动物分割(MAS)涉及对海洋环境中的动物进行分割。以前的方法在提取长距离上下文特征方面表现不佳,并且忽略了离散像素之间的连通性。最近,Segment Anything Model (SAM) 为一般分割任务提供了一个通用框架。遗憾的是,SAM 是用自然图像进行训练的,无法从海洋图像中获得先验知识。此外,SAM 的单一位置提示对于事前指导非常不足。为了解决这些问题,我们提出了一种新的特征学习框架,称为 Dual-SAM,用于高性能 MAS。为此,我们首先引入与 SAM 范式的对偶结构来增强海洋图像的特征学习。然后,我们提出了一种多级耦合提示 (MCP) 策略来指导全面的水下先验信息,并使用适配器增强 SAM 编码器的多级特征。随后,我们设计了一个扩张融合注意力模块 (DFAM),以逐步整合来自 SAM 编码器的多层级特征。最后,我们提出了一种交叉连接预测 (C3P) 范式来捕捉离散像素之间的互连性,而不是直接预测海洋动物的面具。它使用双解码器生成伪标签并实现互补特征表示的相互监督,从而比以前的技术有了显着的改进。大量实验验证了我们提出的方法在五个广泛使用的 MAS 数据集上实现了最佳性能。代码可在https://github.com/Drchip61/Dual SAM获取。

摘要

水下生态系统包含各种各样的海洋生物,从微小的浮游生物到巨大的鲸鱼。这些生态系统对地球的环境平衡起着至关重要的作用。准确而有效的海洋动物分割 (MAS) 对于了解水下世界中物种的分布、行为和相互作用至关重要。然而,与传统的陆地图像不同,水下图像包括变化的光照条件、水的浑浊度、颜色失真以及相机和拍摄对象的移动。传统的分割技术主要为陆地环境开发,在应用于水下领域时往往不尽如人意。因此,迫切需要设计出能够解决海洋环境独特方面问题的方法。

随着深度学习的出现,卷积神经网络(CNN)引领了图像分割的新时代。事实上,CNN 表现出了提取复杂特征的卓越能力,这使得它们适合海洋动物分割。尽管如此,CNN 在捕捉图像中的长距离依赖关系和上下文信息方面存在固有的局限性。最近,Transformers 在捕捉复杂图像的长距离特征方面表现出了更高的性能。这种能力对于水下图像分割尤其有吸引力,因为在水下图像分割中,上下文信息对于从背景中辨别海洋生物通常至关重要。

然而,Transformers 面临的一个重大挑战是需要大量的训练数据。在此基础上,Segment Anything 模型 (SAM) 利用 10 亿张自然图像进行模型训练。然而,由于 SAM 的预训练主要在自然光条件下进行,因此其在海洋环境中的表现并不理想。此外,SAM 解码器的简单性限制了其捕捉海洋生物复杂细节的能力。此外,SAM 引入了外部提示来指导对象先验。然而,单一位置的提示对于先验指导来说是远远不够的。

为了克服上述问题,本文提出了一种新颖的特征学习框架,称为 DualSAM,用于高性能 MAS。图 1 展示了我们的灵感和优势。

541c8ef6f65d731d46a32658308d45e6.png从技术上讲,我们首先引入了 SAM 范式的对偶结构,以通过伽马校正操作增强海洋图像的特征学习。同时,我们使用适配器增强了 SAM 编码器的多层特征。然后,我们提出了一种多级耦合提示 (MCP) 策略,以自动提示来指导全面的水下先验信息。随后,我们设计了一个扩张融合注意模块 (DFAM) 来逐步整合来自 SAM 编码器的多层特征。最后,我们提出了一种交叉连接预测 (C3P) 范式来捕捉离散像素之间的互连性,而不是直接预测海洋动物的面具。通过双解码器,它可以生成伪标签并实现互补特征表示的相互监督。所提出的矢量化表示法比以前的标量预测技术有显著的改进。大量实验表明,我们提出的方法在五个广泛使用的 MAS 数据集上实现了最佳性能。

总而言之,我们的贡献如下:

  • 我们提出了一种新颖的特征学习框架,称为 Dual-SAM 用于海洋动物分割 (MAS)。该框架继承了 SAM 的能力,并自适应地融入了水下场景的先验知识。

  • 我们提出了一种多层次耦合提示 (MCP) 策略,以自动提示来指导全面的水下先验信息。

  • 我们提出了一种扩张融合注意力模块(DFAM)和一个交叉连接预测(C3P)来提高海洋动物的定位感知能力。

  • 我们进行了大量实验来验证所提模块的有效性。我们的方法在五个 MAS 数据集上取得了新的最佳性能。

相关工作

海洋生物分割

MAS 面临着巨大的挑战,例如可变的光照、颗粒物、水的浑浊度等。在过去的几十年里,大多数现有的方法主要利用手工制作的特征。从技术上讲,通常采用基于能量的模型来预测海洋动物的二值掩模。虽然它们取得了巨大的成功,但仍存在一些关键的限制,例如对模糊的鲁棒性较低、边界不清晰等。

随着深度学习的兴起,CNN 成为 MAS 的首选模型。为了提高性能,人们提出了各种网络架构。例如,Li 等 提出了一种特征交互编码器和级联解码器来提取更全面的信息。刘等结合通道和空间注意模块来细化特征图以获得更好的对象边界。此外,陈等提取多尺度特征并引入注意力融合块来突出海洋动物。傅等设计了一种数据增强策略,并使用孪生结构来学习共享语义信息。这些基于 CNN 的模型虽然有效,但缺乏捕捉复杂海洋图像的长距离依赖关系和复杂细节的能力。

最近,Vision Transformer (ViT)  展现出了对多种数据类型的出色全局理解能力。通过结构修改,它在各种分割任务中表现出色。至于 MAS,Hong 等人 将基于 Transformer 的编码器应用于水下图像,并显示出良好的动物分割效果。然而,Transformer 面临的一个重大挑战是需要大量的训练数据。目前,还没有非常大规模的 MAS 数据集用于训练 Transformer。

针对定制任务的SAM

最近,SAM 被提出用于实现通用图像分割。它在大规模分割数据集上进行训练,并表现出零样本迁移能力。借助各种类型的提示,它可以有效地部署到众多应用程序中。然而,它在迁移场景中表现出性能限制。此外,SAM 解码器的简单性在处理细节感知分割任务时是一个障碍。

为了解决这些限制,人们提出了各种方法。一些工作采用适配器为 SAM 注入领域特定信息。其他人则选择了更具体的解码器结构来改善领域感知。也有人努力自动生成提示,以提高适应性。尽管取得了这些进步,但由于使用自然图像进行训练,SAM 无法从特定领域获得足够的先验知识。此外,SAM 的单一位置提示对于先验指导而言非常不足。至于 MAS,我们发现只有一项工作涉及对水下场景的 SAM 进行微调。因此,在这项工作中,我们深入研究了 SAM 以改进定制任务。

我们提出的方法

如图 2 所示,我们的方法包含五个主要组件:双 SAM 编码器 (DSE)、多级耦合提示 (MCP)、扩张融合注意模块 (DFAM)、交叉连接预测 (C3P) 和伪标签相互监督 (PMS)。这些组件将在以下小节中详细说明。701d69154af7c940a5895992ab3ecadd.png

Dual-SAM Encoder (DSE)

如前所述,必须利用自然图像的特征来增强海洋图像。为此,我们利用伽马校正进行光照补偿。给定海洋图像α,校正后的图像 β 可以表示为

其中 是伽马系数, 是图像灰度强度的平均值。之后,我们将海洋领域信息注入 SAM 的编码器,以便更好地提取海洋特征。受的启发,我们将低秩可训练矩阵应用于多头自注意力(MHSA)块的查询和值部分。此外,我们将适配器纳入前馈网络(FFN)。不失一般性,令 为 SAM 编码器第 j 层的输出特征,则第 j+1 层的特征可以表示如下:

其中 N 是 token 的总数。D 是 token 嵌入的维度。

和 是线性投影矩阵,分别用于减少和随后恢复特征的维度。r 代表特征减少的维度。 是 Transformer 块内的中间特征。类似地, 和 分别是压缩和激发操作。R 代表压缩维度。是GELU激活函数。是层归一化。由于我们只更新线性投影矩阵,因此它显著减少了后续 MAS 任务的可训练参数数量。通过附加分支,它可以增强与动物相关的特征,以实现更好的定位。

Multi-level Coupled Prompt (MCP)

在 SAM 中,与物体相关的提示(例如,mask、box、point)被编码并添加到特征图中。然而,单一尺度的提示对于先验指导来说非常不足。为了提高提示能力,我们提出了一种多级耦合提示 (MCP) 策略,通过自动提示来指导全面的水下先验信息。

为此,我们首先将原始图像 和校正后的图像连接起来。然后,我们将它们分成块并使用卷积来获得特征嵌入:

其中 是标记化的特征,可以作为起点。如图3所示,它经过多个Transformer层并迭代生成特征:

d84a2471c7a90c2ba36b7213dfceb5a8.png

然后,我们将 DSE 的输出特征 和 分别视为 Query 和 Key。通过使用作为值,我们可以得到如下耦合提示:

其中 MHCA 是多头交叉注意力块,FC 是全连接层。生成的提示( 和 )是耦合的,可以用作自动提示,以提供更好的指导和事先指导。因此,我们可以通过以下方式获得提示特征:

其中 和 是用于平衡输入特征和提示的可学习权重。

Dilated Fusion Attention Module(DFAM)

SAM 的简单解码器在处理复杂的分割任务时会造成阻碍。受FPN的启发,我们引入特征金字塔结构作为解码器,以融合 MAS 的提示特征。为了改善感受野,我们提出了具有扩张卷积 和通道注意力的扩张融合注意力模块 (DFAM)。它可以插入相邻特征(Gi 和 Gi+1)。如图 4 所示,DFAM 可以表示如下:

43cd0084d4a6864f27db3ce3852efaf5.png

其中是Sigmoid函数。是 1×1 卷积, 是 3×3 卷积,扩张率为 2。为了构建特征金字塔,我们在结果特征后嫁接了一个上采样层。借助上述 DFAM,我们的框架可以改善海洋动物的情境感知。

Criss-Cross Connectivity Prediction(C3P)

传统图像分割方法会预测每个像素的类别。因此,它们会忽略离散像素之间的连通性,从而显示出不规则的结构和物体的边界。为了解决这个问题,我们提出了一种交叉连通性预测 (C3P) 范式来捕捉离散像素之间的互连性。我们的方法受到Connet网络的启发,强调相邻像素之间的连通性预测。相反,我们将采样范围扩展到交叉范围,考虑到海洋动物的各种形状和大小。具体来说,我们的方法首先将单通道掩码标签转换为 8 通道标签。图5说明了这八个通道。

dc161b41b355494ab8228e2cd0c458c4.png

它们表示其位置与中心像素之间的连通性。给定一个中心像素 (w, h),我们根据以下标准识别十字交叉像素:

其中 和 分别是距离为 1 和 2 的相邻像素集。基于上述定义,我们的框架直接预测连通图,从而为分割掩码提供更全面、更结构化的表示。训练损失函数为:

这里, 是两个解码器在第 l 级预测的连接图。它在Sigmoid函数之后进行处理。 是相应的真实值。(w, h) 是预测像素的空间位置。c 是通道数。可以看出,我们提出的 C3P 利用像素的交叉特性,实现了动物分割掩模的矢量预测。

Pseudo-label Mutual Supervision(PMS)

为了进一步保证双分支的全面互补性,我们对两个解码器采用了伪标签相互监督。它的工作方式类似于相互学习,使模型能够从不同的角度优化其参数。具体来说,我们首先对每个解码器分支内每个级别的预测输出进行阈值化。它可以表示如下:

其中 是阈值化后第 l 级的伪标签。是伪标签使用的阈值。然后使用上述伪标签来监督另一个分支的预测。为此,我们使用以下二元交叉熵损失函数进行训练。

通过相互监督,可以促进两个分支之间的协同增强,优化提示特征的提取和整合。

在训练的早期阶段,连接预测非常粗糙且不是最优的。因此,我们为伪标签监督引入了动态更新系数。它从一个小值开始,然后以指数方式逐渐增加:

其中 t 是训练过程中的当前 epoch 数。T 是总 epoch 数。最后,整体损失表示为:

为了进行推理,我们将连接图转换为二进制掩码。为了确保预测有效可靠,我们采用以下相互确认

因此,P 是 MAS 的最终预测。

实验

数据和评价指标

为了彻底验证性能,我们采用了五个公共数据集和五个评估指标。

对于数据集,MAS3K 包含 3,103 张具有高质量注释的图像。我们遵循默认拆分,使用 1,769 张图像进行训练,使用 1,141 张图像进行测试。我们排除了 193 张仅有背景的图像。RMAS 包含 3,014 张海洋图像。我们使用 2,514 张图像进行训练,使用 500 张图像进行测试。UFO120 共包含 1,620 张海洋图像。我们使用 1,500 张图像进行训练,使用 120 张图像进行测试。RUWI 包含 700 张海洋图像。我们使用 525 张图像进行训练,使用 175 张图像进行测试。此外,为了验证泛化,我们采用 USOD10K 数据集。它是最大的水下显著物体检测数据集,共有 10,255 张图像,其中 9,229 张图像用于训练,1,026 张图像用于测试。

为了评估模型的性能,我们使用了以下五个指标:平均交并比 (mIoU)、结构相似性度量 ()、加权 F 度量 ()、平均增强对齐度量 ()、平均绝对误差 (MAE)。这些指标提供了全面的评估,涵盖了分割质量的各个方面。有关这些指标的更多详细信息,请参阅补充材料。

实现细节

我们使用 PyTorch 工具箱实现了我们的模型,并使用一个 RTX 3090 GPU 进行了实验。在我们的模型中,SAM 的编码器由预训练的 SAM-B 初始化,而其余的编码器则随机初始化。在训练过程中,我们冻结 SAM 的编码器,仅对剩余的模块进行微调。为了减少计算量,我们为 MCP 设置 j = 3 × i。阈值 设置为 0.5。AdamW 优化器 用于更新参数。初始学习率和权重衰减分别设置为 0.001 和 0.1。我们每 20 个时期将学习率降低 10 倍。总训练时期数 T 设置为 50。由于内存限制,小批量大小设置为 8。所有输入图像都调整为 512 × 512 × 3 的大小。为了评估,我们通过双线性插值将预测的掩码调整回原始图像大小。

和SOTA模型的对比

在本部分中,我们将我们的方法与其他方法进行了比较。定量和定性结果清楚地显示了我们提出的方法的显著优势。

定量比较

24fbdc64defb3cb25c9ab9df424f21c7.png

表 9 和表 10 显示了在典型 MAS 数据集上的定量比较。与基于 CNN 的方法相比,我们的方法显著提高了性能。在具有挑战性的 MAS3K 数据集上,我们的方法在所有指标上都取得了最高分。它在各个指标上都实现了 3-5% 的提升。同时,我们的方法在其他 MAS 数据集上的表现始终更好。与基于 Transformer 的方法相比,我们的方法在 MAS3K 数据集上实现了 2-3% 的提升。与其他基于 SAM 的方法相比,我们的方法性能提升了 3-4%。此外,在表 11 中,我们将我们的方法与其他水下显著物体检测方法进行了比较。我们提出的方法仍然取得了优异的效果。

46edd0326d5a4b7ccc440da0c41ddda5.png定性比较图 6 展示了一些可视化示例,进一步验证了我们方法的有效性。可以看出,我们的方法在整体结构(第 1-2 行)、多只动物(第 3 行)、伪装动物(第 4 行)和细粒度边界(第 5-6 行)方面都可以获得更好的结果。与其他基于 SAM 的方法相比,我们的方法可以持续提高性能。主要原因是我们的方法引入了有效的提示和解码器。

a6822f081ac6c9b863c934d362f17762.png

消融实验

在本小节中,我们进行实验来分析不同模块的效果。结果在 MAS3K 数据集上报告。其他数据集上也出现了类似的趋势。

不同掩码预测范式的影响。表 4 显示了使用不同掩模预测范式的分割性能。显然,连通性预测比逐像素预测具有更好的性能。在预测像素级连通性和矢量级连通性方面。我们提出的 C3P 始终比连通性预测方法 和逐像素预测表现出更好的结果。这表明对海洋动物的了解更加全面。

2ef2afc04a0e2c49e3a380bb8ab7a357.png

双主干网络的有效性在本研究中,我们引入了双分支来提高 SAM 对 MAS 的能力。表 5 显示了性能比较。可以看出,双分支模型在所有指标上都比单分支模型取得了更好的结果。这清楚地证明了我们的双结构对海洋特征提取的有效性。PMS的有效性在本文中,我们引入了PMS来进一步保证双分支的全面互补性。表5显示了性能比较。此外,图7说明了PMS的效果。可以看出,通过加入PMS,性能得到了显著的提升。PMS在预测分割掩模方面可以达到互补的效果。

96411c1a1a020e114758dd03c09d1cb5.png 36005e9a92ee725c7fdea1caa422ae05.png

MCP的有效性在本研究中,我们向 SAM 的编码器注入了多级提示信息,以提供预先指导。表 6 显示了 MCP 的性能效果。使用所提出的 MCP,该模型可以提高所有指标的性能。主要原因是 MCP 帮助 SAM 的编码器整合了更细粒度的信息。

c34e3fbc2d7e891f4ca67408922ca0ae.png

DFAM的有效性在本文中,我们提出了 DFAM 来融合提示特征。表 7 提供了 DFAM 的性能效果。借助所提出的 MCP,该模型可以提高所有指标的性能,尤其是在 mIoU 和 MAE 方面。事实上,改进的结果主要来自扩张卷积和通道注意力,它们聚合了语义和细节信息。

561048888d7a10ef490caac5065e3dac.pngAdapters的有效性在本研究中,我们在 SAM 的编码器中引入了多个适配器以实现模型自适应。表 8 显示了不同适配器机制的有效性。可以看出,删除这些适配器后,性能会大幅下降。这些适配器对于提取特定领域的特征至关重要。适配器对每个后续模块都有重大影响。从实验结果可以看出,我们使用的两种类型的适配器都可以显著有效地提高模型的性能。4322cd7031899f899d12e95eb6146b37.png

结论

在本文中,我们为 MAS 提出了一种名为 Dual-SAM 的新型特征学习框架。该框架包括具有 SAM 范式的双重结构,以增强海洋图像的特征学习。为了指导全面的水下先验信息,我们提出了一种多级耦合提示 (MCP) 策略。此外,我们设计了一个扩张融合注意模块 (DFAM) 和一个交叉连接预测 (C3P) 来改善海洋动物的定位感知。大量实验表明,我们提出的方法在五个广泛使用的 MAS 数据集上实现了最佳性能。

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

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

相关文章

2.队列和队列集

队列的本质就是环形buff,加了互斥操作,加了阻塞-唤醒. 1.介绍一下环形BUFF 2.阻塞和唤醒 在我们队列中是有一个读list 链表 和 一个写list链表 他们就是用来保存 读 或者 写阻塞 的任务 假设我们 就绪链表中有A 和 B两个任务 他们正常情况下都是轮流运行, 这个时候 A 想读队…

IDEA中集成Git及Github

我的博客大纲 我的GIT学习大纲 1、IDEA中集成Git 1.1.设置IDEA忽略一些文件: a.为什么要忽略一些文件 1.在将项目推送之前,有一些文件是可以忽略的,忽略这些文件与实际功能无关,不参与服务器上部署运行,把他们忽略掉…

【DCL】Dual Contrastive Learning for General Face Forgery Detection

文章目录 Dual Contrastive Learning for General Face Forgery Detectionkey points:贡献方法数据视图生成对比学习架构实例间对比学习实例内对比学习总损失函数实验实验细节定量结果跨数据集评估跨操作评估消融实验可视化Dual Contrastive Learning for General Face Forgery…

HarmonyOS开发5.0【封装request泛型方法】axios

一 准备工作 1. 先开启一下虚拟机的权限 src/main/module.json5 打开module.json5在15~19行 进行配置网络权限 2. 在终端下载安装一下 ohpm install ohos/axios 复制 粘贴进去回车就行 3. 这样显示就是安装好了 如果导入不行就关了重新启动 二 创建一个ETS文件,…

后端开发刷题 | 矩阵的最小路径和

描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 数据范围: 1≤n,m≤500,矩阵中任意值都满足 0≤ai,j…

Linux系统:cd命令

1、命令详解: cd命令用于改变当前工作目录的命令,切换到指定的路径,全称为change directory,若目录名称省略,则默认变换至使用者的 home 目录。 2、官方参数: 选项:-L 强制遵循符号链接-P 使用…

基于RFID技术的光交箱哑资源智能化管理方案

一、现状 (一)现状与挑战 在当前通信网络基础设施中,哑资源如光缆接头、跳线等在网络中占据着重要地位。然而,传统的哑资源管理方式存在诸多问题,一方面,管理主要依赖人工记录和定期巡检,效率…

每日OJ_牛客_合唱团(打家劫舍dp)

目录 牛客_合唱团(打家劫舍dp) 解析代码1 解析代码2 牛客_合唱团(打家劫舍dp) 合唱团__牛客网 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求…

MongoDB高可用和分片集群知识

一、MongoDB实现高可用 1. MongoDB复制集(Replication Set) 在实际生产中,MongoDB要实现高可用,以免MongoDB单实例挂了,服务不可用。MongoDB实现高可用是以MongoDB复制集的形式实现,和集群部署概念相同,MongoDB复制集…

火柴人跑酷

运行图片: 这里面有三个boss,和各种元素属性列举一下: 元素作用 火 运用火元素将攻击抵消 水 和火元素一致 磁 自动吸取经验…

vscode设置vue标签不换行

1、打开 文件 --> 首选项 --> 设置 2、在设置里搜索 vetur.format,项较多,向下滑动找到 在 setting.json 中编辑 按钮 点进去 3、修改配置文件vetur.format.defaultFormatterOptions {"files.autoSave": "afterDelay","…

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

全网最适合入门的面向对象编程教程:47 Python 函数方法与接口-回调函数 Callback 摘要: 回调函数是编程中一种非常常见的模式,用于将函数作为参数传递给其他函数或方法。这种模式在 Python 中广泛应用于事件处理、异步编程、函数式编程等场景…

cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part

文章目录 cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part概述笔记END cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part 概述 在抄GDLink on Board的原理图。 抄完之后进行原理图DRC, 有个元件报错。 …

C语言代码练习(第十八天)

今日练习: 48、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

digits Social Login插件 google OAuth 2.0登录 400 redirect_uri_mismatch错误解决

以下是Social Login插件google登录配置: 直接使用这个URI 会在登录时提示错误:400 redirect_uri_mismatch,此时需要点击错误详情把这个重定向URI设置到google中即可

Java:类和对象(2)

一 对象的构建和初始化 1.对象构建 (Object Construction) Student student1new Student("zhangsan",12,"123456"); Student student2new Student("lisi",10,"15236"); 2. 构造函数(Constructor) 构造函数的…

Android binder 机制驱动核心源码详解_binder_thread_read

binder 驱动中做的工作可以总结为以下几步: 准备数据,根据命令分发给具体的方法去处理找到目标进程的相关信息将数据一次拷贝到目标进程所映射的物理内存块记录待处理的任务,唤醒目标线程调用线程进入休眠目标进程直接拿到数据进行处理&…

maven安装依赖

这里以安装tomcat依赖为例 1, 访问maven公共仓库 2,搜索tomcat 3, 右侧点击Plugin 选择&#xff1a;Apache Tomcat Maven Plugin :: Tomcat 7.x 选择版本&#xff0c;这里我选择2.2 选择maven&#xff0c;将<dependency>中的内容copy到pom.xml中的<build>里面 …

webctf

熟悉robots.txt协议&#xff0c;可能存在一些敏感信息(sql在登录时候的万能密码a’ or true#)熟悉phps文件&#xff0c;phps文件就是 php 的源代码文件&#xff0c;通常用于提供给用户&#xff08;访问者&#xff09;查看 php 代码&#xff0c;因为用户无法直接通过 Web 浏览器…

力扣279-完全平方数(Java详细题解)

题目链接&#xff1a;279. 完全平方数 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完背包&#xff0c;所以现在的题解都是以背包问题为基础再来写的。 如果大家不懂背包问题的话&…