參考網站:
萬字長文帶你全面解讀視覺大模型 - 知乎
一.DINO
1."YOLO"(You Only Look Once)和"DINO"(DIstillation of knowledge)是兩種不同的模型,針對不同的任務和學習目標。以下是它們學習到的特征的主要區別:
-
任務目標:
- YOLO: YOLO是一種目標檢測模型,旨在在圖像中檢測和定位多個物體。YOLO的訓練目標是通過回歸網絡預測圖像中每個物體的邊界框及其類別概率。
- DINO: DINO主要是一種自監督學習方法,專注于學習圖像表示。DINO的目標是通過對比損失來訓練模型,使相似的圖像在嵌入空間中更加接近。
-
學習方法:
- YOLO: YOLO使用有監督學習,通過最小化目標檢測任務中的損失函數,使得模型能夠準確地定位和分類圖像中的物體。
- DINO: DINO采用自監督學習方法,通過對比損失來約束網絡學習圖像特征,使得相似圖像的表示更加接近。
-
特征表示:
- YOLO: YOLO學習用于目標檢測的圖像特征,這些特征應該有助于準確地定位和分類圖像中的物體。
- DINO: DINO學習的是通用的圖像表示,旨在捕捉圖像中的語義和結構信息。這些表示可以在多個任務中使用,而不僅僅局限于目標檢測。
-
應用領域:
- YOLO: YOLO主要用于目標檢測任務,在實時目標檢測和物體定位方面表現出色。
- DINO: DINO主要關注圖像表示學習,可以用于多個領域,包括圖像分類、特征學習等。
總體而言,YOLO和DINO是為不同任務設計的模型,它們學習的特征主要取決于其任務目標。 YOLO側重于目標檢測,而DINO側重于通用圖像表示學習。
2.DINO(Distillation via Noisy-Labels)模型是一種基于自監督學習的視覺表示學習方法,它主要依靠教師-學生(Teacher-Student)架構進行訓練。下面是DINO模型的大致算法實現過程:
-
數據預處理:
- 對輸入圖像進行數據增強,生成兩個視圖(View1和View2),這兩個視圖是對同一張原始圖像的不同變換,例如隨機裁剪、翻轉、色彩變換等。
-
模型結構:
- 設定兩個相同的模型:教師網絡(Teacher)和學生網絡(Student),它們都采用Transformer或者類似結構,如Vision Transformer (ViT)。
-
特征提取:
- 分別將兩個視圖輸入到教師網絡和學生網絡中,提取出對應的特征表示。
-
教師網絡更新:
- 教師網絡的參數是對學生網絡參數的指數移動平均(Exponential Moving Average, EMA),在訓練過程中,教師網絡的參數更新較為保守,以維持穩定的學習信號。
-
對比學習:
- 計算學生網絡對View1產生的特征向量與教師網絡對View2產生的特征向量之間的 cosine相似度。
- 通過對比學習 loss,讓學生網絡模仿教師網絡對同一張圖片不同視圖的特征表示,促使兩個網絡學習到一致的特征表示。
-
正則化與噪聲標簽:
- DINO模型通過引入噪聲標簽(noisy labels)的概念,即在網絡內部生成偽標簽,來增強模型對噪聲和多樣性的適應能力。
- 使用歸一化溫度softmax函數對教師網絡的特征向量進行處理,模擬軟標簽,作為學生網絡學習的目標。
-
訓練過程:
- 學生網絡的訓練目標是既要模仿教師網絡的特征表示,又要保持不同圖片之間的特征差異性。
- 更新學生網絡的參數,最小化對比學習loss以及可能的正則化loss。
-
迭代訓練:
- 重復以上步驟,不斷迭代訓練,直到模型收斂。
通過這種訓練方式,DINO模型能夠在沒有人工標注的情況下學習到強大的視覺特征表示,這些特征可以用于下游的多項視覺任務,如圖像分類、目標檢測等。
3.DINO(Distillation with Noisy-Labels)和DINOv2是在自監督學習領域中的連續迭代版本,它們都采用了對比學習和教師-學生機制來訓練無監督視覺模型。盡管兩者的核心思想類似,但DINOv2通常會在以下幾個方面有所改進或變化:
-
性能優化:
- DINOv2可能針對DINO的基礎架構進行了優化,提升了模型在各種視覺任務上的性能表現,比如提高了模型在標準基準測試上的準確性或擴展了模型對于復雜視覺場景的理解能力。
-
算法改進:
- 可能引入了新的訓練策略、損失函數改進或是對模型架構的調整,以促進更好的自監督學習效果和特征表達能力。
-
知識蒸餾:
- DINOv2可能進一步強化了知識蒸餾的過程,例如,更有效地利用大型預訓練模型的知識來指導小型模型的訓練,使得小型模型也能獲得類似的表征學習能力。
-
數據效率與泛化能力:
- DINOv2可能在提高數據利用效率、減少訓練資源需求以及提升模型在未見過的數據上的泛化能力方面做了針對性改進。
-
額外功能或應用場景:
- 隨著技術發展,DINOv2可能會添加新的功能特性,比如更適用于特定任務的微調策略,或者是拓展至其他應用場景,如跨模態學習、實時推理等。
由于具體細節依賴于實際發布的論文和技術文檔,上述區別是基于一般迭代升級的常見方向。要獲得DINO與DINOv2之間精確的技術差異,請查閱相關的官方論文或GitHub項目頁面以獲取最新和詳盡的說明。
全網最強 DINOv2 論文解讀 - 知乎
從 DETR 到 DINO 的進化過程 - 知乎
DINOv2:無需微調,填補 SAM 的空白,支持多個下游任務 - 知乎
DINOv2 by Meta AI
Search · DINOv2 · GitHub
檢測:
https://github.com/IDEA-Research/GroundingDINO
二.DEIT
https://github.com/facebookresearch/deit/tree/colab
DEIT(Data-efficient Image Transformers)并非一個檢測模型,而是用于圖像分類的模型,它基于Vision Transformer(ViT)架構,但更注重于數據效率。不過,我們可以討論一下DEIT在圖像分類任務上的實現過程,因為檢測模型如DETR(DEtection TRansformer)也是基于Transformer結構的,其基本思路有一定的相似性。
DEIT模型算法實現過程概述如下:
-
數據預處理:
- 首先,將輸入圖像分割成多個固定大小的patches(塊),每個patch被線性嵌入成一個向量。
- 將這些嵌入向量拼接在一起,形成一個1D序列,類似于文本中的token序列。
-
位置編碼:
- 為了保留圖像的二維結構信息,為每個patch向量附加一個位置編碼,該編碼反映了patch在原始圖像中的位置。
-
Transformer編碼器:
- 將帶有位置編碼的patch序列送入Transformer的編碼器,編碼器通過多層自注意力機制學習patch之間的關系和全局上下文信息。
-
分類頭:
- 編碼器輸出的序列經過一層或多層全連接層(分類頭),生成對應于每個類別的logits(概率分布)。
-
訓練過程:
- 使用交叉熵損失函數進行訓練,模型的目標是學習如何根據輸入圖像的patch序列預測正確的類別標簽。
- DEIT特別注重在有限訓練數據上的表現,可能會使用一些數據增強技術,以及特定的訓練策略來提高模型的數據效率。
在目標檢測任務中,DETR等模型會在此基礎上引入一個解碼器部分,并利用一個特殊的目的token(如CLS token)來生成檢測框和類別標簽,而DEIT專注于圖像分類任務,不涉及檢測框的生成。如果你感興趣的是DETR這樣的檢測模型,其過程會更為復雜,包括了預測固定數量的物體框和類別標簽等步驟。
DEIT(Data-efficient Image Transformers)模型在訓練時采用了一種適應于Transformer架構的數據結構。具體來說,它遵循以下流程:
-
Patch Embedding:
- 首先,輸入的RGB圖像會被分割成若干個小的非重疊 patches(通常為正方形)。
- 每個patch被線性投影(嵌入)成一個低維向量,這一過程類似詞嵌入在自然語言處理中的作用。
-
Sequence Formation:
- 所有patch嵌入向量按照它們在原始圖像中的位置順序排列,形成一個1D序列,就像文本中的單詞序列一樣。
-
Positional Encoding:
- 由于Transformer對輸入序列的位置信息沒有內在感知能力,因此,每個patch嵌入向量都會附加一個位置編碼,以確保模型能捕捉到圖像的空間布局信息。
-
Transformer Encoder:
- 這個形成的序列隨后被饋送到Transformer的編碼器模塊中,編碼器由多層自注意力和前饋神經網絡組成,用于捕獲patch間的長程依賴關系和全局上下文。
-
Distillation Token (如果適用):
- 在DEIT中,為了優化數據效率并改進訓練過程,可能還會引入一個額外的“蒸餾Token”,它可以聚合整個圖像的信息,并與教師模型的輸出進行比較,從而通過知識蒸餾技術來指導學生模型的學習。
-
Training Process:
- DEIT在訓練時使用標準的監督學習方法,即在ImageNet等大規模圖像分類數據集上,以每個圖像對應的類別標簽作為監督信號。
- 特別地,DEIT關注于在有限的訓練樣本上達到良好的性能,可能運用數據增強、蒸餾技術和其他訓練策略來提升模型的數據效率。
總之,DEIT模型訓練時的數據結構是一種轉換后的、適合于Transformer處理的序列化形式,其中包含了空間位置信息,并通過自注意力機制來提取圖像特征和進行分類。
三.DETR:
DETR(DEtection TRansformer)模型在訓練時采用了一種新穎的數據結構和訓練方式,主要是為了實現端到端的目標檢測。以下是DETR模型訓練時的數據結構和流程:
-
數據預處理:
- 輸入的RGB圖像首先會被分割成多個patches(通常使用卷積神經網絡提取特征圖),然后將這些特征圖展平成1D向量序列。
- 與此同時,創建一組固定數量的“object queries”(目標查詢向量),它們作為額外的序列元素,用于預測圖像中的目標邊界框和類別。
-
位置編碼:
- 類似于BERT等Transformer模型,DETR也為圖像patches和object queries添加了位置編碼,以便模型理解它們在圖像中的位置信息。
-
Transformer結構:
- 將圖像patches和object queries組成的序列輸入到Transformer模型中。Transformer包含編碼器和解碼器部分。
- 編碼器負責處理圖像patches序列,學習圖像的全局上下文信息。
- 解碼器通過自注意力機制,結合編碼器的輸出和object queries,生成一組邊界框坐標和類別預測。
-
集合預測:
- DETR模型的輸出不是連續的邊界框預測,而是一個有限長度的有序列表,列表中的每個元素代表一個可能的目標,并包含其類別和坐標信息。
- 使用 Hungarian 匹配算法將預測結果與 ground truth 進行匹配,以計算訓練損失。
-
損失函數:
- DETR使用了一種稱為“集合損失”(Set Prediction Loss)的方法,它包括 bounding box 的L1損失和類別預測的交叉熵損失,同時加入了一種匹配成本來優化預測結果與真實標簽的匹配。
-
訓練過程:
- 在訓練期間,模型的目標是通過優化上述損失函數,使得預測的邊界框和類別盡可能接近真實的標注信息。
總之,DETR模型通過Transformer結構處理圖像和object queries的序列化表示,并利用集合預測和匈牙利匹配算法優化訓練過程,從而實現了一種全新的、無需 anchor boxes 和非極大值抑制(NMS)的目標檢測方法。
四.
Swin Transformer是一種專門針對計算機視覺任務優化的Transformer架構,它可以被視為Vision Transformer(ViT)在計算效率和性能上的一個重要升級版。下面我將以通俗易懂的語言為您講解Swin Transformer的工作原理:
1. Transformer的基礎?Transformer原本是用于自然語言處理(NLP)的模型,它通過自注意力機制來理解和處理文本序列。而在Swin Transformer中,這種自注意力機制被巧妙地應用于圖像處理,使模型能夠理解圖像中的各個部分間的關聯。
2. 多尺度感知?在圖像中,物體大小各異,傳統的Transformer直接作用于圖像像素時計算量巨大。Swin Transformer引入了層級結構和滑動窗口(Shifted Window)的概念,實現了對圖像進行多尺度分析。模型會將大圖像切割成多個小窗口,在每個窗口內部計算自注意力,同時通過跨窗口連接機制整合不同窗口間的信息。
3. 層級特征提取?類似于CNN(卷積神經網絡)中的特征金字塔網絡(FPN),Swin Transformer構建了一個層級結構,隨著網絡層數加深,特征圖的空間分辨率逐漸減小,但感受野(能“看”到的圖像范圍)增大,這樣既能捕捉到局部細節又能把握全局上下文。
4. Shifted Window Attention?不同于全局自注意力,Swin Transformer在每個層次中,窗口內的像素會通過自注意力機制相互作用,而在相鄰層之間,窗口會進行一定的位移(Shift),使得窗口之間的信息得以流動,從而實現了在保持較高效率的同時,兼顧了局部和全局信息的融合。
5. 效率優化?通過局部窗口注意力和窗口間的信息傳遞機制,Swin Transformer大幅降低了計算復雜度,尤其適合處理高分辨率的圖像。這樣一來,即使是大規模圖像也能在合理的時間內完成高效處理。
總結來說,Swin Transformer就像一位細心的畫家,他不是一次性看完整幅畫作(全局注意力),而是分塊、分層地觀察并描繪畫面細節(局部窗口注意力),并且在繪畫過程中,他會不斷調整視角(窗口位移),確保不同區塊之間的協調性,從而繪制出既細致入微又整體連貫的藝術作品(高精度的圖像識別結果)。