視覺智能的「破壁者」——Transformer如何重塑計算機視覺范式?三大CV算法論文介紹 ViTMAESwin Transformer

????????當自然語言處理領域因Transformer而煥發新生時,計算機視覺卻長期困于卷積神經網絡的架構桎梏。直到ViT(Vision Transformer)的橫空出世,才真正打破了視覺與語言之間的壁壘。它不僅是技術的革新,更是范式革命的開始:圖像不再是像素的矩陣,而是視覺詞匯的序列。隨后,MAE掩碼重建的巧思將自監督學習推向新高度,而Swin Transformer則以分層結構與滑動窗口的智慧,讓Transformer在視覺任務中既高效又強大。這篇筆記將帶你深入這三篇里程碑論文的核心,揭示它們如何共同構建了一個通向通用智能的多模態未來

????????

????????本筆記系統精讀了三篇計算機視覺領域的革命性論文:ViTMAESwin Transformer。它們分別解決了Transformer在視覺任務中的三大核心挑戰:架構適配自監督預訓練計算效率與層次建模

  1. ViT(Vision Transformer)?首次將純Transformer應用于圖像分類,通過將圖像分割為(Patch)序列并直接輸入Encoder,證明了在大規模數據上Transformer可超越CNN。其關鍵突破在于摒棄了卷積的歸納偏置(局部性、平移等變性),僅依靠注意力機制實現全局建模,為多模態統一奠定了基礎。

  2. MAE(Masked Autoencoder)?借鑒BERT的掩碼語言模型思想,但針對視覺信號的高冗余度,提出高比例掩碼(如75%)不對稱編解碼架構。編碼器僅處理可見塊,輕量解碼器重建像素,顯著降低了預訓練成本并學習了高質量表征,證明了自監督在視覺領域的巨大潛力。

  3. Swin Transformer?通過分層結構(模擬CNN的多尺度特征)和移動窗口自注意力(將計算復雜度從平方降為線性),解決了ViT在高分辨率圖像(如檢測、分割)上的計算瓶頸。其滑動窗口機制既保留了全局建模能力,又實現了高效計算,成為通用視覺主干網絡的標桿。

????????這三項工作標志著視覺領域已從CNN時代邁入Transformer時代,其核心思想——序列化建模、自監督學習、層次化設計——不僅推動了視覺技術的發展,更為視覺與語言的統一建模提供了關鍵路徑。未來的多模態智能系統,必將構建于此基礎之上。

目錄

1. ViT - CV版的Transformer

1.1?摘要 + 導言 + 結論

1.2?架構

1.3?Experiments 實驗結果

2. MAE - CV版的BERT

2.1?摘要 + 導言

2.2 Approach 方法

操作流程

2.3 Experiments 實驗結果

3. Swin Transformer? ViT結合CNN(分層結構+滑動窗口)

3.1?摘要 + 導言 + 結論

3.2?Method 方法

3.2.1?Overall Architecture

3.2.2?Shifted Window based Self-Attention 滑動窗口自注意力

3.3 Experiments 實驗結果


1. ViT - CV版的Transformer

ViT論文逐段精讀【論文精讀】

AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

將圖像視為由“單詞”(patches)組成的“句子”。具體做法是把一張圖像分割成固定大小的圖像塊(例如16x16像素),每個圖像塊就類似于自然語言處理(NLP)中的一個單詞 token。然后將這些圖像塊組成的序列直接輸入標準的Transformer架構(具體是Transformer Encoder)進行圖像分類。

1.1?摘要 + 導言 + 結論

Transformer、注意力機制在NLP大火,但在CV領域 注意力機制只是用于CNN架構中的組件改變,本文將純Transformer應用于圖像塊序列。在基準數據集(ImageNet、CIFAR-100、VTAB等)表現很好 并訓練計算資源顯著減少。

一個224*224的圖片 5w個像素點 如果把每個像素點拉直作為一個獨立單元,算注意力是 n^2復雜度,就太高了。可以把16*16的圖像作為 一個單元;一共14*14 = 196個單元。

ViT 是很好的挖坑之作 未來很多用Transformer做CV。Transformer 在?NLP和CV上都適用 為后來多模態 打通CV和NLP。

1.2?架構

Patch:單個圖片 224*224*3 分成 14*14=196個 16*16*3=768;

embedding 乘上一個 768*d 的矩陣;(196*768) * (768*d) -> 196*d

