RIS 系列 Mask Grounding for Referring Image Segmentation 论文阅读笔记

news2024/11/6 3:00:48

RIS 系列 Mask Grounding for Referring Image Segmentation 论文阅读笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • Architecture Design for RIS
    • Loss Design for RIS
    • Masked Language Modeling
  • 四、方法
    • 4.1 结构
    • 4.2 Mask Grounding
      • 讨论
    • 4.3 跨模态对齐模块
    • 4.4 跨模态对齐损失
    • 4.5 损失函数
  • 五、实验
    • 5.1 数据集及评估指标
    • 5.2 主要结果
    • 5.3 可视化
    • 5.4 消融研究
      • 语言-图像对齐的影响
      • MagNet 组件的兼容性
  • 六、结论

写在前面

  一篇 Arxiv 上面的新文章,看看清华大佬们的研究。

  • 论文地址:Mask Grounding for Referring Image Segmentation
  • 代码地址:原论文说将会开源,静待佳音~
  • 预计提交于:CVPR 2024
  • Ps:2023 年每周一篇博文阅读笔记,主页 更多干货,欢迎关注呀,期待 6 千粉丝有你的参与呦~

一、Abstract

  Referring Image Segmentation (RIS) 的定义,目前的 SOTA 方法仍然存在像素和词水平上的语言-图像模态鸿沟。主要原因:通常依赖于句子级别的语言特征用于语言-图像对齐;缺乏对细粒度视觉定位的监督。另外,由于弱的视觉和语言特征间的关联,因此需要更有效的推理去理解那些包含多个目标的复杂场景。于是本文引入 Mask Grounding 辅助任务来提升视觉定位的性能,Mask Grounding 直接适用于之前的模型。此外,为全面解决模态鸿沟,设计了一种跨模态对齐损失和一种辅助对齐模块。在 MagNet(Mask-grounded Network) 上达到了 SOTA 的效果。

二、引言

  首先指出图像分割任务与 Referring Image Segmentation 的区别,RIS 的应用。然后就是 RIS 的挑战:如何减少语言和图像特征间的模态鸿沟?需要一个有效性的对齐方法。

在这里插入图片描述
  如上图所示,之前的方法主要关注于设计不同的损失函数或者引入网络结构/模块来促进对齐,然而缺陷有俩:往往依赖于句子级别的语言特征对齐;缺乏对细粒度视觉定位的显著训练监督。于是难以处理复杂的目标间关系或者包含很少或混乱上下文的子句。如下图所示:

在这里插入图片描述
  于是文本引入一种 Mask Grounding 的辅助任务用于显式地教会模型进行细粒度的对齐。具体来说,在训练过程中,模型随机 mask 掉一些文本词汇,并且让模型来预测这些词汇的实体信息。除了整合文本上下文信息外,还利用了视觉和分割的信息。

  除 Mask Grounding 外,还提出一种跨模态对齐损失和一个对齐模块来全面填补模态鸿沟。整合的模型 MagNet (Mask-grounded Network) 达到了 SOTA 的效果。主要贡献如下:

  • 突出了最近 SOTA 的 RIS 方法的缺陷,指出细粒度视觉定位的缺乏;
  • 引入 Mask Grounding 辅助任务,旨在增强细粒度的视觉定位算法;
  • Mask Grounding + 跨模态对齐损失 + 辅助对齐模块 = MagNet (Mask-grounded Network),实现了新的 SOTA。

三、相关工作

Architecture Design for RIS

  早期的方法遵循拼接-卷积的操作,后续的工作采用 RNN 或动态卷积的方法。还有一些方法设计出语言-图像融合模块。此外,还有一些工作利用已知的语言结构或目标关系来增强融合。随着注意力结构的成功,当前的工作通常采用无向或双向的交叉注意力模块来执行语言-图像融合。有一些工作使用元学习的方法用于 RIS。受到大语言模型的驱动,一些方法将 RIS 视为自回归向量生成问题。接下来是一些举例:VPD、ReLA、DMMI。这些方法的缺陷在于:总是期待语言-图像对齐发生在 mask 预测过程中。于是本文引入一种辅助任务来显式地对齐语言-图像特征。

Loss Design for RIS

  早期用于训练 RIS 的方法通常采用简单的 binary cross entropy 损失, 接下来是对比学习的损失。与之前使用全局池化的语言特征计算损失相比,本文关注在像素-词水平上学习细粒度的目标联系。

