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

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • 3.1 指代表达式理解
    • 3.2 指代表达式分割
    • 3.3 动态权重网络
  • 四、方法
    • 4.1 总览
    • 4.2 语言自适应权重生成
      • 语言特征聚合
      • 权重生成
    • 4.3 多任务头
    • 4.4 训练目标
  • 五、实验
    • 5.1 数据集和评估指标
      • 数据集
      • 评估指标
    • 5.2 实施细节
      • 训练
      • 推理
    • 5.3 与 SOAT 方法的比较
      • REC 任务
      • RES 任务
      • 指代表达式的长度分析
    • 5.4 消融分析
    • 5.5 定量分析
  • 六、结论和限制

写在前面

  新的一周开始了,冲冲冲~
  这篇文章是 上一篇博文 的参考文献之一,遂找来读读,粗略一扫,论文创新点挺好的,可惜没有提供源代码。话说,上篇浙大的不开源,这篇难道也不开源吗?那以后可能得绕道了。。。

  • 论文地址:Language Adaptive Weight Generation for Multi-task Visual Grounding
  • 代码地址:原文未提供
  • 收录于: CVPR 2023
  • Ps:2023 年每周一篇博文阅读笔记,主页 更多干货,欢迎关注呀,期待 5 千粉丝有你的参与呦~

一、Abstract

  之前的方法通常以一种被动的方式利用视觉 Backbone,即以固定权重提取视觉特征,而没有表达式的参与。理想情况下,视觉 Backbone 应当主动根据表达式来提取视觉特征。于是本文基于语言自适应权重 Language Adaptive Weights(VG-LAW),提出一种主动感知视觉定位框架。通过不同表达式生成的动态权重将视觉 Backbone 作为一个特定表达式的特征提取器,不需要额外的跨模态交互模块。实验表明方法很有效。

二、引言

  首先指出视觉定位的含义,难点,应用。之前的方法通常采用通用的目标检测框架,且重点关注跨模态交互模块的设计。然而采用固定结构来提取视觉特征可能会导致提取出的视觉特征和表达式不匹配,例如存在缺失或冗余的特征。如下图所示:

在这里插入图片描述
一些特征可视化例子如下图所示:

在这里插入图片描述
  有一些方法已经注意到这一现象并提出相应的解决办法,例如 QRNet 和 LAVT, 通过嵌入设计的交互模块,例如 QD-ATT、PWAN 到每个阶段的末尾。然而这一先提取后调整的策略无法避免包含大量固定权重提取出来的特征。于是本文采用一种更简单且细粒度的计划来修改视觉 Backbone 的权重。如图 1 c 所示。
  本文基于语言自适应权重 Language Adaptive Weights(VG-LAW),提出一种主动感知视觉定位框架。通过将指代表达式注入权重中,从而动态调整视觉 Backbone 的权重。具体来说,VG-LAW 首先通过两个连续的特征聚合和权重生成得到语言特征的自适应权重,用于视觉 Backbone。然后语言感知的视觉 Backbone 能在无需手动修改视觉 Backbone 结构的情况下提取相关表达式的视觉特征,因此无需额外的跨模态融合。进一步地,基于表达式的相关特征,提出一种轻量、整洁的多任务预测头用于指代表达式理解 REC 和指代表达式分割 RES 任务。
  
  文本贡献总结如下:

  • 基于语言自适应权重 Language Adaptive Weights(VG-LAW),提出一种主动感知视觉定位框架。能够在无需手动修改视觉 Backbone 框架的情况下主动地提取相关表达式的视觉特征。
  • 能够直接用于 REC 和 RES 任务,无需设计跨模态注意力模块。
  • 实验表明达到了 SOTA 的结果。

三、相关工作

3.1 指代表达式理解

  得益于注意力机制,最近基于 Transformer 的方法能够有效捕捉模态内部和模态间的上下文交互信息。

3.2 指代表达式分割

  最近的研究利用 Transformer 来实现跨模态交互,已达到优越的性能,但所有的这些方法要么通过调整输入,要么修改固定网络权重的结构来实现跨模态交互。

