基础学习:(9)vit -- vision transformer 和其变体调研

文章目录

  • 前言
  • 1 vit 热点统计
    • 1.1 目标分类 / 基础与改进
    • 1.2 轻量化 ViT / 移动部署优化(移动端)
    • 1.3 密集预测(语义分割 / 深度估计等)
    • 1.4 目标/词汇 检测
    • 1.5 掩码改进
    • 1.6 多模态/ 通用大模型
    • 1.7 分布式训练 / 效果提升
    • 1.8 任务特化应用(图表 / 语音 / 视频等)
  • 2 重点网络分析
    • 2.1 Transformers for Image Recognition at Scale
      • 2.1.1 结构描述
      • 2.1.2 embedding
    • 2.2 Vision Transformers Need Registers
      • 2.2.1 DINOv2
      • 2.2.2 为什么DINO v2 有而v1没有?
    • 2.3 FastViT
      • 2.3.1 RepMixer
      • 2.3.2 结构重参数化(Structural Reparameterization)
      • 2.3.3 大核(7x7)卷积
    • 2.4 Vision Transformers for Dense Prediction
      • 2.4.1 encoder
      • 2.4.2 Convolutional decoder
      • 2.4.3 fusion
    • 2.5 Exploring Plain Vision Transformer Backbones for Object Detection
    • 2.6 BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers
      • 2.6.1 VQ-KD
      • 2.6.2 patch aggregation strategy
      • 2.6.2 code book collapse
    • 2.7 VATT: Transformers for Multimodal Self-Supervised Learning from Raw Video, Audio and Text
      • 2.7.1 Tokenization and Positional Encoding 和 DropToken:
      • 2.7.2 Common Space Projection
      • 2.7.3 Common Space Projection
      • 2.7.4 only self attention
    • 2.8 总结
    • 2.8 Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks
    • 2.9 Qwen-VL
      • 2.9.1 Naive Dynamic Resolution
      • 2.9.2 Multimodal Rotary Position Embedding
      • 2.9.3 Unified Image and Video Understanding
    • 2.10 Colossal-AI
    • 2.11 Neural Architecture Search using Property Guided Synthesis(NAS)


前言

transformer 是一条新的思路, 可以在 paper with code 上看到 vit 的火爆程度
在这里插入图片描述
其中 vit相关变体网络, 在 paper with code 上累计大概2000篇论文,如果一次都看没有意义,因此我这里统计了 前40 人气论文进行初步探索以增加 在 ViT方面的广度.


1 vit 热点统计

我这里根据paper with code 上前40的 论文进行统计,基本涵盖了 检测/识别/分割/深度识别/工程落地等几个方向.从
在这里插入图片描述

1.1 目标分类 / 基础与改进

名称描述starts
Transformers for Image Recognition at Scale原始 ViT 提出,图像 patch + Transformer11,261
DeiT III: Revenge of the ViT高效训练技巧,无需大数据也能训练 ViT4,177
Scaling Vision Transformers扩大 ViT 模型规模的训练优化2,822
Better plain ViT baselines for ImageNet-1kViT 标准 baseline 提升2,822
Vision Transformers Need Registers引入寄存器 token 改善信息保留10,300
AutoFormer自动结构搜索 ViT 架构1,742
PVT v2金字塔结构 Transformer,适合密集任务1,797

1.2 轻量化 ViT / 移动部署优化(移动端)

名称描述starts
MobileViTCNN + ViT 融合,面向移动端1,856
FastViT重参数化结构,高速高效33,886
Reversible Vision Transformers可逆结构,节省内存6,901
DepGraph针对 ViT 的结构剪枝优化2,980

1.3 密集预测(语义分割 / 深度估计等)

名称描述starts
Vision Transformers for Dense PredictionDense Prediction Transformer(DPT)提出143,269
MiDaS v3.1单目深度估计,ViT backbone4,834
Depth Pro高效深度估计4,357
A Simple Single-Scale ViT结构简单但效果强,分割与检测77,494
Efficient Track Anything任意目标跟踪模块2,319
Multi-Granularity Prediction for Scene Text Recognition场景文字识别,使用多尺度 ViT1,688

1.4 目标/词汇 检测

名称描述starts
Simple Open-Vocabulary Object Detection with Vision Transformers支持开放类名目标检测3,512
Grounding DINO grounding + DINO组合用于大规模目标检测7,889
Exploring Plain Vision Transformer Backbones for Object Detection研究纯 ViT backbone 在检测中的性能31,780