Masked Language Modeling

  Masked language modeling (MLM) 在自然语言处理中很普遍。首先引入的是 BERT,之后就成为预训练模型及视觉-语言模型的标配。最近的 MaskedVLM 采用 MLM 执行 mask vision and language 建模,在一个模态的辅助作用下重建另外一个模态。Mask Grounding 与其不同,通过使用外部 mask 信号直接匹配缺失的单词从而确保重建过程,学习到相应的细粒度视觉定位的信息。

四、方法

在这里插入图片描述

4.1 结构

  MagNet (Mask-grounded Network) 由三个模块组成,首先 Mask Grounding 旨在提升细粒度视觉定位性能,使用视觉线索、语言上下文、分割信息来教会模型预测 masked 文本 tokens。之后 Cross-modal Alignment Module (CAM) 用于微调语言和图像特征间的双向交互。最后 Crossmodal Alignment Loss (CAL) 监督像素-像素和像素-文本的对齐。

4.2 Mask Grounding

  如图 3 所示,给定输入图像及其对应的指代表达式和分割 mask。首先利用一些特定词汇来代替指代表达式中的一些 tokens,从而训练模型来预测这些 tokens(类似于 MLM)。具体来说,首先取得 mask 区域的中心坐标,然后通过一个 2 层的 MLP,将其 mask 编码到一个 mask embedding 中。同时采用一个线性层将语言 embedding 投影到与图像 embedding 相同的维度。然后应用提出的 Masked Token 预测器在注意力机制的作用下来处理所有拼接的 embedding 用于 masked token 预测。最后,使用一个 cross-entropy 损失 L grounding \mathcal L_{\text{grounding}} Lgrounding 来比较最终的预测分布与目标分布。数学公式描述如下:令 T , I , M \bold{T},\bold{I},\bold{M} T,I,M 分别表示语言编码器、图像编码器、mask 编码器的输入:
O = Language E n c o d e r ( M a s k ( T ) ) P = I m a g e Encoder ( I ) C = MaskEncoder ( M ) L g r o u n d i n g = L C E ( y g t , Predictor ( C o n c a t ( [ O , P , C ] ) \mathbf{O}=\text{Language}\mathrm{Encoder}(\mathrm{Mask}(\mathbf{T}))\\ \mathbf{P}=\mathrm{Image}\text{Encoder}(\mathbf{I})\\ \mathbf{C}=\text{MaskEncoder}(\mathbf{M})\\ \mathcal{L}_{\mathrm{grounding}}=\mathcal{L}_{\mathrm{CE}}(\mathbf{y}_{\mathrm{gt}},\text{Predictor}(\mathrm{Concat}([\mathbf{O},\mathbf{P},\mathbf{C}]) O=LanguageEncoder(Mask(T))P=ImageEncoder(I)C=MaskEncoder(M)Lgrounding=LCE(ygt,Predictor(Concat([O,P,C])其中预测器为类似 BERT 编码器的结构, M M M 为 GT masks 的中心坐标, y g t \mathbf{y}_{\mathrm{gt}} ygt 为 masked token 的标签, L C E \mathcal{L}_{\mathrm{CE}} LCE 为交叉熵损失。实验中设置 Swin-B 为图像编码器,BERT-base 为语言编码器,但方法不限于此。

讨论

在这里插入图片描述
  如上表所示,Mask Grounding 超越了标准的 masked language modeling (MLM) 和 masked-vision language modeling (MaskedVLM)。原因在于:模型整合:传统的 MLM 为单模态,缺乏了指代表达式及其匹配的视觉目标的联系,而 MaskedVLM 为多模态,Mask Grounding 能够超越的目的在于引入了额外的 masking 信号来对齐 masked words 和匹配的视觉目标。这一结果表明 词-目标联系和细粒度的视觉定位很重要;任务属性:MLM 和 MaksedVLM 作为一般的预训练任务,需要在下游任务上进行微调,而 Mask Grounding 设计于一个 RIS 的辅助任务,在训练阶段增强了细粒度的视觉定位性能,且不需要额外的微调;预测上下文:MLM 和 MaskedVLM 采用文本或文本-视觉上下文预测,而 Mask Grounding 整合了外部的分割信息,于是性能更好。

4.3 跨模态对齐模块

在这里插入图片描述
  如上图所示,提出的跨模态对齐、 cross-modal alignment module (CAM) 将全局上下文先验注入到图像特征中,再进行跨模态融合。CAM 首先采用不同窗口尺寸的池化操作生成 K K K 个不同尺度的特征图构成特征金字塔。然后,每个特征图将会通过一个 3 层的 MLP 用于提取全局特征。之后所有的输出特征将通过双线性插值上采样到原始特征图,然后沿着特征维度拼接。同样采用一个门控单元来调制最后的输出。最终,输出后的特征返回到输入特征上用于下一阶段图像或语言编码器的输入。将语言编码器划分为 4 个阶段,并在每个阶段的末尾添加 CAM 模块。

  用数学公式表示如下:令 T i \bold T_i Ti I i \bold I_i Ii 分别表示语言和图像编码器每个阶段的输入,于是每个阶段有:
O i = LanguageStage ( T i ) , P i = I m a g e Stage ( I i ) P i k = M L P k ( P o o l k ( P i ) ) , p 2 t K , P i , t 2 p k = X − M H A k ( O i , P n k ) O i , p 2 t = C o n c a t ( [ O i , p 2 t i , . . . , O i , p 2 t N ] 2 p = C o n c a t ( [ U p ( P i , t 2 p 1 , . . . , U p ( P i , t 2 p N ) ] O i + 1 = O i + tanh ⁡ ( M L P ( O i , p 2 t ) ) P i + 1 = P i + tanh ⁡ ( M L P ( P i , t 2 p ) ) \begin{gathered} \mathbf{O}_i=\text{LanguageStage}(\mathbf{T}_i),\mathbf{P}_i=\mathrm{Image}\text{Stage}(\mathbf{I}_i)\\ \mathbf{P}_i^k=\mathrm{MLP}_k(\mathrm{Pool}_k(\mathbf{P}_i))\\ {}_{,p2t}^{K},\mathbf{P}_{i,t2p}^{k}=\mathrm{X-MHA}_{k}(\mathbf{O}_{i},\mathbf{P}_{n}^{k}) \\ \mathbf{O}_{i,p2t}=\mathrm{Concat}([\mathbf{O}_{i,p2t}^i,...,\mathbf{O}_{i,p2t}^N] \\ _{2p}=\mathrm{Concat}([\mathrm{Up}(\mathbf{P}_{i,t2p}^{1},...,\mathrm{Up}(\mathbf{P}_{i,t2p}^{N})]\\ \mathbf{O}_{i+1}=\mathbf{O}_i+\tanh(\mathsf{MLP}(\mathbf{O}_{i,p2t}))\\ \mathbf{P}_{i+1}=\mathbf{P}_{i}+\operatorname{tanh}(\mathsf{MLP}(\mathbf{P}_{i,t2p})) \end{gathered} Oi=LanguageStage(Ti),Pi=ImageStage(Ii)Pik=MLPk(Poolk(Pi)),p2tK,Pi,t2pk=XMHAk(Oi,Pnk)Oi,p2t=Concat([Oi,p2ti,...,Oi,p2tN]2p=Concat([Up(Pi,t2p1,...,Up(Pi,t2pN)]Oi+1=Oi+tanh(MLP(Oi,p2t))Pi+1=Pi+tanh(MLP(Pi,t2p))其中 U p Up Up 表示上采样,X-MHA 表示双向跨模态多头注意力。

4.4 跨模态对齐损失

  采用跨模态对齐损失来对齐语言和图像特征,其中 cross-modal alignment loss (CAL) 全面总结了像素-像素级别的损失 L P2P \mathcal L_{\text{P2P}} LP2P 和像素-文本损失 L P2T \mathcal L_{\text{P2T}} LP2T。用数学公式表示如下:给定语言编码器产生的语言特征 T ∈ R M × D \bold T\in\mathbb{R}^{M\times D} TRM×D,包含 ∣ P ∣ |\mathcal P| P 个正样本像素特征的最终像素解码器 mask 特征 I ∈ R C l × H l × W l \bold I\in \mathbb{R}^{C_l\times H_l \times W_l} IRCl×Hl×Wl ∣ N ∣ |\mathcal N| N 个负样本像素特征。 I i + \bold I_i^+ Ii+ 表示正样本集合 P \mathcal P P 中的第 i t h i^{th} ith 个像素特征, I j − I_j^- Ij 表示负样本集合 N \mathbb N N 中的第 j t h j^{th} jth 个像素特征, T k \bold T_k Tk 表示第 k t h k^{th} kth 个语言特征,然后有:
L C A L = L P 2 P + L P 2 T L P 2 P = − 1 ∣ P ∣ ∑ i ∣ P ∣ e I i + ⋅ I a v g + / τ 1 e I i + ⋅ I a v g + / τ 1 + ∑ j ∣ N ∣ e I i + ⋅ I j − / τ 1 + − 1 ∣ N ∣ ∑ j ∣ N ∣ e I j − ⋅ I a v g − / τ 1 e I j − ⋅ I a v g − / τ 1 + ∑ i ∣ P ∣ e I j − ⋅ I i + / τ 1 L P 2 T = − 1 ∣ P ∣ ∑ i ∣ P ∣ e I i + ⋅ T a v g / τ 2 e I i + ⋅ T a v g / τ 2 + ∑ j ∣ N ∣ e I i + ⋅ I j − / τ 2 \begin{aligned} \mathcal{L}_{\mathrm{CAL}}=\mathcal{L}_{\mathrm{P2P}}+\mathcal{L}_{\mathrm{P2T}}\\ \mathcal{L}_{\mathrm{P2P}}=-\frac{1}{|\mathcal{P}|}\sum_i^{|\mathcal{P}|}\frac{e^{\mathbf{I}_i^+ \cdot \mathbf{I}_{\mathbf{avg}}^+/\tau_1}}{e^{\mathbf{I}_i^+\cdot\mathbf{I}_{\mathbf{avg}}^+/\tau_1}+\sum_j^{|\mathcal{N}|}e^{\mathbf{I}_i^+\cdot\mathbf{I}_j^-/\tau_1}} +-\frac{1}{|\mathcal{N}|}\sum_j^{|\mathcal{N}|}\frac{e^{\mathbf{I}_j^-\cdot\mathbf{I}_{\mathrm{avg}}^-/\tau_1}}{e^{\mathbf{I}_j^-\cdot\mathbf{I}_{\mathrm{avg}}^-/\tau_1}+\sum_i^{|\mathcal{P}|}e^{\mathbf{I}_j^-\cdot\mathbf{I}_i^+/\tau_1}}\\ \mathcal{L}_{\mathrm{P2T}} = - \frac 1 { | \mathcal{P}|}\sum_i^{|\mathcal{P}|}\frac{e^{\mathbf{I}_i^+\cdot\mathbf{T}_{\mathrm{avg}}/\tau_2}}{e^{\mathbf{I}_i^+\cdot\mathbf{T}_{\mathrm{avg}}/\tau_2}+\sum_j^{|\mathcal{N}|}e^{\mathbf{I}_i^+\cdot\mathbf{I}_j^-/\tau_2}} \end{aligned} LCAL=LP2P+LP2TLP2P=P1iPeIi+Iavg+/τ1+jNeIi+Ij/τ1eIi+Iavg+/τ1+N1jNeIjIavg/τ1+iPeIjIi+/τ1eIjIavg/τ1LP2T=P1iPeIi+Tavg/τ2+jNeIi+Ij/τ2eIi+Tavg/τ2其中 I a v g + = 1 ∣ P ∣ ∑ i ∣ P ∣ I i + \mathbf{I}_\mathrm{avg}^+=\frac1{|\mathcal{P}|}\sum_i^{|\mathcal{P}|}\mathbf{I}_i^+ Iavg+=P1iPIi+ I a v g − = 1 ∣ N ∣ ∑ j ∣ N ∣ I j − \mathbf{I}_\mathrm{avg}^-=\frac1{|\mathcal{N}|}\sum_j^{|\mathcal{N}|}\mathbf{I}_j^- Iavg=N1jNIj 分别表示平均池化后正样本像素特征和负样本像素特征。 T a v g = proj ⁡ ( 1 M ∑ m M T k ) \mathbf{T}_{\mathrm{avg}}=\operatorname*{proj}(\frac1M\sum_{m}^{M}\mathbf{T}_{k}) Tavg=proj(M1mMTk) 为平均池化和线性投影后的词特征, τ 1 \tau_1 τ1 τ 2 \tau_2 τ2 为超参数。需要注意的是所有的特征在进行点乘前均经过 L2 归一化处理,但并未在上式中体现。

4.5 损失函数

  损失函数为下列 4 个不同损失的加权求和:
L = λ B C E L B C E + λ D i c e L D i c e + λ C A L L C A L + λ g r o u n d i n g L g r o u n d i n g , \begin{gathered} \mathcal{L}=\lambda_{\mathrm{BCE}}\mathcal{L}_{\mathrm{BCE}}+\lambda_{\mathrm{Dice}}\mathcal{L}_{\mathrm{Dice}}+ \lambda_\mathrm{CAL}\mathcal{L}_\mathrm{CAL}+\lambda_\mathrm{grounding}\mathcal{L}_\mathrm{grounding}, \end{gathered} L=λBCELBCE+λDiceLDice+λCALLCAL+λgroundingLgrounding,实验中 λ B C E = 2.0 \lambda_{\mathrm{BCE}}=2.0 λBCE=2.0 λ D i c e = 2.0 \lambda_{\mathrm{Dice}}=2.0 λDice=2.0 λ g r o u n d i n g = 1.0 \lambda_\mathrm{grounding}=1.0 λgrounding=1.0

五、实验

5.1 数据集及评估指标

  • 数据集:RefCOCO、RefCOCO+、GRef
  • 评估指标:overall intersection-over-union (oIoU)、mean intersection-overunion (mIoU)

5.2 主要结果

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

5.3 可视化

在这里插入图片描述

5.4 消融研究

  训练 10 个 epoch,输入图像尺寸 224 × 224 224\times 224 224×224。所有的消融实验执行在 RefCOCO 和 RefCOCO+ 数据集上。

  • RIS 性能的影响;
  • Mask 编码器的设计;
  • Mask Token 预测器的设计;
  • Mask Grounding 的统一效果。
  • CAM 的有效性
  • CAL 的有效性

在这里插入图片描述

语言-图像对齐的影响

在这里插入图片描述

MagNet 组件的兼容性

在这里插入图片描述

六、结论

  本文提出 Mask Grounding,基于周围的文本、视觉和分割信息,通过教导模型预测随机 mask 掉的文本 tokens,实验效果很好。为全面解决模态鸿沟,设计了一种跨模态对齐损失和一种辅助对齐模块。当一齐作用时,提出的 MagNet 实现了 SOTA 的性能。

写在后面

  这篇论文咋说呢,感觉就是那种顶会的边缘,创新点属于可拒可不拒的那种。最大的败笔还是论文的写作确实不咋地,没有一种连贯之感。另外,实验缺少了实验细节的介绍,放在补充材料中吗?

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

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

相关文章

顺序表基本操作实现

#include <stdio.h>#define MAX_SIZE 100// 定义顺序表的元素类型 typedef int ElementType;// 定义顺序表结构体 typedef struct {ElementType data[MAX_SIZE];int length; } SeqList;// 初始化顺序表 void InitList(SeqList *L) {L->length 0; }// 插入操作 int Li…

BP网络识别26个英文字母matlab

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;字母识别 获取完整源码源工程文件 一、 设计思想 字符识别在现代日常生活的应用越来越广泛&#xff0c;比如车辆牌照自动识别系统&#xff0c;手写识别系统&#xff0c;办公自动化等等。本文采用BP网络对26个英文字母进行…

优化小地图(非RawImage方法,节省性能)

优化小地图&#xff08;非RawImage方法&#xff0c;节省性能&#xff09; 一、小地图设计二、功能实现1.截取俯视图2.创建Cube包裹住场地&#xff0c;并且创建一个子物体坐标为&#xff08;0,0,0&#xff09;**3.创建UI显示小地图坐标转换代码如下&#xff1a; 一、小地图设计 …

我是如何转行 AI 并且实现薪资翻倍的

大家好啊&#xff0c;我是董董灿。 熟悉我的小伙伴都知道&#xff0c;我之前在北京某211大学&#xff0c;本硕读了7年的机械专业&#xff0c;后来硕士毕业后&#xff0c;果断转行去做了嵌入式开发&#xff0c;随后瞅准了 AI 爆发的时机果断转行去做了AI。 这段经历已经过去了…

【python与机器学习3】,感知机和与非门

1 电子和程序里的与门&#xff0c;非门&#xff0c;或门&#xff0c;与非门 &#xff0c;或非门&#xff0c;异或门 1.1 基础电路 与门&#xff08;AND gate&#xff09;、或门&#xff08;OR gate&#xff09;和非门&#xff08;NOT gate&#xff09;是数字逻辑电路中的三种基…

本地搭建【文档助手】大模型版(LangChain+llama+Streamlit)

概述 本文的文档助手就是&#xff1a;我们上传一个文档&#xff0c;然后在对话框中输入问题&#xff0c;大模型会把问题的答案返回。 安装步骤 先下载代码到本地 LangChain调用llama模型的示例代码&#xff1a;https://github.com/afaqueumer/DocQA&#xff08;代码不是本人…

自动驾驶规划算法

本文将讲解BFS&#xff0c;Dijstra&#xff0c;A*&#xff0c;动态规划的算法原理&#xff0c;不正之处望读者指正&#xff0c;希望有兴趣的读者能在评论区提出一些这些算法的面试考点&#xff0c;共同学习&#xff0c;一起进步 0 图论基础 图有三种&#xff1a;无向图、有向…

SRE 与 DevOps:你知道它们之间区别吗?

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享 DevOps专注于消除阻碍开发和运维之间协作的隔阂&#xff0c;而SRE致力于设计和实施可扩展、可靠的系统&#xff0c;确保最大可靠性。 这篇文章将探讨DevOps和SRE之间的差异&#xff0c…

Podman配置mongodb

文章目录 查询镜像拉取镜像查看镜像运行容器创建root用户 查询镜像 podman search mongo拉取镜像 podman pull docker.io/library/mongo查看镜像 podman images运行容器 podman run -d -p 27017:27017 --namemongodb-test docker.io/library/mongo创建root用户 podman exe…

SSH秘钥登录服务器

一、查看本机 ssh 公钥&#xff0c;生成公钥 1.通过命令窗口 a. 打开你的 git bash 窗口 b. 进入 .ssh 目录&#xff1a;cd ~/.ssh c. 找到 id_rsa.pub 文件&#xff1a;ls d. 查看公钥&#xff1a;cat id_rsa.pub 或者 vim id_rsa.pub git–查看本机 ssh 公钥&#xff0c…

小白--将笔记本上的代码或者项目上传到github上去教程(使用git命令)

文章目录 一、操作教程二、常见问题1. 问题12. 问题2 三、注意 一、操作教程 https://blog.csdn.net/Elon15/article/details/125705706?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170340591716800215092652%2522%252C%2522scm%2522%253A%252220140713.130102…

第六部分 集合论

目录 主要内容 集合的基本概念 集合的基本运算 集合恒等式 初级运算 文氏图 集合的广义并与广义交 广义运算的性质 例1 A{{a},{a,b}} 集合算律 例2 判断下列命题是否为真 例3 设 例4 判断以下命题的真假&#xff0c;并说明理由. 解题思路 主要内容 集合的基本概念 属于、包含…

基于JAVA的超市账单管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

【Postman】以命令行形式执行Postman脚本(使用newman)

一、背景 ​ Postman的操作离不开客户端。但是在一些情况下可能无法使用客户端去进行脚本执行。比如在服务端进行接口测试。由此我们引入了Newman。Newman基于Node.js开发&#xff0c;它使您可以直接从命令行轻松运行和测试Postman测试集。它在构建时考虑了可扩展性&#xff0c…

身为Java“搬砖”程序员,你掌握了多线程吗?

摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流量洪峰&#xff0c;背后都离不开多线程技术的支持。在数字化转型的过程中&#xff0c;高并发、高性能是衡量系统性能的核心指…

STM32实现流水灯

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_…

stm32 pwm输出

PWM 技术原理 CUBEMX PWM配置 pwm初始化 MX_TIM2_Init(); HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);设置pwm //pwmVal 0 ~ 1000 __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, pwmVal);

2024苹果手机iOS管理软软件iMazing2.17永久免费版下载教程

iMazing2024是一款专业的苹果IOS设备管理器&#xff0c;强悍的性能远超苹果的iTunes&#xff0c;iMazing 能让广大果粉能已自己的方式管理苹果设备&#xff0c;无需iTunes即可畅快传输或者保存苹果设备中的音乐、消息、文件以及其他数据。 iMazing2Mac-最新绿色安装包下载如下&…

WORDPRESS付费会员插件Paid Memberships Pro v2.12.5 – Plugin + All Addons

WORDPRESS付费会员插件Paid Memberships Pro v2.12.5 – Plugin All Addons 简介&#xff1a; Paid Memberships Pro是一款功能强大的会员订阅和内容限制管理插件&#xff0c;适用于WordPress网站。它提供了丰富的特性和工具&#xff0c;帮助网站所有者轻松地创建和管理付费…

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件&#xff0c; 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…