深入解析 Vision Transformer (ViT) 與其在計算機視覺中的應用

在近年來,深度學習尤其在計算機視覺領域取得了巨大的進展,而 Vision Transformer(ViT)作為一種新的視覺模型,它的表現甚至在許多任務中超過了傳統的卷積神經網絡(CNN),如

ResNet。在這篇博客中,我們將詳細介紹 Vision Transformer 的工作原理,并解釋它如何在各種公開數據集上超越最好的 ResNet,尤其是在大數據集上的預訓練過程中,ViT 展現出的優勢。

什么是 Vision Transformer (ViT)?

1. 背景與起源

Vision Transformer(ViT)是從 Transformer 模型發展而來的,最初的 Transformer 模型主要應用于自然語言處理(NLP)任務,尤其是機器翻譯。在 NLP 中,Transformer 展現出了其強大的序列建模能力,能夠捕捉長距離的依賴關系。

在計算機視覺領域,傳統的卷積神經網絡(CNN)一直是圖像分類、目標檢測等任務的主力。然而,ViT 在提出后,尤其是在大型數據集上進行預訓練時,憑借其在長距離依賴建模上的優勢,迅速展示了其強大的能力。ViT 把 Transformer 模型應用于圖像數據,并通過某些創新技巧,解決了傳統卷積神經網絡的局限性。

2. ViT 的基本原理

ViT 將圖像輸入視為一系列小的圖像塊(patch),而不是傳統的像素級輸入。通過這種方法,ViT 將圖像的局部信息轉換為序列數據,使得 Transformer 可以通過自注意力機制對圖像進行處理。下面我們將詳細介紹 ViT 的工作流程。

ViT 的工作流程

1. 圖像分塊(Patch Splitting)

首先,將輸入圖像劃分為固定大小的塊(patch),每個塊的尺寸通常為 16x16 或更大,具體取決于模型的設計。在處理過程中,每個圖像塊被視為一個獨立的單元,這與自然語言處理中的“單詞”相似。

假設原圖的尺寸為 224x224 像素,ViT 將其劃分為 14x14 個 16x16 的小塊。這樣,原始圖像就被轉化為 196 個圖像塊(14 * 14 = 196),每個塊有 3 個通道(RGB)。

2. 向量化(Flattening)

每個小塊通過 Flatten 操作(拉伸)變成一個向量。例如,一個 16x16 大小的 RGB 圖像塊經過拉伸后將變為一個 768 維的向量(16x16x3 = 768)。這些向量作為 Transformer 的輸入。

3. 線性變換(Linear Transformation)

每個圖像塊向量通過一個線性變換,映射到一個新的維度,這個操作通常由一個全連接層完成。此時,所有塊的特征空間被轉換到新的表示空間中,得到新的表示向量 z_i

4. 添加位置編碼(Positional Encoding)

由于 Transformer 本身并不具備處理序列中元素位置的能力,ViT 通過添加位置編碼來保留位置信息。每個圖像塊的向量 z_i 會加上相應的位置信息,這樣每個塊的表示就不僅包含了圖像內容的信息,還包含了該塊在圖像中的位置信息。

如果不包含位置信息,那么左右兩張圖對transformer眼里是一樣的,所有要給圖片位置做編號

x1-xn是圖片中n個小塊向量化后得到的結果,把他們做線性變換并且得到位置信息得到向量z1-zn,(既包含內容信息又包含位置信息)

5. CLS Token 和最終的輸入

為了最終的圖像分類,ViT 引入了一個特殊的分類標記(CLS Token)。該標記是一個額外的向量,通常初始化為零,并與圖像塊的表示一起作為輸入送入 Transformer。最終,CLS Token 會作為圖像的整體表示,進行分類任務。

6. Transformer 編碼器(Encoder)

輸入經過位置編碼和 CLS Token 的處理后,所有的圖像塊向量會被送入 Transformer 編碼器。ViT 使用多層的自注意力機制(Self-Attention)來處理這些向量。每一層的輸出都會被送入下一層,直到所有的信息被充分聚合。

7. 分類與輸出

經過多次的自注意力處理后,最終的 CLS Token 會被送入一個全連接層,該層輸出一個包含所有類別概率的向量 p。通過與真實標簽進行比較,ViT 利用交叉熵損失函數來計算誤差,并通過梯度下降優化網絡參數。

8. 訓練過程:預訓練與微調

ViT 的訓練過程可以分為兩個階段:預訓練和微調。

預訓練(Pretraining)

預訓練階段是在一個大規模的數據集上進行的,通常會使用像 ImageNet 或 JFT-300M 這樣的龐大數據集。這一階段的目標是讓模型學習到通用的視覺特征。通常,預訓練時使用的模型參數是隨機初始化的,隨著訓練的進行,模型不斷優化,學習到有用的圖像特征。

微調(Fine-tuning)

