Vision Transformer (ViT) 詳解:當Transformer“看見”世界,計算機視覺的范式革命

摘要: 長久以來,卷積神經網絡(CNN)憑借其精心設計的歸納偏置(inductive biases),無可爭議地統治著計算機視覺領域。然而,一篇名為《An Image is Worth 16x16 Words》的論文徹底改變了這一格局,它所提出的 Vision Transformer (ViT) 模型,成功地將源于自然語言處理(NLP)領域的 Transformer 架構直接應用于圖像識別,并取得了驚人的成果。本文旨在深度剖析 ViT 的核心原理、架構設計及其深遠影響,闡明它是如何挑戰傳統,并為視覺任務提供一個全新的、具有強大擴展性的解決方案。

今天我先給大家帶來原理講解與入門教學,明天會詳細剖析VIT背后深層的原理與代碼實現

第一章:背景——CNN的王朝與Transformer的崛起

要理解 ViT 的革命性,我們必須首先回顧它所挑戰的CNN王朝。

1.1 CNN的基石:生物的視覺皮層

CNN 的設計哲學源于對生物視覺皮層的模仿。其核心在于兩大歸納偏置

局部性 (Locality):假設圖像中鄰近的像素點具有強相關性。通過小尺寸的卷積核(Kernel),CNN 能夠有效地從局部區域提取邊緣、紋理等基礎特征。

平移不變性 (Translation Invariance):無論一只貓出現在圖像的哪個位置,它仍然是一只貓。通過權重共享(Weight Sharing)的卷積操作和池化(Pooling)操作,CNN 能夠識別出在空間上平移的相同特征。

這種分層、由局部到全局的特征提取范式,使得 CNN 在處理圖像時極為高效且強大,成為了過去十年計算機視覺領域的黃金標準。

1.2 NLP的革命:自注意力機制的全局視野

與此同時,在自然語言處理領域,Transformer 架構憑借其核心的自注意力機制 (Self-Attention) 顛覆了循環神經網絡 (RNN) 的主導地位。自注意力的核心思想是,在處理一個序列(如一個句子)時,序列中的每個元素(單詞)都可以直接與其他所有元素計算相關性,從而動態地捕捉長距離依賴關系。這種對全局上下文的直接建模能力,正是處理復雜語言現象的關鍵。

1.3 跨界的融合

ViT 的誕生源于一個大膽的設想:我們能否拋棄 CNN 為圖像“量身定制”的歸納偏置,直接將 Transformer 強大的全局建模能力應用于視覺任務?大白話解釋:一張圖像,是否可以被當作一個“句子”來閱讀?

第二章:ViT架構深度解析

ViT 的架構回答了上述問題。它通過一系列巧妙的設計,將二維的圖像數據轉換為了 Transformer 所能處理的一維序列數據。

2.1 圖像的序列化:從像素網格到“視覺詞元”

ViT的第一步,是將輸入的二維圖像(例如 224×224×3)分割成一系列固定大小的不重疊的圖像塊(Patches)。例如,如果每個Patch的大小是 16×16,那么一張 224×224 的圖像就會被切分成 (224/16)×(224/16)=14×14=196 個Patches。

類比NLP: 這一步就像將一個段落拆分成一個個獨立的單詞。每個Patch就是圖像世界里的一個“視覺單詞”。

原始的Patch是二維的(16×16×3),而Transformer的輸入需要是一維的向量序列。因此,ViT會將每個Patch展平(Flatten)成一個長向量(16×16×3=768),然后通過一個標準的可訓練線性投影層(Linear Projection Layer)將其映射到一個固定的維度 D(例如768)。這個輸出的向量就被稱為Patch Embedding。

類比NLP: 這完全等同于NLP中的詞嵌入(Word Embedding)過程,將每個單詞映射到一個高維的語義向量空間中。

2.2 注入空間與全局信息

標準的Transformer模型是置換不變的(Permutation-Invariant),也就是說,打亂輸入序列的順序不會影響最終結果。這在處理語言時是個問題(“我愛你”和“你愛我”含義不同),在處理圖像時同樣是致命的(打亂圖像塊會讓圖像失去空間結構)。

為了解決這個問題,ViT為每一個Patch Embedding都加上一個可學習的位置編碼(Position Embedding)。這個編碼向量告訴模型每個Patch的原始位置信息(例如,這是第1行第3列的Patch)。