1.5 掩码改进

名称描述starts
BEiT v2自监督视觉 tokenizer + Masked Modeling21,094
Emerging Properties in Self-Supervised Vision TransformersViT 自监督下的泛化与行为分析6,777
Improving Pixel-based MIM by Reducing Wasted Modeling Capability提升掩码建模 token 利用率3,635
VATT 跨模态(视频/音频/文本)自监督预训练35,370

1.6 多模态/ 通用大模型

名称描述starts
Grounded SAMViT 结合 SAM,用于泛化视觉任务16,148
Qwen-VL Technical Report多模态 GPT-VL,视觉编码为 ViT9,904
Yi: Open Foundation Models by 01.AI通用多模态开源模型7,831
InternLM-XComposer2-4KHD视觉输入自适应支持 4K2,813

1.7 分布式训练 / 效果提升

名称描述starts
Colossal-AI分布式训练系统,支持大规模 ViT40,790
Neural Architecture Search using Property Guided Synthesis结构搜索提升 ViT 表现35,372
Pyramid Adversarial Training Improves ViT Performance对抗训练增强鲁棒性3,512

1.8 任务特化应用(图表 / 语音 / 视频等)

名称描述starts
TinyChart图表结构理解与 token 合并2,158
FastFlow基于 ViT 的无监督异常检测2,789
S4ND视频状态建模(state space + transformer)2,609
Pushing the Limits of Self-Supervised Speaker Verification using Regularized DistillationViT 用于语音验证的蒸馏框架1,932

2 重点网络分析

2.1 Transformers for Image Recognition at Scale

2.1.1 结构描述

和 nanogpt 不同的是 ViT 只有encoder 结构, Nano GPT 是 decoder only.
[ViT / BERT] (Encoder-only): input → Attention(no mask) → FFN → Output
[NanoGPT / GPT] (Decoder-only): input → Attention(masked, 也就是 只能看到过去的token) → FFN → Output

这是 ViT 的 attention 过程,没有 mask 所以 qkv 输出可以直接懟到输出上. 其中欧冠你 attend 是 softmax
在这里插入图片描述
看代码也可以看到 nano gpt 仅仅是增加了一个mask 过程.其他和 vit 无差别.
在这里插入图片描述

2.1.2 embedding

作为图像处理最主要的就是如何将图像编码,
可以看到ViT 就是将图像 分成 3 * 16 * 16 的 小 patch, 每个patch 中的 一个 pixel 就是属于 layerNorm中的一个维度, 比如这里 3 * 16 * 16 刚好是 768.
在这里插入图片描述
我个人在实践的时候发现,如果用 hugging face 的 pretrained 模型,将其参数迁移ViT(当然 ViT进行了改动,但是分类结果和 hugging face的不一致…不过作为调研和学习足够了,剩下的工程化过程再解)

2.2 Vision Transformers Need Registers

其实这个人气并不是 这篇论文,而是 DINOv2 一个自监督学习ViT
在这里插入图片描述

2.2.1 DINOv2

其实原论文比较朴素, 就是在 ViT 训练中,发现经常有artifacts 出现, 下图就是 “高范数伪影的特征”, 这些token的范数约为其他token的10倍,占总token数量的约2%。这些token通常出现在图像的背景区域,原本信息量较低, 但携带更多的全局信息。

这种情况出现在例如图中的 DINO v2 非常多平坦区域的artifact, 而 DINO v1 几乎没有.

在这里插入图片描述

2.2.2 为什么DINO v2 有而v1没有?

原因一:训练目标不同(Contrastive vs. Distillation)
DINO v1 使用的是 对比学习(contrastive learning),目标是学习空间上连贯、语义一致的 embedding。它鼓励所有 token 都有意义(避免冗余 token)。会对异常 token 产生惩罚。所以模型不会“偷偷”把背景 patch 用作临时内存。

原因二:模型容量更大,ViT 有“懒惰策略”
训练目标更复杂,主要关注 cls token 的表现。对 patch token 的约束变弱,模型更容易利用背景区域做“缓存”。

原因三:DINO v1 更强的 per-token 学习机制
DINO v1 每个 patch token 都被要求有一致性输出(比如用不同视角增强后的结果一致)。而 DINO v2 由于有 teacher-student distillation 和更多 cls-guided 目标,patch token 不一定需要一致。

