拆解:27層ViT如何把圖片壓縮進(jìn)5120維Token空間)
Agnes-3.0-Flash視覺塔架構(gòu)拆解27層ViT如何把圖片壓縮進(jìn)5120維Token空間【免費(fèi)下載鏈接】Agnes-3.0-Flash項目地址: https://ai.gitcode.com/hf_mirrors/Agnes-AI/Agnes-3.0-FlashAgnes-3.0-Flash 是一款開源多模態(tài)大模型它的視覺塔Vision Tower由 27 層 ViT 組成負(fù)責(zé)把圖片和視頻壓縮成 5120 維的視覺 Token直接送入語言模型。這篇文章用最少的話講清楚一張圖片如何一步步變成語言模型能讀懂的 5120 維向量序列 一、視覺塔在 Agnes-3.0-Flash 中的位置Agnes-3.0-Flash 的架構(gòu)是典型的雙塔設(shè)計模塊作用關(guān)鍵參數(shù)視覺塔AgnesVisionModel圖像/視頻 → 視覺 Token27 層 ViT隱藏維度 1152語言模型AgnesTextModel多模態(tài)生成與推理72 層混合注意力隱藏維度5120融合器AgnesVisionMerger把 1152 維升到 5120 維2×2 空間合并 兩層線性投影兩者通過隱藏維度對齊視覺塔輸出的每個 Token 都被投影到5120 維與文本 Token 共用同一個詞嵌入空間和位置編碼體系語言模型無需任何特殊處理就能無縫讀取圖像信息。完整配置見 config.json 中的vision_config字段。二、27 層 ViT 的完整結(jié)構(gòu)一覽視覺塔的規(guī)格定義在 AgnesVisionConfig 中結(jié)構(gòu)部件數(shù)值說明網(wǎng)絡(luò)深度depth27層標(biāo)準(zhǔn) Pre-Norm Transformer 塊隱藏維度hidden_size1152每個 patch Token 的維度注意力頭數(shù)num_heads16每頭維度 1152 / 16 72MLP 中間維度intermediate_size4304約為隱藏維度 3.7 倍激活函數(shù)GELU (tanh)經(jīng)典 ViT 配置位置嵌入表2304 個48×48 的二維網(wǎng)格雙線性插值復(fù)用每一層AgnesVisionBlock都是教科書式的結(jié)構(gòu)見 modeling_agnes.pyLayerNorm → 雙向注意力帶 2D RoPE→ 殘差 → LayerNorm → MLP → 殘差兩個值得注意的細(xì)節(jié)雙向注意力與語言模型不同視覺塔使用is_causalFalse的全局注意力每個 patch 都能看到整張圖的所有 patch這是 ViT 理解全局語義的關(guān)鍵。雙位置編碼除了 48×48 網(wǎng)格的可學(xué)習(xí)二維位置嵌入通過雙線性插值適配任意分辨率還疊加了二維 RoPE見 AgnesVisionRotary讓模型對相對位置敏感。三、從像素到 Token四步流水線視覺塔的前向流程AgnesVisionModel.forward可以拆成四步第 1 步3D 卷積切 PatchAgnesVisionPatchEmbed 用一個 kernel 為(2, 16, 16)的 3D 卷積完成兩件事空間上每16×16 像素切成一個 patch時間上每2 幀合并成一組這是視頻理解的基礎(chǔ)——單幀圖片等效為 T1 的視頻一個 patch 卷積后直接變成 1152 維向量無需額外的線性投影層。第 2 步疊加可學(xué)習(xí)位置嵌入num_position_embeddings2304對應(yīng) 48×48 的標(biāo)準(zhǔn)網(wǎng)格。實際圖片分辨率往往不是 48 的整數(shù)倍模型通過雙線性插值get_vision_bilinear_indices_and_weights在 4 個相鄰格點(diǎn)間平滑取值任何分辨率都能獲得準(zhǔn)確的位置信號。第 3 步27 層 Transformer 反復(fù)提煉每個 patch Token 在 27 層中逐層交換信息注意力讓它聚合鄰域與全局上下文MLP 讓它完成非線性特征變換。最終每個 patch 都攜帶了豐富的語義信息。第 4 步2×2 合并 投影到 5120 維這是壓縮的核心由 AgnesVisionMerger 完成操作維度變化含義2×2 空間合并4 個 1152 維 → 1 個 4608 維每 4 個相鄰 patch 拼成 1 個 TokenToken 數(shù)量降為 1/4Linear GELU4608 → 4608非線性融合Linear 投影4608 →5120對齊語言模型隱藏維度注意一個巧妙設(shè)計雖然空間上 4 個 patch 合并成 1 個 Token但時間維度不合并temporal_patch_size2已在卷積階段處理因此視頻保留了逐幀的時間分辨率。四、算一筆賬一張圖到底占多少個 Token預(yù)處理器preprocessor_config.json、image_processing_agnes.py采用動態(tài)分辨率策略最短邊不低于 256 像素最長邊不超過 4096 像素邊長自動對齊到 32 16 像素 patch × 2 合并的整數(shù)倍以一張 2048×2048 的圖片為例計算過程2048 ÷ 16 (patch) 128 個 patch / 邊 128 ÷ 2 (合并) 64 個 Token / 邊 64 × 64 4096 個視覺 Token也就是說圖片尺寸視覺 Token 數(shù)256×256最小256 個512×5121024 個2048×20484096 個4096×4096最大16384 個這解釋了 262,144 Token 的上下文窗口為何如此重要——一張高清圖片最多吃掉1.6 萬個 Token剩余空間仍足以容納數(shù)十萬字文本圖文混合分析因此成為可能。五、視覺 Token 如何與文本在同一序列中相處視覺 Token 進(jìn)入語言模型后通過特殊標(biāo)記定位configuration_agnes.pyvision_start_token(248053) /vision_end_token(248054) 標(biāo)記視覺內(nèi)容邊界image_token(248056) /video_token(248057) 在詞表中占位更精妙的是三軸旋轉(zhuǎn)位置編碼mrope文本序列的 (時間, 高, 寬) 三個軸同步遞增而視覺 Token 的三軸位置由圖片網(wǎng)格決定見 get_vision_position_ids。這讓語言模型在 72 層混合注意力54 層 delta-rule 循環(huán) 18 層全局注意力中既能正確引用圖中左上角的物體也能保持與文本的因果順序一致。六、小結(jié)設(shè)計取舍背后的工程智慧回顧整個視覺塔幾個關(guān)鍵決策都值得借鑒27 層、1152 維視覺塔參數(shù)遠(yuǎn)小于語言模型主干視覺特征提取夠用就好把算力留給推理。16 像素 patch 2×2 合并等效 32 像素的有效感受野配合動態(tài)分辨率在 Token 預(yù)算和細(xì)節(jié)保留之間取得平衡??蓪W(xué)習(xí)位置嵌入 RoPE 雙保險前者提供絕對空間坐標(biāo)后者賦予相對位置泛化能力兩者互補(bǔ)。5120 維統(tǒng)一空間視覺與文本共享隱藏維度、位置編碼和注意力機(jī)制融合器就是唯一的翻譯官架構(gòu)簡潔且可擴(kuò)展。如果你想繼續(xù)深入可以從這幾個文件入手視覺塔配置configuration_agnes.py 中的AgnesVisionConfig視覺塔模型modeling_agnes.py 的 PatchEmbed / Attention / Merger 三個類圖像預(yù)處理image_processing_agnes.py 與 processing_agnes.py推理服務(wù)部署sglang_patch/README.md【免費(fèi)下載鏈接】Agnes-3.0-Flash項目地址: https://ai.gitcode.com/hf_mirrors/Agnes-AI/Agnes-3.0-Flash創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考