論文閱讀:CLIP:Learning Transferable Visual Models From Natural Language Supervision

從自然語言監督中學習可遷移的視覺模型
雖然有點data/gpu is all you need的味道,但是整體實驗和談論豐富度上還是很多的,非常長的原文和超級多的實驗討論,隔著屏幕感受到了實驗的工作量之大。

Abstract

最先進的計算機視覺系統被訓練來預測一組固定的預定對象類別。 這種受限制的監督形式限制了它們的通用性和可用性,因為需要額外的標記數據來指定任何其他視覺概念。 直接從原始文本中學習圖像是一種很有前途的選擇,它利用了更廣泛的監督來源。 我們證明了預測哪個標題與哪個圖像相匹配的簡單預訓練任務是一種有效且可擴展的方法,可以在從互聯網收集的4億對(圖像,文本)數據集上從頭開始學習SOTA圖像表示。 在預訓練之后,使用自然語言來參考學習到的視覺概念(或描述新的概念),從而實現模型向下游任務的零樣本轉移。我們通過對30多個不同的現有計算機視覺數據集進行基準測試來研究這種方法的性能,這些數據集涵蓋了OCR、視頻中的動作識別、地理定位和許多類型的細粒度對象分類等任務。 該模型不平凡地轉移到大多數任務,并且通常與完全監督的基線競爭,而不需要任何數據集特定的訓練。 例如,我們在ImageNet zero-shot上匹配原始ResNet-50的精度,而不需要使用它所訓練的128萬個訓練樣本中的任何一個。

Introduction and Motivating Work

在過去幾年中,直接從原始文本中學習的預訓練方法徹底改變了NLP

與任務無關的目標,如自回歸和masked語言建模,已經在計算、模型容量和數據方面擴展了許多數量級,穩步提高了能力。“文本到文本”作為標準化輸入輸出接口的發展使任務無關架構能夠零射傳輸到下游數據集,從而消除了對專門輸出頭或數據集特定定制的需要。 像GPT-3在使用定制模型的許多任務中具有競爭力,而幾乎不需要特定數據集的訓練數據。

這些結果表明,在網絡規模的文本集合中,現代預訓練方法可獲得的總體監督優于高質量的人群標記NLP數據集。然而,在計算機視覺等其他領域,在人群標記數據集(如ImageNet)上預訓練模型仍然是標準做法(Deng et al., 2009)。 直接從網絡文本中學習的可擴展預訓練方法能否在計算機視覺領域取得類似的突破? 先前的工作令人鼓舞。

總之可以整理為,之前的很多工作其實并不是方法不行而是數據不夠多,所以效果不好,并且泛化性能非常有限,而作者提出的方法稱為CLIP(Contrastive LanguageImage Pre-training)在各個數據集上都表現出了很高的指標,有更強的魯棒性。例如在ImageNet上,CLIP同監督訓練的ResNet50達到了同等的水平。

通過4億數據在大量數據集表現出了優秀的效果,但是后文中對比中在MNIST效果卻很差,作者后文給出的原因是發現數據集很少有和MNIST相似的數據。所以后續文章作者也總結了很多CLIP的局限性,但是他依舊在很多數據集表現的很好這也是不能忽視的。
在這里插入圖片描述

Approach

2.1 自然語言監督

以自然語言為(標簽)指導模型學習具有很多優勢。

首先,不需要人工標注,可以快速規模化。可以充分利用互聯網上的信息。

其次,強大的zero-shot遷移學習能力。傳統的機器學習對輸入標簽格式有特殊要求,在推理階段需要遵循相同的格式。數據集的格式限制了模型的使用范圍。傳統的機器學習模型不能在數據集定義的格式之外的任務上使用。使用自然語言作為監督信號,能夠處理任何以自然語言作為輸入的任務。而自然語言是最直觀、通用的輸入格式。所以模型可以方便地遷移到其它場景。

第三,讓CV模型學習到視覺概念的自然語言描述。將“蘋果”圖片和“蘋果”單詞建立聯系,也就真正學習到了圖片的語義信息。

第四,多模態。以自然語言作為橋梁,用一個大模型學習文本、圖片甚至視頻的理解。

2.2 創建足夠大的數據集

現有數據集主要有3個,MS-COCO、Visual Genome、YFCC100M。前兩者是人工標注的,質量高但是數據量小,大約只有0.1M。YFCC100M大約有100M圖片,但是質量堪憂,有些標題只有無意義的名字,過濾后,這個數據集縮小至15M,大約和ImageNet差不多大。(顯然這個數據量是不夠的)