说实话我觉得 cls-guided 才是罪魁祸首.
ViT 分类策略中经常有:[CLS] + patch_1 + patch_2 + … + patch_n 这种方式 CLS token 就成了全局

因为论文作者这么说:The root cause of the artifact is that ViTs are usually supervised via the [CLS] token only, allowing the model to utilize other tokens for internal memory without constraint.

所以作者引入了更多的全局 register 变为:[CLS] + Register1 ,…,Register R, patch_1 + patch_2 + … + patch_n
说白了就是从 [CLS] + N 个 patch token 变为 [CLS] + R 个 Register token + N 个 patch token

2.3 FastViT

fastViT 来自于苹果. 目标是做一个卷积和Attention 的低延时混合架构,因为这种架构有效地结合了 CNN 和 Transformer(以前的构架是 cnn 后面懟个transformer, 这里是融合) 的优势,在多个视觉任务上有竞争力。本文的目标是建立一个模型,实现 SOTA 的精度-延时 Trade-off.
核心点有三个:
(1)结构重参数化(Structural Reparameterization)
该模块利用结构重参数化技术,在训练阶段采用具有跳跃连接的复杂结构以增强表示能力,而在推理阶段将其简化为更高效的结构,从而降低内存访问成本并提高推理速度。
这里包括 repmixer 和

(3)大核(7x7)卷积的应用
FastViT 在保持低延迟的同时,利用大核卷积增强模型的感受野和特征提取能力,从而提升精度。

其整体结构如下(苹果工程师写的论文真的非常清晰, 看得巨爽):
在这里插入图片描述
图中 DW 指depthwise, 最左侧是整体数据流. 每个子图中写明了 training 的结构和inference结构. 按照描述 每个"Patch Emb. stride=2" 都是相同结构. stage1-3 也是相同结构(原文是这么描述的 Stages 1, 2, and 3 have the same architecture and uses RepMixer for token mixing)

2.3.1 RepMixer

在这里插入图片描述在这里插入图片描述
这个结构可以有效减少 memory 访问 开销. 其实 repmixer 是 结构参数化的一部分,只是比较重要,我单独拎出来说.

2.3.2 结构重参数化(Structural Reparameterization)

Output = Conv(x) + x # skip connection
和 2.3.1 一样,只是2.3.1 单独拎出来说.

2.3.3 大核(7x7)卷积

作者指出,如果用 self-attention 计算负担较重,所以引入了大核卷积. 而且作者指出已有 卷及可以替代 attention
在这里插入图片描述

2.4 Vision Transformers for Dense Prediction

这是 vit 里的爆款. 应用于像素级的密集预测任务,如语义分割和单目深度估计. 对于很多分割任务, 传统的卷积神经网络(CNN)在处理密集预测任务时,通常采用编码器-解码器结构。编码器逐步下采样输入图像,以提取多尺度特征;解码器则将这些特征逐步上采样,恢复到原始分辨率。然而,这种下采样-上采样的过程可能导致细节信息的丢失,尤其是在深层次的特征中。典型例子就是 UNet.
在这里插入图片描述

2.4.1 encoder

Encoder部分就是VIT. ViT 输出的 token 被重构为不同尺度的 feature maps,用于密集预测.

2.4.2 Convolutional decoder

在这里插入图片描述

我是这么理解的:
1 如果有, 那么要去掉 [CLS] token
2 因为ViT 的 token 是 3 * patch_height * patch_width 我们用 N = h * w
所以卷积就可以 将 数据从 (B, N, D) 卷积为 (B, D, h, w), 也就是 将N 展开 为 h, w.

2.4.3 fusion

在这里插入图片描述
看来这里也需要不同尺寸的数据, 进行 crouse to fine 的进行判断. 这里 没什么特别的地方和UNet 非常像.

2.5 Exploring Plain Vision Transformer Backbones for Object Detection

这个ViT 是 何凯明大神的工作–SFP 简单特征金字塔
如截图, 就是研究什么模块发挥什么作用.
在这里插入图片描述

2.6 BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers

这里有个几个词汇:
(1) patch aggregation : patch 汇集
(2) code book collapse: 在 VQ(Vector Quantization)训练中,一个常见问题是 codebook collapse,即只有少数几个 code(离散码)会被频繁使用,大多数 code 永远用不上