3.3 动态权重网络

  网络能够自适应地动态调整权重。根据其生成方式,大致分为三种:使用可学习的 embedding 或中间特征作为输入,使用全连接层直接生成动态权重;将可学习权重进行求和,这被认为是混合专家,可能会导致优化困难;用矩阵分解的方式得到权重,最终的权重通过计算一些矩阵的乘法生成。

四、方法

在这里插入图片描述

4.1 总览

  VG-LAW 框架由四个部分组成,语言 Backbone、语言自适应权重生成器、视觉 Backbone、多任务头。

  给定一个指代表达式,N 层的 BERT 语言编码器将表达式 tokenizes,再前置一个 [CLS] token,提取出语言特征 F l ∈ × R L × d l F_l\in\times{R}^{L\times d_l} Fl×RL×dl,其中 L L L d l d_l dl 分别表示 token 的数量和维度。之后将 F l F_l Fl 送入语言自适应权重生成器得到权重,用于视觉 Backbone。

  接下来,给定一张图像 I ∈ × R 3 × H × W I\in\times{R}^{3\times H\times W} I×R3×H×W,通过视觉 Backbone 提取出表达式感知的视觉特征 F v ∈ R C × H s × W s F_v\in\mathbb{R}^{C\times\frac{H}{s}\times\frac{W}{s}} FvRC×sH×sW,其中 C C C s s s 分别表示通道数量和步长。最后,将 [CLS] token 表示的语言特征 F l 1 ∈ R d l F_l^1\in\mathbb{R}^{{d}_l} Fl1Rdl 和视觉特征送入多任务头中,预测指代表达式的 bounding box 和 mask。

4.2 语言自适应权重生成

语言特征聚合

  考虑到指代表达式对应的是不同数量的语言 tokens,且视觉 Backbone 的每层可能会倾向于不同的语言 tokens,于是尝试用固定尺寸聚合每层的语言特征。根据多头注意力机制,引入一个可学习的特定层 embedding e i ∈ R d l e_i\in\mathbb{R}^{d_l} eiRdl 用于视觉 Backbone 的第 i i i 层,动态提取特定层的语言特征。将 e i e_i ei F l F_l Fl 分为 G G G 组,对于每一个组 g g g,令逐 token 注意力 α i g ∈ [ 0 , 1 ] L \alpha_{i}^{g}\in[0,1]^{L} αig[0,1]L e i g e_i^g eig F l g F_l^{g} Flg 的 Softmax 点乘:
α i g = S o f t m a x ( [ e i g ⋅ F l g , 1 , e i g ⋅ F l g , 2 , ⋯ , e i g ⋅ F l g , L ] ) \alpha_{i}^{g}=\mathrm{Softmax}([e_{i}^{g}\cdot F_{l}^{g,1},e_{i}^{g}\cdot F_{l}^{g,2},\cdots,e_{i}^{g}\cdot F_{l}^{g,L}]) αig=Softmax([eigFlg,1,eigFlg,2,,eigFlg,L])然后对特征拼接得到聚合的语言特征 h 0 i ∈ R d l h_0^i\in\mathbb{R}^{d_l} h0iRdl
h 0 i , g = ∑ j = 1 L α i g , j F l g , j {h_{0}^{i,g}}=\sum_{j=1}^{L}\alpha_{i}^{g,j}F_{l}^{g,j} h0i,g=j=1Lαig,jFlg,j最后,使用全连接层 (FC) 减少其维度,用于视觉 Backbone 的第 i i i 层:
h 1 i = δ ( W 1 i h 0 i ) h_{1}^{i}=\delta(W_{1}^{i}h_{0}^{i}) h1i=δ(W1ih0i)其中 W 1 i ∈ R d l × d h W_{1}^{i}\in\mathbb{R}^{d_l\times d_h} W1iRdl×dh 将维度降低为 d h = d l / r d_h=d_l/r dh=dl/r r r r 为减少比例, δ \delta δ 表示 GeLU 激活函数。

权重生成

  基于指代表达式,生成语言自适应的权重用于生成视觉 Backbone 中的 qeury X q X_q Xq,Key X k X_k Xk,Value X v X_v Xv