OpenAI自己構建了一個400M的數據集,使用500K個查詢進行搜索,每個查詢大約有20K個“圖像—文本“對。該數據集被稱為WIT(webimagetext),數據量和GPT-2使用的差不多。

2.3 有效的預訓練方法

OpenAI的第一個嘗試類似于VirTex,將基于CNN的圖片編碼器和文本transformer從頭訓練,去預測圖片的標題。然而這個方法很快遇到了困難。從下圖中可以看出,一個63M的語言模型,使用了基于ResNet50的圖片編碼器的兩倍計算量,但是效率卻是預測詞袋的1/3(3x efficiency)。

很快,OpenAI嘗試了第二種方案——對比學習。將文本和圖片的embedding進行相似度比較,從圖片2可以看出訓練速度是預測詞袋的4倍。

對方法的描述:給定一個大小為N的batch,CLIP需要預測這NxN個對是否屬于同一語義。CLIP利用圖片和文本編碼器將圖片和文本的embedding進行基于cosine距離的打分,使N個成對的分數變大,使N^2-N個非成對的分數減小。模型訓練是基于對稱的交叉熵說損失。下圖展示了訓練的偽代碼:
在這里插入圖片描述
代碼過程描述:

第1-2行:利用圖片編碼器和文本編碼器提取圖片和文本的高維表征。

第3-4行:利用可學習線性變換(無偏置)將圖片和文本表達映射到同一語義空間

第5行:內積進行相似度比較,同時乘上溫度系數 exp(\tau) 。

第6-9行:分別沿圖像(每一條文本同不同圖片的相似度)和文本軸(每一條圖片同文本的相似度)計算交叉熵,相加處以2得到對稱損失。

第一個是我們從頭開始訓練CLIP,而不使用ImageNet權重初始化圖像編碼器或使用預訓練權重初始化文本編碼器。

第二個我們只使用線性投影將每個編碼器的表示映射到多模態嵌入空間。 我們沒有注意到兩個版本之間的訓練效率差異,并推測非線性投影可能僅在自監督表示學習方法中與當前圖像的細節共同適應。本文沒有使用非線性變換;

第三個是直接利用原始文本即單個句子;

第四個是圖片的預處理只有大小變換后隨機方形剪切;

最后,控制softmax中對數范圍的溫度參數τ在訓練過程中被直接優化為對數參數化的乘法標量,以避免變成超參數。

2.4 選擇和縮放模型

視覺:resnet或者transformer

文本:transformer

2.5 訓練

訓練了8個模型,不同的深度、寬度、patch等,32epoch、adam、batchsiz=32768、混合精度訓練

訓練完后對模型用更大的size進行了一個fintune了1epoch稱其為CLIP模型
本文構造了一個更簡單的學習任務。利用對比學習的思想,只預測哪段文本作為一個整體是和圖片成對出現的,不需要預測文本的確切內容。用對比學習的目標( contrastive objective)代替了預測學習的目標(predictive objective)。這個約束放寬了很多,學習需要的算力減少很多。

作者發現,僅僅把訓練目標任務從預測型換成對比性,訓練的效率就能提升4倍。如圖所示。
在這里插入圖片描述

2.6 使用CLIP

在下游任務測試時,有兩種使用CLIP的方法。第一種,利用文本prompt進行預測,將預測的embedding同類別的embedding進行相似度匹配,實現分類任務;第二種,額外訓練linear probe進行預測。

在這里插入圖片描述
這張圖片展示了基于對比學習訓練(1)和使用零樣本預測(2&3)。對比學習是利用文本—圖像對數據,判別當前圖片是否于文本匹配,從而學習圖像的高維表征;零樣本預測時,利用prompt構建不同類別的embedding,然后同圖片匹配從而進行分類。
生成句子例如這是一張xx照片,然后通過text encoder 編碼得到文本特征,然后用文本特征和圖像特征進行cosine 相似度 進入softmax得到概率分布

總之,我認為的一個重要貢獻是它打通了文本和圖片理解的界限,催生了后面多模態的無限可能。后續的“以圖生文”,“以文搜圖”都有賴這一點。

Experiments

3.1 zero-short 遷移

作者動機:解決之前工作遷移其他任務困難的問題。

3.1.3對比其他方法