首先作者肯定了Masked image modeling (MIM) 在自监督学习上的效果, 同时也指出问题就是 大部分的已有工作都是在 low-level image pixels 上搞事情, 所以本文提出了一个 方法将 MIM 从 pixel-level 提高到 semantic-level.

作者提出了一个自监督的网络,并且有如下贡献:
1 使用 Vector-Quantized Knowledge Distillation (VQ-KD),也就是使用一个强大的视觉教师模型(比如 RegNet)生成 soft target,然后再离散化成视觉 token。
2 提出了一个 patch汇合策略(patch aggregation strategy), 这个策略会基于给定的离散语义token上增强全局结构.
在这里插入图片描述

2.6.1 VQ-KD

VQ-KD 的结构如下图:
在这里插入图片描述
这里要说明的是,其实作者工作内容没有那么牛逼:
1 构建了一个 codebook
2 将输入图片通过ViT 生成 token
3 和 code book 比较 二范式的距离, 进行翻译后 得到一个 visual token
4 再将visual token 送给decoder 也是 ViT, 得到一个 semantic reconstruction, 这个reconstruction 可以 和 老师 模型的 reconstruction 进行比较
所以 VQ 就是常见做法, KD 就是 用一个 teacher 模型 比较下结果, 就这么简单.

这里我说下 VQ, 先要定义一个离散隐变量空间KaTeX parse error: Undefined control sequence: \inR at position 2: e\̲i̲n̲R̲^{K*D}, 也成为embedding 空间. 其中 K 是空间大小, D 是 每个embedding向量 e i e_i ei的维度.所以得到一个 encoder 的输出token可以按照下述方法量化:
z q ( x ) = Q u a n t i z e ( z e ( x ) ) = e k 其中 , k = a r g m i n i ∣ ∣ z e ( x ) − e i ∣ ∣ 2 z_q(x) = Quantize(z_e(x)) = e_k 其中 , k= arg min_i || z_e(x) - e_i||_2 zq(x)=Quantize(ze(x))=ek其中,k=argmini∣∣ze(x)ei2 也就是图中说的找二范数距离.

该方法和之前的方法: VQ-VAE非常像,只不过红框内换成了 ViT
在这里插入图片描述
VQ-VAE的讲解可以看:https://zhuanlan.zhihu.com/p/463043201,

2.6.2 patch aggregation strategy

这个 aggregation 比较常见,这里做一个对比

传统 CNNViT 的 Patch Aggregation
卷积 + 池化patch 合并 + 投影
多层感受野变大token 数量减少,语义增强

下图 是作者列出的 patch aggregation strategy, 和 很多 ViT 一样, 用[CLS] token 与所有 patch token 建立关联,从而提升模型的全局理解能力, 后面基层的token 只用 cls 前面
在这里插入图片描述
代码中也可以看到 ,前6层作为一个输入,后6层的 cls 作为 一个 输入, 送入两层的ViT中,就是这么简单
在这里插入图片描述
来自:https://blog.csdn.net/weixin_50862344/article/details/131262830

2.6.2 code book collapse

作者

2.7 VATT: Transformers for Multimodal Self-Supervised Learning from Raw Video, Audio and Text

框架的核心思想是使用纯 Transformer 架构(无卷积)从原始的多模态数据(视频、音频和文本)中学习通用的表示。​VATT 通过对比学习的方式进行训练,能够在多个下游任务中实现优异的性能.
该论文中定义:
视觉模态(vision modality): rgb 的 video
听觉模态(audio modality): 就是声波
文本模态(text modality): 就是字符串
注意这里有个概念 voxel: 是 "volume" + "pixel" 的组合词,表示三维空间中的一个小立方体单位,就像像素是二维图像中的最小单位一样。

该论文有益点有3:
(1) Tokenization and Positional Encoding 和 DropToken:
(2) Common Space Projection
(3) Multimodal Contrastive Learning

2.7.1 Tokenization and Positional Encoding 和 DropToken:

对于video 数据:
假设整个 video 数据尺寸是 THW , 一个 patch 大小 是 t * h * w, 那么就可以将 video转为 ⌈ T / t ⌉ × ⌈ H / h ⌉ × ⌈ W / w ⌉ \lceil T/t \rceil \times \lceil H/h \rceil \times \lceil W/w \rceil T/t×H/h×W/w 个 patch.
注意: 最小单元 是 t * h * w * 3 叫做 voxel
因此对于 video 形成的可用于训练学习的 weight 为 W v p ∈ R t ∗ h ∗ w ∗ 3 × d W_{vp} \in R^{t*h*w*3 \times d} WvpRthw3×d , d 是向量的维度. 也就是 d 个 voxel. vp 指 video position

对于 auido 数据:
假设整个audio 数据是1D 数据,长度 为T’, 那么就是 ⌈ T ′ / t ′ ⌉ \lceil T'/t' \rceil T/t
因此对于 audio 形成的可用于训练学习的 weight 为 W a p ∈ R t ′ × d W_{ap} \in R^{t' \times d} WapRt×d , d 是向量的维度. 也就是 d 个 voxel. ap 指 audio position

对于 text 数据:
和 nanogpt 基本一样, 映射到 一个字典空间中, 该空间 是 v*d, v 指 vocabulary size.
那么有 W t p ∈ R v × d W_{tp} \in R^{v \times d} WtpRv×d

得到最终 embedding
在这里插入图片描述

因此, 可以看到 只有 video 有 hoizon 和 vertical 分量, text 和 audio 都没有.

模态使用的位置信息说明
TextTemporal(时间/顺序)文本是一个自然的序列:第1个词、第2个词…
AudioTemporal(时间帧序列)通常使用音频的时间维度进行帧级patch划分(例如 spectrogram),也只用1D位置编码
VideoTemporal Horizontal + Vertical视频是三维结构(时间 × 高 × 宽),所以需要 3D 位置编码

DropToken 和 dropout 类似,就是随机丢掉token :
(1) 防止过拟合
(2) 防止 过分以来某个token

2.7.2 Common Space Projection

首先说明下两个专有词汇:三元组: video-audio-text triplet 以及 语义粒度: semantic granularity.
接着,作者定义了两个 pair: video-audio pair 和 video-text pair 如图:
在这里插入图片描述
我这里 有个疑问, 为什么没有text-> audio 的空间? 我是这么理解的, 因为 video 维度最全,信息最多, 音频 和 text 都是 粗粒度的,因次有 video->audio 和 video->text

2.7.3 Common Space Projection

这里 还有个细节:
在这里插入图片描述

在这里插入图片描述

这里有这样的 理解: video 和 audio 可以时序对应起来 ,但是 text 不是.
所以 video 和 audio的 就是对应求NCE 也就是这个公式
在这里插入图片描述

因为 text 和 video 不是这样映射, 因此有:
给定 video feature: z v , v t \mathbf{z}{v,vt} zv,vt 和一组与之对应的文本特征集合 z t , v t {\mathbf{z}{t,vt}} zt,vt (有多个! 所以需要 Σ \Sigma Σ
其中: P P P 是这些文本的集合,都是正样本; N \mathcal{N} N 是负样本集合。
所以就有了下面论文中哦个你的公式
在这里插入图片描述
这个公式整体也是个 softmax

因为是 triplet 关系,所以最后最后来了个整体 loss:
在这里插入图片描述

2.7.4 only self attention

2.7.3 中的 NCE 就是在各自模态下算特征, 所以 VATT 没有 cross attention, 总结下 (和 后面 的 Qwen 大模型不一样的思路):
Video Encoder: 纯视频特征 -> 自己的Transformer(Self-Attention)
Audio Encoder: 纯音频特征 -> 自己的Transformer(Self-Attention)
Text Encoder: 纯文本特征 -> 自己的Transformer(Self-Attention)
Late Fusion: 三个特征合并

2.8 总结

step1: 每个模态(Video, Audio, Text)单独走自己的 Transformer Encoder
(1)输入是patch embedding(视频帧patch、音频帧patch、文本tokens)
(2)每个Transformer内部是纯Self-Attention
(3)得到一个 [CLS] token 或者 global pooled特征
step2: 模态内自己加个小MLP头(projection head)
(1)让每个模态的 [CLS] 特征,变成一个统一长度(比如512维)的向量
(2)用来放到共享对比空间里
step3 :对比损失(NCE)
(1) Audio和Video特征计算 InNCE loss
(2)Video和Text特征计算 multi-NCE loss
(3) vt loss 和 va-loss 相加, 得到特征计算 InfoNCE loss

2.8 Grounded SAM: Assembling Open-World Models for Diverse Visual Tasks

论文里的这张图清晰地说明了 Grounded DAM 是什么 以及 可以做什么
在这里插入图片描述
其他没有啥了

2.9 Qwen-VL

论文地址 https://arxiv.org/pdf/2409.12191 Qwen-VL 没有开源,只给了 modeling 和 fine tunning.
词汇:scaling laws: 扩展规律
我们先了解下 Qwen-VL 结构
如果说的简单一些, 千问模型就是 vit + llm.
在这里插入图片描述
但是千问团队绝没有这么简单. 根据文章描述,

2.9.1 Naive Dynamic Resolution

在这里插入图片描述
很简单
train 过程就是 加了2D-RoPE
infernece 过程用的还是将其形成1D token 并且将 2x2 的 位置关系的token 压缩为一个token.
在这里插入图片描述

2.9.2 Multimodal Rotary Position Embedding

在这里插入图片描述
注意这里有个细节, 在 ViT 部分,作者用了RoPE
在这里插入图片描述
但是在 llm 部分,如果还用RoPE 那么就有问题, 因为用1D 位置编码限制了模型对于空间(space)和时序(temporal)上的变化. 所以本文提出了 MRoPE
这里 附上苏剑林大佬的博文,写的挺好的https://www.spaces.ac.cn/archives/10040
代码实现见:
https://github.com/huggingface/transformers/blob/1759bb9126e59405f58693a17ef9f58040c2008b/src/transformers/models/qwen2_vl/modeling_qwen2_vl.py#L1357
不赘述

2.9.3 Unified Image and Video Understanding

(1) 采取一秒取两帧
(2) 用了3D-conv 一次卷积两个input(就是一秒的两帧)

2.10 Colossal-AI

分布式ai 训练库, 重要的分布式训练工程, 不赘述.

2.11 Neural Architecture Search using Property Guided Synthesis(NAS)

这个工程就是大名鼎鼎的 NAS, 就是大力出奇迹,就是用大量的计算资源来试网络,帮你设计网络, 这样不用低效的人工探索.
这个工程地址:https://github.com/google-research/google-research
知乎的这篇讲解非常好,不赘述: https://www.zhihu.com/question/359162202

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

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

相关文章

同样开源的自动化工作流工具n8n和Dify对比

n8n和Dify作为两大主流工具,分别专注于通用自动化和AI应用开发领域,选择哪个更“好用”需结合具体需求、团队能力及业务场景综合判断。以下是核心维度的对比分析: 一、核心定位与适用场景 维度n8nDify核心定位开源全场景自动化工具&#xff…

网页设计规范:从布局到交互的全方位指南

网页设计规范看似繁杂,但其实都是为了给用户提供更好的体验。只有遵循这些规范,才能设计出既美观又实用的网页,让用户在浏览网页时感到舒适、愉悦。 一、用户体验至上 用户体验(UX)是网页设计的核心原则之一。设计师…

图神经网络(GNN)基本概念与核心原理

图神经网络(GNN)基本概念与核心原理 图神经网络(GNN)是一类专门处理图结构数据的神经网络模型 (GTAT: empowering graph neural networks with cross attention | Scientific Reports)。图结构数据由节点(表示实体)和边(表示实体间关系)构成,每个节点和边都可以带有特…

【双指针】专题:LeetCode 18题解——四数之和

四数之和 一、题目链接二、题目三、题目解析四、算法原理解法一:排序 暴力枚举 利用 set 去重解法二:排序 双指针 五、编写代码六、时间复杂度和空间复杂度 一、题目链接 四数之和 二、题目 三、题目解析 题目要求基本与三数之和一样。 四、算法原…

3.0/Q2,Charls最新文章解读

diseases and depressive symptoms comorbidity on the risk of cognitive impairment in middle-aged and older adults people based on the CHARLS database DOI:10.3389/fpubh.2025.1558430 中文标题:基于CHARLS数据库的慢性病与抑郁症状共病对中老年…

学习笔记—双指针算法—移动零

双指针算法 移动零 283. 移动零 - 力扣(LeetCode) 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进…

组件的基本知识

组件 组件的基本知识 组件概念组成步骤好处全局注册生命周期scoped原理 父子通信步骤子传父 概念 就是将要复用的标签,抽离放在一个独立的vue文件中,以供主vue文件使用 组成 三部分构成 template:HTML 结构 script: JS 逻辑 style: CSS 样…

将视频生成视频二维码步骤

如何将视频链接生成二维码 生成与视频关联的二维码通常涉及以下几个方面:选择合适的库或工具、准备视频链接以及将其转换为二维码图像。以下是详细的说明: 使用JavaScript/Vue框架生成二维码 在前端开发中,可以使用 qrcode 或者 vue-qrcod…

关系型数据库PostgreSQL for Mac 保姆级使用教程

第一部分:安装PostgreSQL 方法一:使用Postgres.app(最简单) 访问 Postgres.app官网 下载最新版本,将 Postgres.app 移动到 “Applications” 文件夹。 双击Postgres.app打开应用,点击"Initialize&q…

Redis超详细入门教程(基础篇)

一:Redis 简介 (1)Mysql: 将数据通过数据文件存在磁盘上 通过二维表存储数据 (2)Redis 定义: 优点: 热点数据:短时间内有大量用户访问 二:Redis下载与安装 Windows系统安…

【JS-Leetcode】2621睡眠函数|2629复合函数|2665计数器||

文章目录 2621睡眠函数2629复合函数2665计数器|| 这三个题目涉及setTimeout、promise、数组reduce方法,闭包。 2621睡眠函数 请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。 原理&am…

重塑编程体验边界:明基RD280U显示器深度体验

重塑编程体验边界:明基RD280U显示器深度体验 写在前面 本文将以明基RD280U为核心,通过技术解析、实战体验与创新案例,揭示专业显示器如何重构开发者的数字工作台。 前言:当像素成为生产力的催化剂 在GitHub的年度开发者调查中&…

如何通过挖掘需求、SEO优化及流量变现成功出海?探索互联网产品的盈利之道

挖掘需求,优化流量,实现变现:互联网出海产品的成功之路 在当今全球化的数字时代,越来越多的企业和个人选择将业务扩展到国际市场。这一趋势不仅为企业带来了新的增长机会,也为个人提供了通过互联网产品实现盈利的途径…

cuda学习2:cuda编程基本概念

CUDA基本概念 主机(host) 通常将起控制作用的CPU称为主机(host) 设备(device) 将起加速作用的 GPU 称为设备(device) 流处理器(streaming processor) 物…

AVL树的介绍与学习

目录 1.前言 2.AVL树 3.AVL树的插入 平衡因子的更新 更新停止的条件 旋转 1.前言 在学习了二叉搜索树,set和map之后,我们接下来趁热打铁,继续学习AVL树。 2.AVL树 1.AVL树具有二叉搜索树的性质,但是它的左右子树的高度差不…

数字人接大模型第二步:实时语音同步

接上例第一步,还是dh_live项目,增加了一个完整的实时对话样例,包含vad-asr-llm-tts-数字人全流程,以弥补之前的只有固定的问答的不足。 VAD(Voice Activity Detection,语音活动检测)VAD用于检测用户是否正在说话,从而触发后续的语音处理流程。 ASR(Automatic Speech R…

01_Long比较值 类型相同值不同

问题描述: 看如下代码: Long a 128L; Long b 128L;System.out.println(a b);运行结果如下: 明明 a 和 b 的值一样,但是结果却为 False,为什么同样的类型,同样的值,却不相等,这是…

EKS环境下服务重启50X错误

EKS中,当使用AWS Load Balancer Controller时,ALB有两种模式,Internet-facing和Internet,当使用Internet模式时,ALB注册的是NodeIP;使用Internet-facing模式时,ALB注册的则是Pod IP。从模式上来…

Android项目升级插件到kotlin 2.1.0后混淆网络请求异常

背景 项目kt插件1.9.24升级到2.1.0后打包编译release网络请求失败了。 retrofit版本2.9.0 错误详情 java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedTypeat retrofit2.m.a(Unknown Source:2477)at retrofit2.K.invoke(U…

Vue中Axios实战指南:高效网络请求的艺术

Axios作为Vue生态中最流行的HTTP客户端,以其简洁的API和强大的功能成为前后端交互的首选方案。本文将带你深入掌握Axios在Vue项目中的核心用法和高级技巧。 一、基础配置 1. 安装与引入 npm install axios 2. 全局挂载(main.js) import …