X q = θ ( X ; W q ) , X k = θ ( X ; W k ) , X v = θ ( X ; W v ) X_q=\theta(X;W_q),X_k=\theta(X;W_k),X_v=\theta(X;W_v) Xq=θ(X;Wq),Xk=θ(X;Wk),Xv=θ(X;Wv)其中 θ ( ⋅ ; W ) \theta(\cdot;W) θ(;W) 表示线性投影, X X X 表示输入的视觉特征。 W q , W k , W v ∈ R d o u t × d i n W_q,W_k,W_v{\in}\mathbb{R}^{d_{out}\times d_{in}} Wq,Wk,WvRdout×din 是用于生成 query,key,value 的动态投影权重。 d i n d_{in} din d o u t d_{out} dout 是特征 X X X 和 query/key/value 的维度。

   d o u t × d i n d_{out}\times d_{in} dout×din 还不足以用全连接层直接生成权重,例如 Hypernetworks。通过 K 个静态核的加权求和生成权重,DynamicConv 和 CondConv 能够缓解这一问题,但很难优化。于是根据动态通道融合 dynamic channel fusion,尝试用矩阵分解的方法生成动态权重。拿第 i i i 层的 ViT 块举例:
[ W q i , W k i , W v i ] = W 0 i + P Φ ( h 1 i ) Q T [W_q^i,W_k^i,W_v^i]=W_0^i+P\Phi(h_1^i)Q^T [Wqi,Wki,Wvi]=W0i+PΦ(h1i)QT其中 W 0 i ∈ R d o u t × d i n W_0^i\in\mathbb{R}^{d_{out}\times d_{in}} W0iRdout×din 为特定层的静态可学习权重。 P ∈ R d o u t × d w P\in\mathbb{R}^{d_{out}\times d_{w}} PRdout×dw Q ∈ R d i n × d w Q\in\mathbb{R}^{d_{in}\times d_{w}} QRdin×dw 也是静态可学习权重,在所有 ViT 块中共享。 Φ ( h 1 i ) \Phi(h_1^i) Φ(h1i) 为全连接层,以聚合的语言特征 h 1 i h_1^{i} h1i 为输入,生成形状为 d w × d w d_w\times d_w dw×dw 的动态矩阵。

dynamic channel fusion:Yunsheng Li, Yinpeng Chen, Xiyang Dai, Dongdong Chen, Ye Yu, Lu Yuan, Zicheng Liu, Mei Chen, Nuno Vasconcelos, et al. Revisiting dynamic convolution via matrix decomposition. In ICLR, 2020. 3, 4

4.3 多任务头

  多任务头中有两个分支分别用于 REC 和 RES 任务。

  对于 REC 分支,直接应用坐标回归来预测指代目标的 Bounding box。为了池化 2 − d 2-d 2d 视觉特征,提出一个语言自适应的池化模块 language adaptive pooling module (LAP),使用语言自适应的注意力来聚合视觉特征。具体来说,视觉特征 { F v i , j } ∈ R C × H s × W s {\{F_{v}^{i,j}\}}\in\mathbb{R}^{C\times\frac{H}{s}\times\frac{W}{s}} {Fvi,j}RC×sH×sW 和语言特征 F l 1 ∈ R d l F_l^1\in\mathbb{R}^{d_l} Fl1Rdl 首先投影到低维度空间 R k \mathbb{R}^{k} Rk,并计算其点乘相似度的 softmax 归一化后的注意力权重 A ∈ R H s × W s A\in\mathbb{R}^{\frac Hs\times\frac Ws} ARsH×sW。然后通过计算注意力权重 A A A 的求和来聚合视觉特征。最后,将聚合后的视觉特征送入三层全连接层,Sigmoid 函数用于预测指代的 bounding box b ^ = ( x ^ , y ^ , w ^ , h ^ ) \hat b=(\hat x,\hat y,\hat w,\hat h) b^=(x^,y^,w^,h^)

  对于 RES 分支,应用二分类沿着视觉特征的空间维度来预测指代目标的 mask。具体来说,视觉特征 F v F_v Fv 首先采用连续的转置卷积上采样到 F v ^ ∈ R d l × H 4 × W 4 \hat{F_{v}}\in\mathbb{R}^{d_{l}\times\frac{{H}}{4}\times\frac{W}{4}} Fv^Rdl×4H×4W,然后在每个视觉特征上使用线性投影 θ ( ⋅ ; W ) \theta(\cdot;W) θ(;W) 得到中间的分割图 s ˉ ∈ R H 4 × W 4 \bar{s}\in\mathbb{R}^{\frac H4\times\frac W4} sˉR4H×4W,其中 W = F l 1 W=F_l^1 W=Fl1。最后在 s ˉ \bar s sˉ 上使用双线性插值上采样得到全分辨率分割 mask s ^ ∈ R H × W \hat s\in\mathbb{R}^{H\times W} s^RH×W,后接一个 Sigmoid 函数。

