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}} Fv∈RC×sH×sW,其中 C C C、 s s s 分别表示通道数量和步长。最后,将 [CLS] token 表示的语言特征 F l 1 ∈ R d l F_l^1\in\mathbb{R}^{{d}_l} Fl1∈Rdl 和视觉特征送入多任务头中,预测指代表达式的 bounding box 和 mask。
4.2 语言自适应权重生成
语言特征聚合
考虑到指代表达式对应的是不同数量的语言 tokens,且视觉 Backbone 的每层可能会倾向于不同的语言 tokens,于是尝试用固定尺寸聚合每层的语言特征。根据多头注意力机制,引入一个可学习的特定层 embedding e i ∈ R d l e_i\in\mathbb{R}^{d_l} ei∈Rdl 用于视觉 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([eig⋅Flg,1,eig⋅Flg,2,⋯,eig⋅Flg,L])然后对特征拼接得到聚合的语言特征 h 0 i ∈ R d l h_0^i\in\mathbb{R}^{d_l} h0i∈Rdl:
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=1∑Lα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} W1i∈Rdl×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,Wv∈Rdout×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}} W0i∈Rdout×din 为特定层的静态可学习权重。 P ∈ R d o u t × d w P\in\mathbb{R}^{d_{out}\times d_{w}} P∈Rdout×dw 和 Q ∈ R d i n × d w Q\in\mathbb{R}^{d_{in}\times d_{w}} Q∈Rdin×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 2−d 视觉特征,提出一个语言自适应的池化模块 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} Fl1∈Rdl 首先投影到低维度空间 R k \mathbb{R}^{k} Rk,并计算其点乘相似度的 softmax 归一化后的注意力权重 A ∈ R H s × W s A\in\mathbb{R}^{\frac Hs\times\frac Ws} A∈RsH×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 4e−5,剩下部分的学习率 4 e − 4 4e-4 4e−4。AdamW 优化器,90 epochs,batch size 256,权重衰减 1 e − 4 1e-4 1e−4。在第 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模型中生产者组件,也就是Kafka架构中数据的生产来源,虽然其整体是比较简单的组件,但依然有很多细节需要细品一番。比如Kafka的Producer实现原理是什么,怎么发送的消息?IO通讯模型是什么?在实…...
基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小(行数和列数) % 创…...
opencv 基础(持续更新中)
1 前言 https://www.couragesteak.com/ 2 安装 3 基础属性demo 打开一张图片: import cv2img cv2.imread(./girl.jpg)print(img.shape) # (1536, 1024, 3) 数组形状 print(type(img)) # numpy 数组 print(img) # 三维数组(彩色图片&am…...
科普现场!万博智云参加第五届张江汇智科普节
9月15日,第五届张江汇智科普节在汇智国际商业中心如期开展,展会中汇集了众多信息科技领域的新兴产品,展示内容主要分为国产替代和元宇宙场景展示两个方面。展现国产化最新科技成果,践行技术普惠理念,把高、精、专的技术…...
【记录】实现从Linux下载下载文件(文件导出功能)并记录过程产生的BUG问题。
前言 导出功能的实现,主要记录总结导出过程中出现的一些问题。 代码实现导出功能 public R templateDown(HttpServletResponse response) {String fileName "template.xlsx";// 清空responseresponse.reset();response.setCharacterEncoding("UTF…...
可扩展性表设计方案
文章目录 1 使用预留字段2 使用JSON字段3 使用单表继承4 构建属性表5 直接构建新表6 适当冗余 1 使用预留字段 在表设计初期,可以预留一些命名通用的备用字段,例如field1、field2、field3。当业务需要增加新字段时,就直接使用这些预留字段,无…...
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系统中,运行级别(也称为init级别)用来表示系统的不同状态或操作…...
Mixin 混入
Mixin 混入 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。 怎么理解呢,就是每一个组件都会有一…...
pycharm快捷键
CtrlAltL 代码规范化 CtrlHome 回到代码最开始 CtrlEnd 回到代码最后面 shift回车 鼠标任意位置的下一行 altj 一直按可以选中相同的变量 alt鼠标左键 可以选择多个需要修改的变量或值 将光标放在某一行,home到最前面,end到最后…...
【面试刷题】——Linux基础命令
Linux基础命令是在Linux操作系统中执行常见任务的一组命令。以下是一些常用的Linux基础命令,它们用于管理文件系统、执行系统任务、查看文件内容等。 文件和目录操作: ls: 列出目录中的文件和子目录。 pwd: 显示当前工作目录的路径。 cd: 更改当前工作…...
第四步 Vue2 配置ESLint
ESLint 是一个广泛使用的 JavaScript 代码检查工具,可以帮助开发者在编写代码时发现并修复潜在的问题和错误。 在 第一步 创建工程 时虽然已经选择了包含 ESLint 预设配置,但还需要做一些调整,让我们使用起来能够更加的丝滑。 vue.config.j…...
[.NET学习笔记] - Thread.Sleep与Task.Delay在生产中应用的性能测试
场景 有个Service类,自己在内部实现生产者/消费者模式。即多个指令输入该服务后对象后,Service内部有专门的消费线程执行传入的指令。每个指令的执行间隔为1秒。这里有两部分组成, 工作线程的载体。new Thread与Task.Run。执行等待的方法。…...
【单线图的系统级微电网仿真】基于 PQ 的可再生能源和柴油发电机组微电网仿真(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
人脸识别技术应用安全管理规定(试行)|企业采用人脸打卡方式,这4条规定值得关注
近日,为规范人脸识别技术应用,国家互联网信息办公室起草了,并向全社会公开征求意见。该规定一共列举了25条,企业如借助人脸识别技术采集考勤打卡数据,以下4条规定值得关注。 第四条 只有在具有特定的目的和充分的必要…...
leetcode 817. 链表组件(java)
链表组件 题目描述HashSet 模拟 题目描述 给定链表头结点 head,该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums,该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数,这里对组件的定义为:链表中一段…...
分布式事务基础理论
基础概念 什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是一个事务的例子,交钱和交货必 须全部成功,事务才算成功,任一个活动失败,事务将撤销…...
《打造高可用PostgreSQL:策略与工具》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: 📚…...
【八大经典排序算法】快速排序
【八大经典排序算法】快速排序 一、概述二、思路实现2.1 hoare版本2.2 挖坑法2.3 前后指针版本 三、优化3.1 三数取中3.1.1 最终代码3.1.2 快速排序的特性总结 四、非递归实现快排 一、概述 说到快速排序就不得不提到它的创始人 hoare了。在20世纪50年代,计算机科学…...
vue 父组件给子组件传递一个函数,子组件调用父组件中的方法
vue 中父子组件通信,props的数据类型可以是 props: {title: String,likes: Number,isPublished: Boolean,commentIds: Array,author: Object,callback: Function,contactsPromise: Promise // or any other constructor }在父组件中,我们在子组件中给他…...
docker 获取Nvidia 镜像 | cuda |cudnn
本文分享如何使用docker获取Nvidia 镜像,包括cuda10、cuda11等不同版本,cudnn7、cudnn8等,快速搭建深度学习环境。 1、来到docker hub官网,查看有那些Nvidia 镜像 https://hub.docker.com/r/nvidia/cuda/tags?page2&name11.…...
uTool快捷指令
send("************"); quickcommand.sleep(200); keyTap("enter");...
酒店 深圳 网站制作/站长之家最新域名查询
本文转载自: https://www.cnblogs.com/dongrenwen/p/6226246.html 作者:dongrenwen 转载请注明该声明。vuejs取得URL中参数的值 地址:http://localhost:3333/#/index?id001 结果:001 console.log(this.$route.query.id)...
汕头网站建设运营团队/网站优化服务
这篇文章主要介绍了关于mac下brew安装php及扩展,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下Mac HomeBrew [2018-03-31]起弃用homebrew/php,php版本改名(如:php70 > php7.0),无法像以前…...
学做家常菜的网站有哪些/长沙seo优化报价
原文地址:https://www.jianshu.com/p/d81a5f7c9c4e 原文作者:DoubleBin 一、简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判…...
怎么做招聘网站链接/苏州新闻今天最新消息新闻事件
修改/etc/security/limits.conf: * soft nofile 204800* hard nofile 204800 bugbugbugbugbugbug:虽说是全局修改,但是用systemctrl启动的进程,最大值还是1024 在搭建HAproxykeepalived遇到此问题 centos7还要修改 /etc/systemd/system.conf …...
哪些网站做的最好/百度云盘资源共享链接群组链接
来源:toutiao.com/i6825148720728769028点赞功能是目前app开发基本的功能今天我们就来聊聊点赞、评论、收藏等这些场景的db数据库设计问题~1. 我们先来看看场景的需求:显示点赞数量判断用户是否点过赞,用于去重,必须的判断显示个人…...
如何建设一个子网站/班级优化大师是干什么用的
在互联网上,每天都有网站遭受黑客攻击,用户数据被窃取,这些数据通常包含用户名、密码(加密字段,甚至可能是明文)、电子邮件地址、IP地址等,用户的隐私安全将受到极大的威胁。 今天给大家推荐几个…...