CLIP在零樣本遷移效果和有監督的res50相當。CLIP同Visual N-Grams進行了橫向對比。如Table1中所示,幾乎在所有數據集上CLIP都遠超過Visual N-Grams(體現CLIP的zero-shot能力)
在這里插入圖片描述
3.1.4提示工程與集成

a photo of a {label}這種方法可以提升在imagenet上1.3%的準確率,prompt對于分類的性能很重要。因此OpenAI自己嘗試了很多prompt去提升分類的準確率。比如在Oxford-IIIT Pet數據集中,使用prompt “A photo of a {label}, a type of pet.”就好于單單使用“A photo of a {label},”。還講了一些在Food101、FGVC、OCR、satellite數據集上的經驗。

3.2特征學習

特征學習是指在下游任務數據集上用全部的數據重新訓練。有兩種方式衡量預訓練階段學習到的特征好不好:

linear prob將預訓練好的模型“凍住”,不改變其參數,在之上訓練一個分類頭。
finetune整個網絡參數都可以調整,端到端地學習。微調一般更靈活,效果更好。
本文采用linear prob的方式。不需要大量調參,評測流程可以標準化。

總結

這里還有很多數據分布問題、模型不足、實驗討論、和人類對比等等,實驗非常豐富,就不一一展開, 總的來說,花這么多人、gpu、數據實現的CLIP想必在gpt 4中也有很多該實驗的影子和貢獻,openai的這篇文章也給后續很多文章和領域提供了思路,值得一讀吧。
參考:
史上最全OpenAI CLIP解讀:簡單的想法與被低估的實驗
李沐-clip

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

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

相關文章

第9篇:數據庫中間件的容錯機制與高可用架構設計

9.1 為什么數據庫中間件需要容錯與高可用設計? 隨著系統復雜性增加,數據庫中間件不僅承載 SQL 路由、分片、事務控制等核心職責,也成為系統的 單點風險源。 為確保系統 724 小時穩定運行,中間件必須具備: 自動故障檢測…

c#壓縮與解壓縮-SharpCompress

SharpCompress SharpCompress 是一個開源項目庫,能夠處理文件。c#庫對于壓縮已經有很多,可以隨意選擇,看了SharpCompress感覺比較簡潔,還是介紹給大家。 項目地址: sharpcompress 項目使用 引入nuget包&#xff1…

Go中的協程并發和并發panic處理

1 協程基礎 1.1 協程定義(Goroutine) 概念:Go 語言特有的輕量級線程,由 Go 運行時(runtime)管理,相比系統線程(Thread),創建和銷毀成本極低,占用…

性能優化筆記

性能優化轉載 https://www.cnblogs.com/tengzijian/p/17858112.html 性能優化的一般策略及方法 簡言之,非必要,不優化。先保證良好的設計,編寫易于理解和修改的整潔代碼。如果現有的代碼很糟糕,先清理重構,然后再考…

frida簡介及環境搭建

frida簡介及環境搭建 一、frida簡介二、frida環境搭建一、frida簡介 frida是一款輕量級的Hook框架,也可以說是一種動態插樁工具,可以插入一些原生代碼到原生app的內存空間去,動態地監視和修改器行為,這些原生平臺可以是Win、Mac、Linux、Android或者iOS。 frida分為兩個部…

Python實例題:Python計算微積分

目錄 Python實例題 題目 代碼實現 實現原理 符號計算: 數值計算: 可視化功能: 關鍵代碼解析 1. 導數計算 2. 積分計算 3. 微分方程求解 4. 函數圖像繪制 使用說明 安裝依賴: 基本用法: 示例輸出&#…

Mybatis 攔截器 與 PageHelper 源碼解析

Mybatis 攔截器 與 PageHelper 源碼解析 一、MyBatis插件機制的設計思想二、Interceptor接口核心解析2.1 核心方法2.2 Intercepts、Signature 注解2.3 自定義攔截器 三、PageHelper 介紹3.1 使用姿勢3.2 參數與返回值3.3 使用小細節 四、PageHelper 核心源碼解析4.1 分頁入口&a…

Linux中 SONAME 的作用

?? 一、從 -lexample 到 SONAME ? 假設你有以下文件結構: /libexample.so → libexample.so.1 /libexample.so.1 → libexample.so.1.0.0 /libexample.so.1.0.0 # SONAME: libexample.so.1/libexample.so.2 → libexample.so.2.0.0 /libexample.so.2.0…

熱門消息中間件匯總