預訓練完成后,模型會在較小的任務特定數據集(如 CIFAR-10、ADE20K 等)上進行微調。通過在這些特定任務上繼續訓練,模型能夠調整參數,以適應特定的應用場景。

ViT 與 ResNet 的比較

傳統的卷積神經網絡,如 ResNet,依靠卷積層通過局部感受野捕捉圖像特征。而 ViT 的核心優勢在于 Transformer 的自注意力機制。自注意力機制允許模型在處理每個圖像塊時,能夠關注到其他位置的信息,因此能夠捕捉更遠距離的圖像依賴。

當在大規模數據集上預訓練時,ViT 展現出比 ResNet 更好的性能,尤其是在較大的數據集上。隨著數據集規模的擴大,ViT 的優勢變得更加明顯。

為什么 ViT 在大數據集上效果更好?

  1. 全局依賴建模: ViT 的自注意力機制允許它同時關注整個圖像,而不像 CNN 那樣依賴局部卷積操作。這樣,ViT 可以捕捉到更多的全局信息,對于大數據集的圖像分析更具優勢。

  2. 更強的表示能力: 由于 ViT 處理的是圖像塊的向量表示,因此它的表示能力比 CNN 更強,特別是在任務復雜或者圖像間關系較遠的場景下。

  3. 更好的擴展性: Transformer 的設計使得它能夠輕松地擴展到更大的數據集和更復雜的任務上,尤其是當計算資源足夠時。

總結

Vision Transformer(ViT)是計算機視覺領域的一項創新,它將 Transformer 模型從自然語言處理應用擴展到了圖像處理任務。通過將圖像分塊、向量化、加位置編碼,再通過 Transformer 編碼器進行處理,ViT 能夠有效地提取圖像中的全局特征,并在大規模數據集上展現出超越傳統卷積神經網絡(如 ResNet)的性能。

盡管 ViT 在計算上要求較高,尤其是需要大量數據來訓練,但在預訓練后,它在圖像分類、目標檢測等任務中提供了顯著的提升。隨著大數據集和計算能力的不斷提升,ViT 很可能成為未來計算機視覺領域的主流方法之一。

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

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

相關文章

PXE_Kickstart_無人值守自動化安裝系統

文章目錄 1. PXE2. 配置服務參數2.1 tftp服務配置2.2 dhcp服務配置2.3 http服務配置 3. 配置PXE環境3.1 網絡引導文件pxelinux.03.2 掛載鏡像文件3.3 創建配置文件default3.4 復制鏡像文件和驅動文件3.5 修改default文件3.6 配置ks.cfg文件 4. PXE客戶端4.1 創建虛擬機&#xf…