在最開頭加上一個分類字符 [cls](similar to BERT's [class] token) 即變成197*d

因為和別的位置兩兩自注意力,這個[cls]實則包含了其他位置的所有信息;把這個送個MLP分類。

CNN inductive biases 歸納偏置

  • 局部性:假設圖像中有意義的特征(如邊緣、紋理、角落)通常由相鄰的像素組成,而非相距甚遠的像素。因此,卷積核只關注一個小窗口(如3x3)內的局部信息
  • 平移等變性:意味著一個物體在圖像中移動后,其對應的特征也會在特征圖中發生同樣的移動。卷積操作在任何位置都是共享參數的,它不關心特征具體在圖像的哪個位置
  • 空間層次結構:復雜的、全局的特征(如一張臉)是由簡單的、局部的特征(如眼睛、鼻子、嘴巴)逐步組合而成的。通過池化層(Pooling Layers)?和逐步增加感受野的卷積層堆疊來實現。

而ViT 沒有使用歸納偏置 而是

  1. Patch Extraction:將一張圖像簡單地切割成一系列固定大小的圖像塊(Patches),然后將每個塊展平成一個向量。這可以看作是模型唯一需要做的關于“圖像是2D網格”的假設。

  2. 學習添加位置編碼:由于Transformer本身是置換不變(Permutation-Invariant)的(即不關心輸入序列的順序),ViT需要顯式地添加位置編碼(Position Embedding)?來告訴模型“每個圖像塊在原始圖像中的位置信息”。這個位置關系不是硬編碼的規律,而是需要模型從數據中學習的參數。

  3. 送入標準Transformer編碼器:之后的過程就和處理一堆單詞沒有任何區別了。自注意力機制是全局的——從第一層開始,每個塊(token)就可以和圖像中任何位置的塊進行交互和集成信息。它沒有“局部性”的假設,也沒有通過卷積來強制實現“平移等變性”。

1.3?Experiments 實驗結果

不同大小的ViT 和 BiT-L(ResNet152x4)比,訓練時間大大縮短,并且最大的ViT 結果全面超過了。

在多大的訓練集上效果比較好呢? 灰色的線 BiT代表不同大小的殘差神經網絡(灰色部分可看做對比的ReSNet的水平)。

不同大小的彩色圓點 代表不同大小的ViT。? 小規模比不上殘差神經網絡,大規模上效果好。

驗證注意力機制的有效性:

左圖:標注出Attention 對應的位置

中圖:位置編碼 黃點代表相似度高的 可以看出已經學到對應的位置了。

右圖:證明Attention 在最開始 depth比較淺的時候 就可以有比較高的pixels 注意到全局(CNN最初只能注意局部)

2. MAE - CV版的BERT

MAE 論文逐段精讀【論文精讀】

Masked Autoencoders Are Scalable Vision Learners

2.1?摘要 + 導言

????????掩碼自編碼器(MAE)是可擴展的計算機視覺自監督學習器。我們的MAE方法非常簡單:隨機掩碼輸入圖像塊并重建缺失像素。該方法基于兩個核心設計:其一,我們設計了非對稱的編碼器-解碼器架構,其中編碼器僅處理可見圖像塊(不含掩碼標記),同時配備輕量級解碼器,根據潛在表征和掩碼標記重建原始圖像;其二,我們發現對輸入圖像實施高比例掩碼(如75%)能產生具有挑戰性且意義豐富的自監督任務,在提升精度的同時讓編碼器僅處理少量圖像塊(如25%),使總體預訓練時間減少3倍以上并降低內存消耗,從而輕松將MAE擴展至大型模型。這兩種設計的結合使我們能夠高效訓練大規模模型。

????????標記數據稀缺 -> 自監督;自編碼方法在視覺領域的進展仍落后于NLP,痛點:

? ? ? ? (i)ViT 為 CV補上了架構的鴻溝([cls] 嵌入 這些)????????

????????(ii)信息密度差異:語言是人類產生的高度語義化和信息密集的信號。當訓練模型僅預測句子中少量缺失詞時,該任務就能引發復雜的語言理解。相反,圖像是具有強烈空間冗余的自然信號——例如,無需對部件、物體和場景進行高層理解,僅憑相鄰圖像塊即可重建缺失區域。為克服這種差異并促進學習有用特征,我們證明一種簡單策略在計算機視覺中非常有效:對隨機圖像塊實施極高比例的掩碼。該策略大幅降低冗余度,創建了需要超越低級圖像統計的整體理解能力的挑戰性自監督任務。(圖像冗余多 所以要相對語言 多掩碼)

????????(iii)解碼器作用差異:將潛在表征映射回輸入的自編碼器解碼器,在文本與圖像重建中扮演不同角色。在視覺領域,解碼器重建像素,因此其輸出語義級別低于常見識別任務。這與語言領域形成鮮明對比——解碼器預測的缺失詞包含豐富語義信息。雖然BERT的解碼器可以非常簡單(如MLP),但我們發現對于圖像而言,解碼器設計對決定學習到的潛在表征的語義水平起著關鍵作用。(圖像解碼器需要比語言的更復雜)

????????

例子:左為masked;中為MAE復原的;右為圖像本來的

2.2 Approach 方法

掩碼:挑一個小子集作為基礎 其他都掩碼掉 (高度稀疏的輸入 -> 高效編碼器)

編碼器:對未掩碼的小部分塊?進入類似ViT的結構;

解碼器(僅用于預訓練)可以看到未被掩碼的,也可以看到masked的(用一個 共享的 可學習的向量表示)

損失函數:計算像素空間中原圖與重建圖像在掩碼區域上的均方誤差(MSE)

對每個圖像塊歸一化后 訓練效果更好。

操作流程

1. 線性投影添加位置編碼

2.?隨機打亂,按比例移除 列表后半部分,前部分給編碼器

3.?編碼后,掩碼列表補全到列表后方,并對完整列表進行逆亂序操作(把2 隨機打亂 變換回去)再進行解碼

2.3 Experiments 實驗結果

ViT-Large 原始與加正則化;baseline MAE

encoder、decoder深度? mask的比例和采樣方式、重建目標、數據增強的一些參數比較。

很好的性質 輪數越多效果越好

遷移學習 在別的CV任務上的能力:

目標檢測COCO? 語義分割ADE20K

3. Swin Transformer? ViT結合CNN(分層結構+滑動窗口)

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

Swin Transformer論文精讀【論文精讀】

3.1?摘要 + 導言 + 結論

目標提出 Swin Transformer 作為 general-purpose backbone?for computer vision?計算機視覺的通用主干網絡

NLP中的Transformer用于視覺領域存在兩大難題:

  1. 尺度變化大:圖像中的物體(視覺實體)大小可以千差萬別(如一張圖里既有巨大的天空又有微小的飛鳥)。

  2. 分辨率過高:圖像由大量像素組成,而文本中的單詞數量相對少得多。Transformer的自注意力機制計算復雜度是序列長度的平方,直接處理圖像像素會導致計算量無法承受。

我們通過兩個關鍵創新來解決上述挑戰:分層結構?和?移動窗口

移動窗口 (Shifted Windows):

  • 效率: 將自注意力計算限制在不重疊的局部窗口內。例如,將圖像分成許多小塊,只計算每個小塊內部像素之間的關系。這極大地降低了計算復雜度

  • 連接性:?移動窗口的機制使得在下一層中,窗口的邊界會發生偏移,從而讓不同窗口之間的像素能夠進行交互cross-window connection,獲取全局信息。如果不平移的話 一個patch只能看到內部而看不到全局,上例每次往右下方平移兩格。

分層結構 (Hierarchical Architecture):

  • 多尺度建模: 像CNN一樣,隨著網絡加深,逐漸合并merge patches(起到CNN中pooling的作用),形成特征圖(如?16x16?->?8x8?->?4x4)。這使其能夠靈活處理不同尺度的物體。

  • 線性復雜度: 得益于局部窗口注意力,其計算復雜度與圖像大小呈線性關系,而不是平方關系,使其能處理高分辨率圖像,降低計算復雜度。

最終目標:CV NLP大一統,多模態模型發展 unified modeling of vision and language signals.

后續研究 這個滑動窗口自注意力是否可以用到CV上。

3.2?Method 方法

3.2.1?Overall Architecture

模擬CNN過程的Transformer。分為不同的幾個階段stage。

后面都設 H=W=224=14*16 的情況

最初patch劃分為 4*4;4*4*3=48? ? 變成56*56*48

Linear Embedding 把48放縮為C? ? 56*56拉直為3136;即為3136*C

3136 相比于ViT中 14*14=196的情況 太長了,需要進行窗口自注意力(經過 Swin Transformer Block 尺度不變)

patch merging操作(類似池化)? 行列數減半,通道數翻4倍 再用1*1卷積 變成翻2倍。

3.2.2?Shifted Window based Self-Attention 滑動窗口自注意力

密集預測 / 高分辨率圖像 全局自注意力 平方級別復雜度太高。

比如說 第一層 56*56*96 切成小塊 M*M的 比如取M=7? ? ?那么就在這8*8的小塊 每個小窗口里算注意力。

原來全局算MSA h*w*c原矩陣 3次乘以c*c的矩陣 得到三個h*w*c 的 q,k,v矩陣,復雜度為3*h*w*c^2

q*k 為 hw*c?*?c*hw 得到矩陣 A(hw*hw)?復雜度為 (hw)^2*c? ? ? ?A*v 復雜度也為?(hw)^2*c

最后 乘以c*c進行投影 復雜度為 h*w*c^2;上面幾項總和就為一式。

若窗口大小變成 M*M 把式子1 的所有h=w=M;一共窗口數目為 h*w/m/m

最后得到式子2的結果 關于h*w大小成正比而不是平方。

基于窗口 雖然減小了計算量 但達不到全局算注意力的效果了 于是引入shifted 移動窗口

原來是四塊的 我平移之后變成了大小不一的九塊 不方便算注意力

于是把左上角的塊 移動到右下角 還是拼成了4塊。

但不能直接算注意力 比如C之前的位置是在上面(天空)移到下面和(地面)拼在一起了,這兩個距離很遠的塊本來不應該在一起算注意力的,所以還要通過掩碼的方式 再進行反向移動還原

比如 3 6那邊應該3、6分別單獨算自注意力;把3 6拉直為向量 結果應該是上面一段一些3 下面一段一些6。再轉置 算注意力 相當于不要左下和右上的部分 分別減去100,再做softmax。別的部分同理。


?

3.3 Experiments 實驗結果

??不同大小的架構 Tiny Small Base Large

主要超參數有C的大小每個stage中Block的個數

并且與對應參數量的殘差網絡進行對比(因為也是四個stage的塊)

framework架構上 Swin-T全方位碾壓R-50;Swin-S全方位碾壓X-101-32

展示移動窗口相對位置編碼的作用;在ImageNet圖像分類 COCO目標檢測 ADE20k語義分割上

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

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

相關文章

Java 并發容器源碼解析:ConcurrentSkipListSet 行級深度剖析

Java 并發容器源碼解析:ConcurrentSkipListSet 行級深度剖析 本文將深入解析 Java 并發容器 ConcurrentSkipListSet 的核心源碼,結合流程圖、代碼注釋、設計思想、優缺點分析、業務場景、調試與優化、集成方案、高階應用等,幫助你系統掌握這款…

答題卡自動識別案例

目錄 1.答題卡自動批閱整體實現思路 2.關鍵技術步驟與原理 答題卡區域提取 ①輪廓檢測并排序 ②執行透視變換 ③找到每一個圓圈輪廓 ④先對所有圓圈輪廓從上到下排序 ⑤再通過循環每次只提取出五個輪廓再進行從左到右的排序 3.完整代碼 1.答題卡自動批閱整體實現思路 …

C#實現通過POST實現讀取數據

C# POST請求與MySQL數據存儲實現下面是一個完整的C#解決方案,用于發送POST請求、接收響應數據,并將數據保存到MySQL數據庫中。完整代碼實現 using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.J…

Java 字符編碼問題,怎么優雅地解決?

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

STL之string類(C++)

1.string類核心定位std::string 本質是對 “字符序列” 的封裝,內部通過動態數組存儲字符,并自動管理內存(分配、擴容、釋放),對外提供了簡潔的接口用于字符串的創建、修改、拼接、查找等操作。1.1 使用前提頭文件包含…

[Maven 基礎課程]第一個 Maven 項目

idea 新建一個項目: 來到 New Project 頁面: 這里我們有兩種方式創建 maven 項目,一種是自定義創建,另一種是使用 maven 模版項目創建。 自定義創建 maven 項目 基本配置 Name: first_maven_project 項目名稱,設為 …

uni小程序中使用Echarts圖表

前言 今天雞米花給大家帶來的是在uni里面使用echarts,能夠完美支持和PC端一樣的效果,我這邊的工程是uni轉為微信小程序,用的是vue3vite來寫的,然后實現了豎屏和橫屏的展示方式,好了獻上效果圖。 效果圖 一、引入插件 這…

從FOTA測試到汽車電子安全體系的啟蒙之旅

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

stm32中 中斷和事件的區別

一、核心概念比喻想象一下工廠里的一個報警系統:?中斷 (Interrupt)??:就像火警警報器響了。它的目的是通知管理員(CPU)??:“著火了!”。管理員聽到后,會停下手中的工作(保存現場…

深入理解MySQL主從架構中的Seconds_Behind_Master指標

問題:主從延遲與寫后讀不一致 在典型的 MySQL 主從架構下,所有寫操作都會直接進入主庫,而讀操作大多分流到從庫,從而實現讀寫分離,緩解主庫壓力。 然而 MySQL 的復制機制是異步的:主庫先寫入 binlog&#…

MySQL安裝(linux版本)

MySQL安裝(linux版本) 課程地址 08. 進階-MySQL安裝(linux版本)_嗶哩嗶哩_bilibili 安裝過程中所有需要的程序都放在網盤里了 通過網盤分享的文件:虛擬機 鏈接: https://pan.baidu.com/s/1eLMD2iq1uEujNN7mWs2dIg?pwdckmh 提取碼: ckmh …

OpenCV 圖像雙三次BSpline插值

文章目錄 一、簡介 二、實現代碼 三、實現效果 參考資料 一、簡介 之前我們介紹過BSpline曲線,一條B樣條曲線可以被定義成 n + 1 n+1 n+1個控制點的集合 { Q i } i = 0 n {\{Q_i\}}^{n}_{i=0}

Prometheus+Grafana構建企業級監控方案

1.prometheus工作原理: Prometheus將指標收集并存儲為時間序列數據庫(時序數據庫),即指標信息與記錄它的時間戳一起存儲,以及稱為標簽的可選鍵值對。 特性: 具有由指標名稱和鍵/值對識別的時間序列數據的…

第23課:行業解決方案設計

第23課:行業解決方案設計 課程目標 掌握金融、醫療、教育等行業應用 學習領域特定Agent設計 了解行業標準集成 實踐設計行業解決方案 課程內容 23.1 金融行業解決方案 金融Agent系統 class FinancialAgentSystem {constructor() {this.agents =

Go語言快速入門教程(JAVA轉go)——2 環境搭建與入門

安裝go Go官網下載地址:https://golang.org/dl/ 中國區官方鏡像站(推薦):https://golang.google.cn/dl/ windows安裝 下載好后選擇安裝路徑即可,安裝完成后,winr 輸入cmd調出命令行窗口,輸入…

ffplay播放pcm

用 ffplay 播放 PCM 裸流時&#xff0c;必須手動告訴它“沒有封裝頭、采樣率、聲道數、采樣格式”四個關鍵點。命令模板如下&#xff1a; ffplay -f <采樣格式> -ar <采樣率> -ac <聲道數> -i <pcm文件>常用組合示例 48 kHz、16 bit、小端、雙聲道 ffp…

【LLM】大模型訓練中的穩定性問題

訓練穩定性問題 &#x1f4cb; 概述 本文檔詳細介紹了在項目中解決訓練穩定性問題的方法、原理分析以及實際應用。涵蓋了梯度裁剪、損失函數優化、數值穩定化處理和學習率調度等關鍵技術。&#x1f6a8; 問題描述 現象: 訓練過程中出現數值不穩定&#xff0c;損失函數波動劇烈 …

【linux系統】6. 基礎開發工具(一)

一. 軟件包管理器 1&#xff09;Linux下安裝軟件的常用方法 1. 源代碼安裝 下載程序的源代碼&#xff0c;本地編譯成二進制文件&#xff0c;拷貝到系統指定路徑下。 2. rpm包安裝 已經編譯好的安裝包&#xff0c;使用rpm對應的指令去安裝&#xff0c;也比較麻煩。 3. 包…

ffplay數據結構分析

struct VideoState 播放器封裝 typedef struct VideoState {SDL_Thread *read_tid; // 讀線程句柄AVInputFormat *iformat; // 指向demuxerint abort_request; // 1時請求退出播放int force_refresh; // 1時刷新畫面&#xff0c;請求立即刷新畫面的意思int paused; …

OpenCV:銀行卡號識別

目錄 一、項目原理與核心技術 二、環境準備與工具包導入 1. 環境依賴 2. 工具包導入 三、自定義工具類 myutils.py 實現 四、主程序核心流程&#xff08;銀行卡識別.py&#xff09; 1. 命令行參數設置 2. 銀行卡類型映射 3. 輔助函數&#xff1a;圖像展示 五、步驟 1…