4.4 训练目标

  对于 REC,给定预测的 bounding box b ^ = ( x ^ , y ^ , w ^ , h ^ ) {\hat{b}}=(\hat{x},{\hat{y}},\hat{w},\hat{h}) b^=(x^,y^,w^,h^) 和 GT box b = ( x , y , w , h ) b=(x,y,w,h) b=(x,y,w,h),检测损失为:
L d e t = λ L 1 L L 1 ( b , b ^ ) + λ g i o u L g i o u ( b , b ^ ) \mathcal{L}_{det}=\lambda_{L1}\mathcal{L}_{L1}(b,\hat{b})+\lambda_{giou}\mathcal{L}_{giou}(b,\hat{b}) Ldet=λL1LL1(b,b^)+λgiouLgiou(b,b^)其中 L L 1 ( ⋅ ) \mathcal{L}_{L1}(\cdot) LL1() L g i o u ( ⋅ ) \mathcal{L}_{giou}(\cdot) Lgiou() 分别表示 L1 损失和通用 IoU 损失, λ L 1 \lambda_{L1} λL1 λ g i o u \lambda_{giou} λgiou 为控制损失函数的相关权重。
  对于 RES,给定预测的 mask s ^ \hat s s^ 和 GT s s s,分割损失定义为:
L s e g = λ f o c a l L f o c a l ( s , s ^ ) + λ d i c e L d i c e ( s , s ^ ) \mathcal{L}_{seg}=\lambda_{focal}\mathcal{L}_{focal}(s,\hat{s})+\lambda_{dice}\mathcal{L}_{dice}(s,\hat{s}) Lseg=λfocalLfocal(s,s^)+λdiceLdice(s,s^)其中 L f o c a l ( ⋅ , ⋅ ) \mathcal{L}_{focal}(\cdot,\cdot) Lfocal(,) L d i c e ( ⋅ , ⋅ ) \mathcal{L}_{dice}(\cdot,\cdot) Ldice(,) 分别表示 focal 损失和 DICE/F-1 损失, λ f o c a l \lambda_{focal} λfocal λ d i c e \lambda_{dice} λdice 为控制两个分割损失的相关权重。本文提出的框架可以同时训练 REC 和 RES 任务,其共同训练损失函数为:
L t o t a l = L d e t + L s e g \mathcal{L}_{total}=\mathcal{L}_{det}+\mathcal{L}_{seg} Ltotal=Ldet+Lseg

五、实验

5.1 数据集和评估指标

数据集

  RefCOCO、RefCOCO+、RefCOCOg、ReferItGame。

评估指标

  分别使用 P r e c @ 0.5 Prec@0.5 Prec@0.5 m I o U mIoU mIoU 来评估 REC 和 RES 的性能。

5.2 实施细节

训练

  输入图像尺寸 448 × 448 448\times448 448×448。视觉 Backbone ViT-Base,采用 ViTDet 中的自适应方法将视觉 Backbone 应用于高分辨率图像。预训练使用 Mask R-CNN 在 MS-COCO 上,除去 val/test 子集。 W 0 i W_0^i W0i Φ ( h 1 i ) \Phi(h_1^i) Φ(h1i) 采用相应的视觉 Backbone 权重和 0 来初始化。表达式的最大长度 40, 无级联的 6 层 BERT 作为语言 Backbone 来提取语言特征。 λ L 1 \lambda_{L1} λL1 λ g i o u \lambda_{giou} λgiou 设为 1, λ f o c a l \lambda_{focal} λfocal λ d i c e \lambda_{dice} λdice 设为 4。减少率 r r r 设为 16。视觉和语言 Backbone 的初始学习率 4 e − 5 4e-5 4e5,剩下部分的学习率 4 e − 4 4e-4 4e4。AdamW 优化器,90 epochs,batch size 256,权重衰减 1 e − 4 1e-4 1e4。在第 10 和 60 个 epochs 乘 10%。数据增强:水平翻转。NVIDIA A100 GPUs(不差钱)。