鴻蒙NEXT開發動畫案例4

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件,代碼如下: /*** TODO SpinKit動畫組件 - 雙粒子旋轉縮放動畫* author: CSDN-鴻蒙布道師* since: 2025/05/08*/ ComponentV2 export struct SpinFour {// 參數定義Require Param spinSize: number 36…

基于STM32、HAL庫的CP2102-GMR USB轉UART收發器 驅動程序設計

一、簡介: CP2102-GMR是Silicon Labs公司生產的一款USB轉UART橋接芯片,主要特點包括: 集成USB 2.0全速功能控制器 內置USB收發器,無需外部電阻 工作電壓:3.0V至3.6V 支持的數據格式:數據位8,停止位1,無校驗 最高支持1Mbps的波特率 內置512字節接收緩沖區和512字節發送…

Ubuntu 22虛擬機【網絡故障】快速解決指南

Ubuntu22虛擬機突然無法連接網絡了,以下是故障排除步驟記錄。 Ubuntu 22虛擬機網絡故障快速解決指南 當在虛擬機中安裝的 Ubuntu 22 系統出現 ping: connect: 網絡不可達 和 ping: www.baidu.com: 域名解析出現暫時性錯誤的報錯時,通常意味著虛擬機無法…

實戰springcloud alibaba

實戰springcloud alibaba 前言 如何搭建一套最新的springcloud alibaba,以適配項目升級需求? 1.版本的選擇 2.各組件的適配 3.新技術的敏感性 4.前瞻性,幾年內不會被淘汰 參考資料:Spring Cloud Alibaba 參考文檔 https://spring…

泰迪杯特等獎案例學習資料:基于卷積神經網絡與集成學習的網絡問政平臺留言文本挖掘與分析

(第八屆“泰迪杯”數據挖掘挑戰賽A題特等獎案例深度解析) 一、案例背景與核心挑戰 1.1 應用場景與行業痛點 隨著“互聯網+政務”的推進,網絡問政平臺成為政府與民眾溝通的重要渠道。某市問政平臺日均接收留言超5000條,涉及民生、環保、交通等20余類訴求。然而,傳統人工…

DVWA靶場保姆級通關教程--06不安全驗證機制

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 目錄 文章目錄 前言 原理詳解 1. 前后端驗證邏輯不一致 2. 驗證碼值保存在客戶端 3. 驗證碼可預測或重復 4. 驗證碼驗證與邏輯解耦 一、處理關卡報錯 二、low級別源…

【LeetCode Hot100 | 每日刷題】排序數組

912. 排序數組 - 力扣(LeetCode) 題目: 給你一個整數數組 nums,請你將該數組升序排列。 你必須在 不使用任何內置函數 的情況下解決問題,時間復雜度為 O(nlog(n)),并且空間復雜度盡可能小。 示例 1&…

Windows系統下使用Kafka和Zookeeper,Python運行kafka(二)

1.配置 Zookeeper 進入解壓后的 Zookeeper 目錄(例如 F:\zookeeper\conf),復制 zoo_sample.cfg 文件并命名為 zoo.cfg(如果 zoo.cfg 已經存在,則直接編輯該文件)。 打開 zoo.cfg 文件,配置相關…

Web 自動化之 HTML JavaScript 詳解

文章目錄 一、HTML 常用標簽二、javascript 腳本1、什么是 javascript(js)2、 js變量和函數3、js 彈窗處理4、js 流程控制語句和 switch 結構語句應用 一、HTML 常用標簽 HTML:超文本標記語言 超文本:不僅只包含文字,還有超鏈接、視頻…這些…

el-date-picker的type為daterange時僅對開始日期做限制

文章目錄 前言繡球html代碼一、正確代碼二、錯誤代碼 前言繡球 需求是這樣的,開始日期需要限制只能選擇今天的日期,結束日期只能選擇今天之后的日期。結束日期很常見,但是單純限制開始日期,還是蠻少見的,尤其是datera…

觀測云:安全、可信賴的監控觀測云服務

引言 近日,“TikTok 遭歐盟隱私監管機構調查并處以 5.3 億歐元”一案,再次引發行業內對數據合規等話題的熱議。據了解,僅 2023 年一年就產生了超過 20 億美元的 GDPR 罰單。這凸顯了在全球化背景下,企業在數據隱私保護方面所面臨…

認識中間件-以及兩個簡單的示例

認識中間件-以及兩個簡單的示例 什么是中間件一個響應處理中間件老朋友 nest g如何使用為某個module引入全局引入編寫邏輯一個日志中間件nest g mi 生成引入思考代碼進度什么是中間件 官方文檔 中間件是在路由處理程序之前調用的函數。中間件函數可以訪問請求和響應對象,以及…

基于Flask、Bootstrap及深度學習的水庫智能監測分析平臺

基于Flask、Bootstrap及深度學習的水庫智能監測分析平臺 項目介紹 本項目是基于Flask框架構建的水庫智能監測分析平臺,集水庫數據管理、實時監測預警、可視化分析和智能預測功能于一體。 預測水位的預警級別:藍色預警沒有超過正常水位且接近正常水位1米…

springboot生成二維碼到海報模板上

springboot生成二維碼到海報模板上 QRCodeController package com.ruoyi.web.controller.app;import com.google.zxing.WriterException; import com.ruoyi.app.domain.Opportunity; import com.ruoyi.app.tool.QRCodeGenerator; import com.ruoyi.common.core.page.TableDat…

如何使用極狐GitLab 軟件包倉庫功能托管 maven?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 軟件包庫中的 Maven 包 (BASIC ALL) 在項目的軟件包庫中發布 Maven 產物。然后,在需要將它們用作依賴項時安裝它…

企業如何將釘釘付款單高效集成到金蝶云星空?

釘釘數據集成到金蝶云星空:修改下推的付款單③ 在企業信息化系統中,數據的高效流轉和準確對接是實現業務流程自動化的關鍵。本文將分享一個實際案例,展示如何通過輕易云數據集成平臺,將釘釘中的付款單數據無縫集成到金蝶云星空系…

python 實現文件批量重命名

以下是使用Python實現文件批量重命名的示例代碼。該代碼可以將指定目錄下的文件按照一定規則進行重命名,這里以將文件重命名為帶有編號的文件名為例: import osdef batch_rename(directory):if not os.path.isdir(directory):print(

Pandas學習筆記(四)

DataFrame對象 文章目錄 DataFrame對象導入本文需要的包DataFrame與Series的相似之處使用read_csv函數導入DataFrameSeries和DataFrame的共享與專有屬性Series和DataFrame的共有方法 對DataFrame進行排序按照單列進行排序按照多列進行排序按照索引進行排序對列索引進行排序 設置…

DA14585墨水屏學習(2)

一、user_svc2_wr_ind_handler函數 void user_svc2_wr_ind_handler(ke_msg_id_t const msgid,struct custs1_val_write_ind const *param,ke_task_id_t const dest_id,ke_task_id_t const src_id) {// sprintf(buf2,"HEX %d :",param->length);arch_printf("…