文章目錄 前言RabbitMQ基本介紹核心特性適用場景 Kafka基本介紹核心特性適用場景 RocketMQ基本介紹核心特性適用場景 NATS基本介紹核心特性適用場景 總結選型建議與未來趨勢選型建議未來趨勢 結語 前言 大家后,我是沛哥兒。作為技術領域的老濕機,在消息…

【DAY42】Grad-CAM與Hook函數

內容來自浙大疏錦行python打卡訓練營 浙大疏錦行 知識點: 回調函數lambda函數hook函數的模塊鉤子和張量鉤子Grad-CAM的示例 作業:理解下今天的代碼即可 在深度學習中,我們經常需要查看或修改模型中間層的輸出或梯度。然而,標準的前向傳播和反…

C++032(static變量)

static變量 static變量是靜態存儲變量,定義變量時系統就會為其分配固定的存儲單元,直至整個程序運行結束。之前我們接觸過的全局變量即為static變量,它們存放在靜態存儲區中。使用static關鍵字,可將變量聲明成static變量。例如&a…

N元語言模型 —— 一文講懂!!!

目錄 引言 一. 基本知識 二.參數估計 三.數據平滑 一.加1法 二.減值法/折扣法 ?編輯 1.Good-Turing 估計 ?編輯 2.Back-off (后備/后退)方法 3.絕對減值法 ?編輯4.線性減值法 5.比較 三.刪除插值法(Deleted interpolation) 四.模型自適應 引言 本章節講的…

SpringAI Alibaba實戰文生圖

1?? 前置準備:搭建開發環境與服務配置🚀 🔧 1.1 環境要求 JDK 17(推薦 JDK 21)、Spring Boot 3.x(本案例使用 3.3.4)、阿里云百煉大模型服務 API Key。需在阿里云控制臺完成服務開通并獲取有…

實戰二:開發網頁端界面完成黑白視頻轉為彩色視頻

?一、需求描述 設計一個簡單的視頻上色應用,用戶可以通過網頁界面上傳黑白視頻,系統會自動將其轉換為彩色視頻。整個過程對用戶來說非常簡單直觀,不需要了解技術細節。 效果圖 ?二、實現思路 總體思路: 用戶通過Gradio界面上…

Kotlin List 操作全面指南

在傳統 Java 開發 List 相關的 API 中,有著樣板代碼冗長、缺乏鏈式調用、空安全等問題。 Kotlin 這門語言 為 List 提供了豐富的擴展函數,這些函數大大簡化了集合操作,解決了傳統 Java 集合 API 中的許多痛點。 一、基礎操作 1. 創建 List …

硬盤尋址全解析:從 CHS 三維迷宮到 LBA 線性王國

在數字存儲的底層世界,硬盤如同一個巨大的 “數據圖書館”,而尋址模式就是決定如何高效找到 “書籍”(扇區)的核心規則。從早期基于物理結構的 CHS(柱面 - 磁頭 - 扇區)三維尋址,到現代抽象化的…

oracle 11g ADG備庫報錯ORA-00449 lgwr unexpectedly分析處理

問題背景 昨天遇到群友提問,遇到ADG備庫掛了的情況 數據版本:11.2.0.4 操作系統:Centos7.9 環境:ADG主備庫,主庫為RAC,備庫也是RAC 具體報錯ORA-00449以及ORA-04021 看樣子是LGWR掛了,還有個鎖等待。 問題分析 先…

Python——day46通道注意力(SE注意力)

一、 什么是注意力 注意力機制是一種讓模型學會「選擇性關注重要信息」的特征提取器,就像人類視覺會自動忽略背景,聚焦于圖片中的主體(如貓、汽車)。 transformer中的叫做自注意力機制,他是一種自己學習自己的機制&…

入門AJAX——XMLHttpRequest(Post)

一、前言 在上篇文章中,我們已經介紹了 HMLHttpRequest 的GET 請求的基本用法,并基于我提供的接口練習了兩個簡單的例子。如果你還沒有看過第一篇文章,強烈建議你在學習完上篇文章后再學習本篇文章: 🔗入門AJAX——XM…

?BEV和OCC學習-3:mmdet3d 坐標系

目錄 坐標系 轉向角 (yaw) 的定義 框尺寸的定義 與支持的數據集的原始坐標系的關系 KITTI Waymo NuScenes Lyft ScanNet SUN RGB-D S3DIS 坐標系 坐標系 — MMDetection3D 1.4.0 文檔https://mmdetection3d.readthedocs.io/zh-cn/latest/user_guides/coord_sys_tuto…