大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记
Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记
- 一、Abstract
- 二、引言
- 三、相关工作
- 实例感知
- 通过类别名进行检索
- 通过语言表达式的检索
- 通过指代标注的检索
- 统一的视觉模型
- Unified Learning Paradigms
- Unified Model Architectures
- 四、方法
- 4.1 Prompt 生成
- 4.2 图像-Prompt 特征融合
- 4.3 目标发现和检索
- 4.4 训练和推理
- 训练
- 推理
- 五、实验
- 5.1 实施细节
- 5.2 在 10 个任务上的评估
- 目标检测和实例分割
- REC 和 RES
- SOT
- VOS
- MOT
- MOTS
- VIS
- R-VOS
- 5.3 消融和其它分析
- 六、结论
写在前面
马上又是一周周末了,开始写论文博客啦。
这是一篇顶会文章,标题很清楚,就是一个一统的框架用于解决各种任务。这类文章在 21 年的时候挺多的,现在倒是不常见了。因为需要的资源很多,外部数据集也很庞大,一般的小资源团队基本搞不定。但一旦出世,效果必然十分炸裂。
- 论文地址:Universal Instance Perception as Object Discovery and Retrieval
- 代码地址:https://github.com/MasterBin-IIAU/UNINEXT
- 收录于:CVPR 2023
一、Abstract
所有的实例感知任务旨在发现利用 queries 查询到的目标,例如类别名、语言表达式、目标标注,但这一领域被划分为多个独立的子任务。于是本文提出了一种统一的实例感知模型 UNINEXT。UNINEXT 将多个实例感知任务划分为一个统一的目标发现和检索过程,通过改变输入的 promots 能够弹性地感知不同类型的目标。于是有一些好处:不同任务的数据和标签词汇能够用于训练统一的模型,而且有益于那些缺乏训练数据的任务;参数有效性,能够降低冗余的计算。UNINEXT 在 20 个 数据集,10 种实例级别的任务,6 种视频级别的任务上效果很好。
二、引言
计算机视觉领域中,以目标为中心的理解是其中一个最关键和挑战性的任务。本文主要讨论其中的 10 个子任务。如下图所示:
最基础的任务则是目标检测、实例分割、多目标跟踪\分割、视频实例分割。除了这些类别名外,还有一些任务则需要其他的指代信息,例如 Referring Expression Comprehension (REC) /Segmentation (RES)、Referring Video Object Segmentation (R-VOS)、单目标跟踪、视频目标分割等等。这些任务统称为实例感知。
当前的实例感知方法都是基于一个或一部分子任务开发出的方法,且仅仅在特定的数据集上训练。这一设计有如下缺陷:独立的设计阻止了模型学习和共享不同任务的知识;多个任务间的交互合作可能被忽略掉了。受限于固定范围的类别,传统的目标检测器很难在多个目标类别的数据集上进行训练。于是问题来了:所有的实例感知任务旨在根据一些 queries 发现某些特定的目标,那么有没有可能设计一个统一的模型用于所有主流的实例感知任务呢?
于是本文提出 UNINEXT,首先根据三种不同的输入 prompt 重新组织 10 种感知任务:
- 类别名作为 Prompt,包含 Object Detection、Instance Segmentation、VIS,、MOT、MOTS
- 语言表达式作为 Prompt,包含 REC、RES、R-VOS
- 指代标注作为 Prompt,包含 SOT、VOS
然后提出一种统一的,prompt 引导的目标发现和检测方法来解决这些任务。具体来说,UNINEXT 首先在 prompts 的引导下发现 N N N 个目标 Proposals,然后根据实例-Prompt 匹配得分检索出最终的实例。为解决不同的 prompt 模态,采用一种 Prompt 生成模块,由一个指代文本编码器和一个指代视觉编码器组成。然后一个早期融合模块用于增强初始的视觉特征和 prompt embeddings。选择基于 Transformer 的目标检测器作为实例解码器。具体来说,解码器首先生成 N N N 个实例 Proposals,然后这些 Prompt 从这些 Proposals 中检索出匹配的目标。
在 10 个实例级别的感知任务上,统一使用一个模型,相同的模型参数,UNINEXT 在 20 个 benchmarks 上达到了 SOTA 的性能。本文贡献总结如下:
- 提出一个统一的 Prompt 框架用于统一的实例感知;
- UNINEXT 能够在不同的任务和领域上训练,不需要特定的任务头;
- UNINEXT 在 20 个 benchmarks,10 个实例感知任务上,达到了 SOTA 的性能。
三、相关工作
实例感知
通过类别名进行检索
目标检测和实例感知旨在找到所有特定类别的目标 boxes 或 masks。早期的目标检测器可以大致划分为两阶段和一阶段的方法。最近是一些基于 Transformer 的检测器开始兴起。同时,实例分割方法也可以根据是否需要 box 级别的检测器划分为基于检测器和无检测器的方法。目标检测和实例分割同时也是 MOT、MOTS、VIS 的基石。主流的方法采用在线 “检测-关联” 的策略。然而最近的一些 VIS 方法采用离线的方式,在 VIS2019 数据集上表现很好,但是在 OVIS 上表现不行。
通过语言表达式的检索
REC、RES、RVOS 旨在根据一条语言表达式发现一个特定的目标。与目标检测类似,REC 方法同样可以划分为三种类型。两阶段、单阶段和基于 Transformer 的方法。不同于 REC,RES 关注于设计不同的注意力机制从而实现视觉-语言的对齐。最近,SeqTR 提出将 REC 和 RES 视为点预测问题,达到了新的 SOTA。最后 R-VOS 可以视为 RES 在视频领域上的拓展。当前的 SOTA 方法是基于 Transformer 的离线方式。然而,离线方式妨碍了现实世界的应用,例如自动驾驶。
通过指代标注的检索
SOT 和 VOS 首先在视频的第一帧上面使用 boxes 或者 masks 确定要跟踪的目标,然后要求算法去预测被跟踪目标的轨迹。这一任务核心问题在于:如何提取信息量丰富的目标特征?如何融合目标信息与当前帧的表示?
对于第一个问题,大部分 SOT 方法通过一个 Siamese Backbone 编码目标信息。而 VOS 方法通常聚合多帧信息与相应的 masks 送入一个 memory 编码器中,提取细粒度的目标信息。对于第二个问题,之前的方法通常采用关联的手段,可能会导致信息丢失。最近的一些工作利用 Transformer 得到更具有区分性的表示。此外,VOS 中的特征融合也被空间-时间 memory 网络采用。
统一的视觉模型
分为统一的学习算法和统一的模型架构
Unified Learning Paradigms
通常是一种统一的学习算法用于覆盖尽可能多的任务和模态。例如 MuST、INTERN、Unified-IO、OFA。尽管这些工作在多个任务上的表现很好,但是模态内和模态间的关系还有待探索。
Unified Model Architectures
通常设计一种统一的框架或者模型结构用于一组密切关联的任务。例如 Mask R-CNN、Mask2Former、Pix2SeqV2、GLIP、Unicorn。而本文提出一种统一的 Prompt 引导的结构用于 10 种实例感知任务。
四、方法
首先将现有的实例感知任务分为三类:
- 目标检测、实例分割、MOT、MOTS、VIS,以类别名为 Prompt ,找到所有特定类别的实例。
- REC、RES、R-VOS,以表达式作为 Prompt,定位到某个特定的目标。
- SOT 和 VOS,使用第一帧给定的标注作为 Prompt,预测被跟踪目标的轨迹。
UNINEXT 由三个主要模块组成:prompt 生成、image-prompt 特征融合、目标发现和检索。
4.1 Prompt 生成
首先一个 Prompt 模块将原始的 prompts 输入转化为统一的格式。为解决语言相关的 Prompt,使用语言编码器 BERT,表示为 EncL。具体来说。对于类别引导的任务,将当前数据集内出现的类别名作为语言表达式。以 COCO 为例,表达式可以写作:“person. bicycle. … . toothbrush”。对于所有的类别引导和表达式引导的任务,语言表达式通过 EncL,得到一个 Prompt embedding F p ∈ R L × d F_p\in\mathbb{R}^{L\times d} Fp∈RL×d, L L L 为序列长度。
对于标注引导的任务,采用一个指代视觉编码器 Enc V ref \text{Enc}_\text{V}^\text{ref} EncVref。具体来说,首先在相关帧的指代位置处裁剪出一个 2 2 2^2 22 倍原目标区域的模板。然后将这一模板调整为固定尺寸 256 × 256 256\times256 256×256。接下来添加一个额外的通道,名为目标先验,拼接上去形成一个 4 通道的输入。目标区域先验处的值设为 1,其它为 0。然后这一模板图像与目标先验一起通过 Enc V ref \text{Enc}_\text{V}^\text{ref} EncVref,得到一个级联的特征金字塔 { C 3 , C 4 , C 5 , C 6 } \{C_3,C_4,C_5,C_6\} {C3,C4,C5,C6},相应的空间尺寸为 32 × 32 32\times32 32×32、 16 × 16 16\times16 16×16、 8 × 8 8\times8 8×8、 4 × 4 4\times4 4×4。最后将所有特征上采样到 32 × 32 32\times32 32×32,之后相加。展平后得到最终的 Prompt embedding F p ∈ R 1024 × d F_p\in\mathbb{R}^{1024\times d} Fp∈R1024×d。
Prompt 生成过程表示如下:
F p = { E n c L r e f ( exp ression ) expression-guided E n c L r e f ( concat ( categories ) ) category-guided m e r g e ( E n c V r e f ( [template, prior] ) annotation-guided F_p=\begin{cases}\mathrm{Enc}_\mathrm{L}^\mathrm{ref} (\exp\text{ression})~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\text{expression-guided}\\\mathrm{Enc}_\mathrm{L}^\mathrm{ref}(\text{concat}(\text{categories}))~~~~~~~~~~~~~~~~~~~~~~~~\text{category-guided}\\\mathrm{merge}(\mathrm{Enc}_\mathrm{V}^\mathrm{ref}(\text{[template, prior]})~~~~~~~~~~~~~~~~ \text{annotation-guided}&\end{cases} Fp=⎩ ⎨ ⎧EncLref(expression) expression-guidedEncLref(concat(categories)) category-guidedmerge(EncVref([template, prior]) annotation-guided
4.2 图像-Prompt 特征融合
与 Prompt 并行,整个图像穿过另一个视觉编码器 Enc V \text{Enc}_\text{V} EncV,得到级联的视觉特征 F v F_v Fv,然后采用一个提前融合模块。具体来说。一个双向的 cross-attention(Bi-XAtt)模块用于检索不同输入的信息,然后将检索到的表示添加到原始的特征上。这一过程描述为:
F p 2 v , F v 2 p = B i − X A t t ( F v , F p ) F v ′ = F v + F p 2 v ; F p ′ = F p + F v 2 p \begin{aligned} &F_{\mathrm{p2v}},F_{\mathrm{v2p}}=\mathrm{Bi-XAtt}(F_{v},F_{p}) \\ &F_{v}^{\prime}=F_{v}+F_{\mathbf{p}2\mathbf{v}};F_{p}^{\prime}=F_{p}+F_{\mathbf{v}2\mathbf{p}} \end{aligned} Fp2v,Fv2p=Bi−XAtt(Fv,Fp)Fv′=Fv+Fp2v;Fp′=Fp+Fv2p 不同于 GLIP,其采用 6 层的视觉-语言融合层和 6 层外部 BERT 层用于特征增强,本文的提前融合模块则更有效率。
4.3 目标发现和检索
在提出显著性的视觉和 prompt 表示后,下一个关键步骤则是将输入的特征转化为不同感知任务中的实例。UNINEXT 采用 Deformable-DETR 中的编码器-解码器架构。
Transformer 编码器以级联的 prompt 感知的视觉特征作为输入。然后采用 Multi-scale Deformable Self-Attention 增强目标信息。此外,添加辅助的预测头用于编码器的结尾,生成 N N N 个初始的参考点作为解码器的输入。
Transformer 解码器以增强的多尺度特征, N N N 个参考点 和 N N N 个目标 queries 作为输入。本文尝试两种 query 生成策略:静态 query,不随图像或 Prompts 而改变;基于 Prompt 的动态 queries。第一种策略很容易通过 nn.Embedding(N,d) \text{nn.Embedding(N,d)} nn.Embedding(N,d) 实现,而第二种策略则可以通过池化序列维度,增强的 Prompt 特征 F v ′ F_v^{\prime} Fv′ 得到,之后重复 N N N 次。实验部分表明静态策略通常执行的比动态策略好。原因可能是静态部分包含了更丰富的信息,同时拥有更好的训练稳定性。
在解码器的结尾,采用一组预测头来得到最终的实例预测,产生目标的 boxes 和 masks。此外,引入一个 embedding 头用于辅助 MOT、MOTS、VIS 所需要的轨迹。
接下来产生精确的目标。具体来说,给定早期融合后的 prompt embedding F p ′ F_p^{\prime} Fp′,对于类别引导任务,将每个名字的 embedding 视为一个权重矩阵 W ∈ R 1 × d W\in\mathbb{R}^{1\times d} W∈R1×d。此外,对于表达式引导和标注引导的任务,权重矩阵 W W W 通过对聚合的 prompt embedding F p ′ F_p^{\prime} Fp′,使用全局平均池化 global average pooling (GAP) 沿着序列维度得到。给出公式描述过程:
W = { F p ′ [ i ] , i ∈ { 0 , 1 , . . . , C − 1 } category 1 L ∑ i = 0 L F p ′ ( i , j ) expression/annotation W=\begin{cases}F_p'[i],i\in\{0,1,...,C-1\}&\text{category}\\\frac{1}{L}\sum_{i=0}^LF_p'(i,j)&\text{expression/annotation}\end{cases} W={Fp′[i],i∈{0,1,...,C−1}L1∑i=0LFp′(i,j)categoryexpression/annotation
最终,实例-Prompt 匹配得分 S S S ,表示为目标特征和转换后的权重矩阵的乘积: S = F ins W T S=F_\text{ins}W^{\text{T}} S=FinsWT,通过 Focal Loss 监督其训练。
4.4 训练和推理
训练
整体的训练过程包含三个连续阶段:通用的感知预训练;图像级别的共同训练;视频级别的共同训练。第一阶段,预训练 UNINEXT 在大规模目标检测数据集 Objects365 上。由于 Objects365 没有 mask 标注,于是引入 BoxInst 中提出的辅助损失用于训练 mask 分支,于是损失函数为:
L s t a g e 1 = L r e t r i e v e + L b o x + L m a s k b o x i n s t \mathcal{L}_{\mathrm{stage}1}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{box}}+\mathcal{L}_{\mathrm{mask}}^{\mathrm{boxinst}} Lstage1=Lretrieve+Lbox+Lmaskboxinst
然后基于第一阶段的预训练权重,在图像数据集 COCO、RefCOCO、RefCOCO+、RefCOCOg 上微调 UNINEXT。使用 Dice Loss 和 Focal Loss 进行 mask 的训练:
L s t a g e 2 = L r e t r i e v e + L b o x + L m a s k \mathcal{L}_{\mathrm{stage2}}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{box}}+\mathcal{L}_{\mathrm{mask}} Lstage2=Lretrieve+Lbox+Lmask
最后在视频级别的数据集上微调 UNINEXT。为防止模型遗忘之前在图像级别上学到的知识,将图像级别的数据集转化为伪视频,和其它视频数据集一起训练。总结下,第三阶段的训练数据包含:伪标签视频、SOT&VOS 数据集(GOT-10K、LaSOT、TrackingNet、Youtube-VOS),MOT&VIS 数据集(BDD100K、VIS19、OVIS),R-VOS 数据集 Ref-Youtube-VOS。同时,一个用于 SOT&VOS 任务的指代视觉编码器和一个外部的 embedding 头用于辅助优化。于是第三阶段的损失如下:
L s t a g e 3 = L r e t r i e v e + L l o o x + L m a s k + L e m b e d \mathcal{L}_{\mathrm{stage}3}=\mathcal{L}_{\mathrm{retrieve}}+\mathcal{L}_{\mathrm{loox}}+\mathcal{L}_{\mathrm{mask}}+\mathcal{L}_{\mathrm{embed}} Lstage3=Lretrieve+Lloox+Lmask+Lembed
推理
对于类别引导的任务,UNINEXT 预测不同类别的实例并将其与之前的轨迹关联起来,这一过程是在线的方式。对于表达式引导和标注引导的任务,直接选择与给定 Prompt 最高匹配得分的目标作为最终的结果,无需后处理。
五、实验
5.1 实施细节
尝试不同的视觉 Backbone 作为编码器,如 ResNet-50、ConvNeXt-Large、ViT-Huge。BERT 为文本编码器,其参数在第一个阶段训练而在第二个阶段冻结。Transformer 中的编码器和解码器结构有 6 层的编码器层和 6 层的解码器层。目标 queries 的数量 N = 900 N=900 N=900。优化器 AdamW,权重衰减 0.05。预训练在 Objects365 上采用 32 个 A100 GPU,而在其它阶段则采用 16 块 A100(一般的小作坊就不用尝试啦)。
5.2 在 10 个任务上的评估
目标检测和实例分割
REC 和 RES
SOT
VOS
MOT
MOTS
VIS
R-VOS
5.3 消融和其它分析
所有的模型均采用 ResNet-50 作为 backbone,在五个任务(目标检测、REC、VOS、R-VOS、VIS)的五个数据集 COCO、RefCOCO、Youtube-VOS、Ref-Youtube-VOS、Youtube-VIS 2019 上进行评估。结果如下表所示:
六、结论
本文提出 UNINEXT,采用 Prompt 引导的目标发现和检索算法统一了 10 个实例感知任务,大量实验表明 UNINEXT 在 20 个数据集上,同一套模型参数达到了 SOTA 的性能。
写在后面
附录还有一些内容,关于训练细节、可视化、损失函数啥的,这里就不过多展开了。通篇读下来,是一个以 Prompt 为主要形式的框架,新颖性可能也不算太高吧,毕竟有 SAM 和 Unified 等模型在前面开路,但是这个调参和实验的工作量应该是值得一篇顶会论文的。
相关文章:

大一统模型 Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记
Universal Instance Perception as Object Discovery and Retrieval 论文阅读笔记 一、Abstract二、引言三、相关工作实例感知通过类别名进行检索通过语言表达式的检索通过指代标注的检索 统一的视觉模型Unified Learning ParadigmsUnified Model Architectures 四、方法4.1 Pr…...

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版
上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…...

react等效memo的方法
视频教程 前端技术|Dan博客|在你写memo()之前_哔哩哔哩_bilibili 把与ExpensiveTree的无关的dom做成一个组件 第二种情况,color在ExpensiveTree组件的父级dom 创建一个组件,将state的color和input写上,而ExpensiveTr…...

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)
摘要 由于要求较高的时效性和劳力投入,果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果,光照影响、枝叶遮挡和果实重叠等情况普遍存在,这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的…...

【机器学习】聚类(三):原型聚类:高斯混合聚类
文章目录 一、实验介绍1. 算法流程2. 算法解释3. 算法特点4. 应用场景5. 注意事项 二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 全局调试变量2. 调试函数3. 高斯密度函数(phi)4. E步(getExpectation)…...

线上ES集群参数配置引起的业务异常案例分析
本文介绍了一次排查Elasticsearch node_concurrent_recoveries 引发的性能问题的过程。 一、故障描述 1.1 故障现象 1. 业务反馈 业务部分读请求抛出请求超时的错误。 2. 故障定位信息获取 故障开始时间 19:30左右开始 故障抛出异常日志 错误日志抛出timeout错误。 故障之前…...

【Docker】Docker 仓库管理和Docker Dockerfile
作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖…...

面试必问:如何快速定位BUG?BUG定位技巧及N板斧!
01 定位问题的重要性 很多测试人员可能会说,我的职责就是找到bug,至于找原因并修复,那是开发的事情,关我什么事? 好,我的回答是,如果您只想做一个测试人员最基本最本分的事情,那么可…...

力扣114. 二叉树展开为链表(java,用树模拟链表)
Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 1.展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左…...
学生成绩管理系统(python实现)
学生成绩表信息包括学号、姓名、各科课程成绩(语文、数学、英语、政治)和总分。用带头结点的单链表管理学生成绩表,每个学生的信息依次从键盘输入,并根据需要进行插入、删除、排序、输出等操作。 import json# 初始化系统 studen…...
【Leetcode合集】1410. HTML 实体解析器
1410. HTML 实体解析器 1410. HTML 实体解析器 代码仓库地址: https://github.com/slience-me/Leetcode 个人博客 :https://slienceme.xyz 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""…...

04-React脚手架 集成Axios
初始化React脚手架 前期准备 1.脚手架: 用来帮助程序员快速创建一个基于xxx库的模板项目 1.包含了所有需要的配置(语法检查、jsx编译、devServer…)2.下载好了所有相关的依赖3.可以直接运行一个简单效果 2.react提供了一个用于创建react项目的脚手架库…...

时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测
时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于BiLSTM-AdaBoost双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BiLSTM-Adaboost…...

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)
Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…...

【【Linux系统下常用指令学习 之 二 】】
Linux系统下常用指令学习 之 二 文件查询和搜索 文件的查询和搜索也是最常用的操作,在嵌入式 Linux 开发中常常需要在 Linux 源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。 1、命令 find find 命令用于在目录结构中查找文件…...
Git-将指定文件回退到指定版本
场景1:修改了文件/path/to/file,没有提交,但是觉得改的不好,想还原。 解决: git checkout -- /path/to/file 场景2:修改了文件/path/to/file,已经提交,但是觉得改的不好,…...

docker环境安装
环境 主机环境 1. 宿主机环境 ubuntu-22.04.3-live-server-amd64 ,下载地址: https://mirrors.aliyun.com/ubuntu-releases/22.04.3/ubuntu-22.04.3-live-server-amd64.iso 2. apt 包管理器,镜像源修改 : 将 http://cn.archive.ubunt…...

【Java】智慧工地云平台源码(APP+SaaS模式)
在谈论“智慧工地”之前,我们首先得知道传统工地为什么跟不上时代了。 说起传统工地,总有一些很突出的问题:比如工友多且杂,他们是否入场、身体状况如何,管理人员只能依靠巡查、手工纪录来判断,耗时耗力&am…...

2016年11月10日 Go生态洞察:七年的Go语言旅程
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
深入了解Java中SQL优化的关键技巧与实践
引言 介绍SQL优化对于Java应用性能的重要性,并概述本文将要讨论的内容。 1. 编写高效的SQL语句 - **索引的类型与使用:** 解释B-Tree索引、哈希索引等类型的区别,以及如何根据查询需求合理创建和使用索引。 - **查询优化器:** 说明…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...