借鑒NLP模型BERT的設計,ViT在所有Patch Embeddings序列的開頭,額外添加一個特殊的可學習的分類令牌([CLS] Token)。這個Token不代表任何具體的圖像塊,它的作用是在經過Transformer Encoder之后,作為一個“全局信息聚合器”,其最終的輸出狀態將代表整張圖像的語義信息,用于最終的分類任務。

至此,我們已經成功地將一張圖像轉換成了一個Transformer可以理解的向量序列(Sequence of Embeddings)。

2.3 核心:Transformer 編碼器

轉換后的向量序列被送入一個標準的Transformer Encoder。這個Encoder由多個相同的層堆疊而成,每一層都包含兩個核心子模塊:

1. 多頭自注意力機制(Multi-Head Self-Attention, MHSA)

這是ViT的核心。對于序列中的每一個Patch(包括[CLS] Token),自注意力機制會計算它與所有其他Patches之間的注意力分數(Attention Score)。

工作原理簡述: 每個Patch向量會生成三個不同的向量:查詢(Query)鍵(Key)值(Value)

用某個Patch的Query向量,去和所有Patches的Key向量進行點積計算,得出相似度分數。這些分數經過Softmax歸一化后,成為權重。

用這些權重去加權求和所有Patches的Value向量,得到該Patch在當前層的新表示。

意義: 這個過程允許每個Patch“環顧四周”,根據內容相關性,動態地從其他所有Patch中聚合信息。一個草地上的Patch可能會更“關注”天空的Patch(確定背景),而一個眼睛的Patch會高度關注另一個眼睛的Patch(捕捉對稱性)。這就是ViT實現全局感受野的方式。

多頭(Multi-Head): 將這個過程并行執行多次(例如12個頭),每個“頭”學習一種不同的關系模式(比如一個頭關注紋理,另一個頭關注輪廓),最后將所有頭的結果拼接起來,增強了模型的表達能力。

2. 前饋網絡(Feed-Forward Network, FFN)

在自注意力之后,每個Patch的新表示會獨立地通過一個簡單的全連接前饋網絡(通常由兩個線性層和一個激活函數組成)。這一步可以看作是對自注意力聚合來的信息進行進一步的非線性變換和提煉。

在每個子模塊(MHSA和FFN)之后,都會使用殘差連接(Residual Connection)和層歸一化(Layer Normalization)來保證訓練的穩定性和效率。

當序列通過所有Encoder層后,我們只取出[CLS] Token對應的最終輸出向量,因為它已經聚合了整張圖的全局信息。這個向量最后被送入一個簡單的多層感知機(MLP Head),并最終通過了這個Softmax層輸出各個類別的預測概率。

第三章:ViT的優勢與挑戰

3.1 優勢

可擴展性 (Excellent Scalability):ViT 的性能會隨著模型規模和數據量的增加而穩定提升。當在超大規模數據集(如 Google 內部的 JFT-300M)上進行預訓練時,ViT 的性能超越了當時最頂尖的 CNN 模型。

更少的歸納偏置:ViT 不依賴于 CNN 的局部性假設。理論上,它能從數據中學習到比硬編碼的卷積結構更通用、更強大的視覺模式。例如,它可以學會關注圖像中不連續但語義相關的區域。

3.2 挑戰

數據需求(Data-Hungry):ViT 的靈活性是一把雙刃劍。由于缺乏 CNN 的歸納偏置作為“先驗知識”,ViT 需要從零開始學習所有的視覺模式。因此,在中小規模的數據集(如 ImageNet-1k)上從頭訓練時,其性能通常不如同等規模的 CNN。它對大規模預訓練的依賴性極強。

計算成本:自注意力機制的計算復雜度與輸入序列長度的平方成正比。這意味著對于高分辨率圖像(會產生更多的 Patches),ViT 的計算和內存開銷會急劇增加。

第四章:影響與展望

ViT 的出現不僅僅是模型列表中的一個新成員,它更像是一場思想的解放。它證明了注意力機制是構建視覺模型的一種普適且強大的機制。

它的成功催生了計算機視覺領域的研究熱潮,后續工作層出不窮:

Swin Transformer 重新引入了局部注意力和層級化結構,使得 Transformer 在通用視覺任務上更高效、更強大,成為了新的基準模型。