推理

  推理时,输入图像尺寸 448 × 448 448\times448 448×448,表达式的最大长度 40。RES 的二值化阈值设为 0.35。无需后处理,直接输出 bounding box 和 分割 mask。

5.3 与 SOAT 方法的比较

REC 任务

在这里插入图片描述

RES 任务

在这里插入图片描述

指代表达式的长度分析

在这里插入图片描述

5.4 消融分析

在这里插入图片描述

5.5 定量分析

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

六、结论和限制

  基于语言自适应权重,本文提出一种主动感知框架 VG-LAW 用于视觉定位。VG-LAW 能够直接注入表达式的信息到视觉 Backbone 的权重中而无需修改其结构。实验效果很好。

  限制主要有两点:VG-LAW 在可解释性方面差,整体推理过程隐式,很难理解推理过程;多任务头一次预测一个实例,限制了其在短语定位中的应用。

写在后面

  这篇文章创新点很足,算是打开了另一种思路。写作上也不拖沓,就是代码能不能开源呀?这么好的文章就别藏着掖着了。看看人家 LAVT。

相关文章:

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记

Language Adaptive Weight Generation for Multi-task Visual Grounding 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 指代表达式理解3.2 指代表达式分割3.3 动态权重网络 四、方法4.1 总览4.2 语言自适应权重生成语言特征聚合权重生成 4.3 多任务头4.4 训练目标 五、实…...

面试算法4:只出现一次的数字

题目 输入一个整数数组,数组中只有一个数字出现了一次,而其他数字都出现了3次。请找出那个只出现一次的数字。例如,如果输入的数组为[0,1,0,1,0,1,100],则只…...

#与##的用法

# 作用: 左右加双引号,使其变成字符串 #的作用:是在形参左右各加双引号,使它变成字符串。#define STR(param) #paramchar *pStr STR(hello); // 展开后 char *pStr “hello”; ## 作用:胶水,使…...

Flutter的路由router-页面跳转

