基礎學習:(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)?ei?2? 也就是圖中說的找二范數距離.

該方法和之前的方法: 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} Wvp?Rt?h?w?3×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} Wap?Rt×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} Wtp?Rv×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.pswp.cn/bicheng/78651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78651.shtml
英文地址,請注明出處:http://en.pswp.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 …