Data-efficient ViT (DeiT) 通過知識蒸餾等技術,顯著降低了 ViT 對大規模預訓練數據的依賴。

Masked Autoencoders (MAE) 提出了一種高效的自監督預訓練范式,進一步釋放了 ViT 的潛力。

結論

Vision Transformer 標志著計算機視覺領域一個新紀元的開啟。它打破了卷積的“神話”,證明了源自語言處理的 Transformer 架構同樣能在視覺世界大放異彩。雖然它并非沒有缺點,但它所開辟的道路——將圖像視為可被全局理解的序列——已經并正在深刻地重塑著我們對視覺智能的認知。未來的視覺模型,很可能會是 Transformer 思想與卷積思想的深度融合,而 ViT,無疑是這場偉大變革的奠基者。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91998.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

go goroutine chan 用法

方法1 代碼 package mainimport ("fmt""sync""time" )func main() {allChan : make(chan interface{}, 3)var sendWg, recvWg sync.WaitGroup // 分別同步發送和接收// 發送goroutinesendWg.Add(1)go func() {defer sendWg.Done()for i : 0; i &…

Web前端文件上傳安全與敏感數據安全處理

一、文件上傳安全1. 文件上傳時的核心安全檢查點文件上傳是 Web 應用的高風險功能,需從多維度驗證,防止惡意文件上傳(如木馬、病毒)或路徑攻擊,關鍵檢查點包括:MIME 類型驗證檢查請求頭中的 Content-Type&a…

文法中的間接左遞歸

🌟 第一步:理解基本概念? 什么是文法(Grammar)?在編程語言或語法分析中,文法 是一組規則,用來描述一種語言的結構。例如:S → A a A → B b B → S c 這表示:S 可以…

Anthropic:跨越生產效能拐點的AI增長飛輪

資本競賽中的戰略轉折點 人工智能領域的競爭已經從理念之爭演變為資本、算力與地緣政治影響力的全面較量。Anthropic傳聞中的1700億美元估值,如果成為現實,將標志著前沿AI發展格局的地震式轉變。這不僅僅是構建更智能模型的問題,更是為主導下…

【Unity3D實例-功能-移動】小兵移動-通過鼠標點擊進行

在Unity的世界里,當你輕點鼠標,角色仿佛被賦予了新的使命,沿著一條無形的軌跡,向著地圖上的目標點進發。每一次移動,不僅是簡單的位移,更是對未知的探索。這種交互,讓玩家與游戲世界緊密相連&am…

從0到1學PHP(十四):PHP 性能優化:打造高效應用

目錄一、PHP 性能評估與分析1.1 性能指標體系1.2 性能分析工具使用1.3 性能瓶頸定位方法與流程二、代碼層面優化技巧2.1 高效的循環與條件判斷寫法2.2 函數與類的優化設計2.3 內存管理與垃圾回收機制優化三、緩存策略與實現3.1 數據緩存3.2 頁面緩存與部分緩存技術3.3 OPcache …

移動管家手機控車系統硬件安裝與軟件綁定設置

移動管家手機控車系統硬件安裝與軟件綁定配合使用,具體設置步驟如下:一、硬件安裝準備 ?加裝智能控制主機?:需在車輛上加裝移動管家專用智能控制模塊,該模塊需與原車電路系統連接,并將原車鑰匙芯片焊接至主控盒內以實…

51單片機入門:數碼管原理介紹及C代碼實現

本文是江協科技up的課堂筆記!大家可以去bilibili配合這位up的51單片機入門教程食用,效果更佳~我這里進行詳細介紹,希望你忘記數碼管的時候來這里看看!(你猜我為什么寫這個TAT)一.基本介紹LED數碼管&#xf…

Apache Camel 簡介

相關文檔地址 https://camel.apache.org/components/next/index.htmlhttps://camel.apache.org/components/4.10.x/languages/simple-language.htmlhttps://camel.apache.org/manual/exception-clause.htmlhttps://camel.apache.org/manual/index.htmlhttps://camel.apache.org…

IP離線庫 輸入IP地址立即返回IP所在地址信息(支持Java、Python)

描述 本文實現: 1、離線查詢IP地址 2、IP地址精確到區域 3、IP地址支持國外IP 此時需要一個創建,比如我輸入一個8.8.8.8的IP立馬就需要返回給我一個中文地址信息, 類似于百度的IP搜索: 113.111.186.123如果現在離線環境或者在…

解決MySQL刪除/var/lib/mysql下的所有文件后無法啟動的問題

刪除 MySQL 數據目錄 /var/lib/mysql 下的所有文件后,MySQL 將無法啟動,因為該目錄包含了數據庫的所有數據文件、配置文件和系統表。當這些文件被刪除時,MySQL 無法找到必要的數據和配置,從而無法正常啟動。本文將詳細介紹解決這個…

蒼穹外賣項目學習——day1(項目概述、環境搭建)

文章目錄一、軟件開發整體介紹1.1 軟件開發流程1.2 角色分工1.3 軟件環境分類二、蒼穹外賣項目介紹2.1 定位2.2 功能架構2.3 技術選型三、開發環境搭建3.1 前端環境3.2 后端環境3.3 前后端聯調3.4 登錄功能優化四、接口文檔管理4.1 YApi4.2 Swagger (Knife4j)一、軟件開發整體介…

【QT】Qt信號與槽機制詳解信號和槽的本質自定義信號和槽帶參數的信號和槽

文章目錄前言一、信號的本質二、槽的本質三、 信號和槽的使?3.1 連接信號和槽四、使用步驟4.1 通過QtCreator?成信號槽代碼五、 ?定義信號和槽5.1 ?例1:信號和槽函數初步使用5.2 ?例2 兩個類使用5.3 示例3 按鈕使用觸發信號六、 帶參數的信號和槽6.1 ?例1&…

【OD機試題解法筆記】文件緩存系統

題目描述 請設計一個文件緩存系統,該文件緩存系統可以指定緩存的最大值(單位為字節)。 文件緩存系統有兩種操作: 存儲文件(put)讀取文件(get) 操作命令為: put fileName …

Python中的sys.path與PYTHONPATH全解析:模塊導入路徑的底層機制與最佳實踐

在Python項目開發中,很多人遇到過類似“模塊導入失敗”、“路徑找不到”、“相對導入與絕對導入混亂”等問題。而這些問題的根源,幾乎都繞不開一個核心概念——Python模塊搜索路徑。 今天,我們圍繞sys.path 和 PYTHONPATH環境變量&#xff0…

python:如何調節機器學習算法的魯棒性,以支持向量機SVM為例,讓伙伴們看的更明白

魯棒性(Robustness)指模型在噪聲數據或異常值干擾下保持性能穩定的能力。想詳細了解的可參考本人之前的博文 python機器學習:評價智能學習算法性能與效果的常見術語:不收斂、過擬合、欠擬合、泛化能力、魯棒性一句話、一張圖給您…

號源加鎖升級思路(解決高并發問題)

原先邏輯鏈接:號源預約加鎖思路_java 預約 接口加鎖-CSDN博客 一、進行治療項目和號源數據緩存 1.新建一個定時任務,主要在凌晨時緩存治療項目和號源數據 1.1.類中使用redission獲取鎖(用于分布式系統獲取數據,保證原子性&…

MCP革命:AI世界的“USB-C”接口如何重塑智能體與外部工具的連接

> 一條標準化的數據通道,讓AI從“對話專家”蛻變為“行動專家”,背后是一場由協議驅動的工具連接革命。 2024年11月,Anthropic公司開源了**Model Context Protocol(MCP)**。在短短9個月內,這項技術徹底改變了AI與外部世界的交互方式。截至2025年8月,MCP服務數量**從…

啟用“安全登錄”組合鍵(Ctrl+Alt+Delete)解鎖

文章目錄背景目標功能操作步驟效果背景 在日常工作中,我們有時需要讓電腦長期開機運行(如處理長任務、作為服務器等)。然而,這其中存在一個潛在風險:當電腦處于鎖屏或登錄界面時,如果有人無意中觸碰鍵盤比…

【08】C++實戰篇——C++ 生成動態庫.dll 及 C++調用DLL,及實際項目中的使用技巧

文章目錄一、創建動態庫dll (方法一)1 生成C 動態庫dll1.1 創建項目MyDLL1.2 編寫.h 和 .cpp文件1.3 設置 及 生成 DLL2 調用 C 動態庫dll2.1 創建C 空項目DLLtest2.2 動態庫配置 及代碼調用測試3 實際項目中的使用技巧3.1 設置dll輸出路徑3.2 設置頭文件引入路徑3.3 改進后 測…