文章目录 概念介绍基本路由(Basic Routing)跳转到某个页面弹出页面 命名路由(Named Routing)第三方路由管理库(Third-Party Routing Libraries) Android原生的路由Intent-based Routing(基于Int…...

24v转5v稳压芯片-5A大电流输出ic

这款24V转5V5A汽车充电芯片具有以下特性和参数: - 宽输入电压范围:4.5V至36V - 最大输出电流:5.0A - 高达92%的转换效率 - 恒流/恒压模式控制 - 最大占空比100% - 可调输出电压 - 2%的输出电压精度 - 集成40mΩ高侧开关 - 集成18mΩ低侧开关 …...

Layui + Flask | 表单元素(组件篇)(06)

表单元素是输入框、选择框、复选框、开关、单选框等表单项组件,用于对表单域进行输入。layui 的表单元素对原生的表单元素进行了大幅的用着,有好看的 UI 同时又有非常方便操作的 API。 输入框 https://layui.dev/docs/2.8/form/input.html 输入框组件是对文本框 <input ty…...

Kakfa - Producer机制原理与调优

Producer是Kakfa模型中生产者组件&#xff0c;也就是Kafka架构中数据的生产来源&#xff0c;虽然其整体是比较简单的组件&#xff0c;但依然有很多细节需要细品一番。比如Kafka的Producer实现原理是什么&#xff0c;怎么发送的消息&#xff1f;IO通讯模型是什么&#xff1f;在实…...

基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小&#xff08;行数和列数&#xff09; % 创…...

opencv 基础(持续更新中)

1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片&#xff1a; import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组&#xff08;彩色图片&am…...

科普现场!万博智云参加第五届张江汇智科普节

9月15日&#xff0c;第五届张江汇智科普节在汇智国际商业中心如期开展&#xff0c;展会中汇集了众多信息科技领域的新兴产品&#xff0c;展示内容主要分为国产替代和元宇宙场景展示两个方面。展现国产化最新科技成果&#xff0c;践行技术普惠理念&#xff0c;把高、精、专的技术…...

【记录】实现从Linux下载下载文件(文件导出功能)并记录过程产生的BUG问题。

前言 导出功能的实现&#xff0c;主要记录总结导出过程中出现的一些问题。 代码实现导出功能 public R templateDown(HttpServletResponse response) {String fileName "template.xlsx";// 清空responseresponse.reset();response.setCharacterEncoding("UTF…...

可扩展性表设计方案

文章目录 1 使用预留字段2 使用JSON字段3 使用单表继承4 构建属性表5 直接构建新表6 适当冗余 1 使用预留字段 在表设计初期&#xff0c;可以预留一些命名通用的备用字段&#xff0c;例如field1、field2、field3。当业务需要增加新字段时&#xff0c;就直接使用这些预留字段,无…...

Scotch: Combining SGX and SMM to Monitor Cloud Resource Usage【TEE的应用】

目录 摘要引言贡献 背景SMMXen Credit Scheduler与资源核算SGX 威胁模型Scheduler attacksResource interference attacksVM Escape attacks 架构Resource Accounting WorkflowCost of Accounting 具体的部署和评估见论文相关工作Resource Accounting基于SMM的方法基于SGX的系统…...

腾讯mini项目-【指标监控服务重构】2023-08-19

今日已办 benchmark How can we create a configuration for gobench with -benchmem – IDEs Support (IntelliJ Platform) | JetBrains 本机进行watermill-benchmark 使用 apifox 自动化测试上报固定数量的消息 启动watermill-pub/sub的 benchmark 函数 func BenchmarkPu…...

go实现grpc-快速开始

准备工作 Go, 最新版的 如果不会安装看Getting Started. Protocol buffer compiler, protoc, version 3. 想要安装, 请读Protocol Buffer Compiler Installation. 为 protocol compiler安装Go plugins: 想要安装运行以下命令: $ go install google.golang.org/protobuf/cmd/…...

linux上的init 0-6指令作用以及一些快捷键和系统指令

目录 linux上的init 0-6指令作用 CtrlAltF1-F7作用 Linux常用系统指令 查看linux内核版本 ubuntu和centos查看系统版本信息以及硬件信息 linux上的init 0-6指令作用 在Linux系统中&#xff0c;运行级别&#xff08;也称为init级别&#xff09;用来表示系统的不同状态或操作…...

Mixin 混入

Mixin 混入 混入 (mixin) 提供了一种非常灵活的方式&#xff0c;来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时&#xff0c;所有混入对象的选项将被“混合”进入该组件本身的选项。 怎么理解呢&#xff0c;就是每一个组件都会有一…...

pycharm快捷键

CtrlAltL 代码规范化 CtrlHome 回到代码最开始 CtrlEnd 回到代码最后面 shift回车 鼠标任意位置的下一行 altj 一直按可以选中相同的变量 alt鼠标左键 可以选择多个需要修改的变量或值 将光标放在某一行&#xff0c;home到最前面&#xff0c;end到最后…...

【面试刷题】——Linux基础命令

Linux基础命令是在Linux操作系统中执行常见任务的一组命令。以下是一些常用的Linux基础命令&#xff0c;它们用于管理文件系统、执行系统任务、查看文件内容等。 文件和目录操作&#xff1a; ls: 列出目录中的文件和子目录。 pwd: 显示当前工作目录的路径。 cd: 更改当前工作…...

第四步 Vue2 配置ESLint

ESLint 是一个广泛使用的 JavaScript 代码检查工具&#xff0c;可以帮助开发者在编写代码时发现并修复潜在的问题和错误。 在 第一步 创建工程 时虽然已经选择了包含 ESLint 预设配置&#xff0c;但还需要做一些调整&#xff0c;让我们使用起来能够更加的丝滑。 vue.config.j…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...