DL 01・深度學習的影像處理與電腦視覺

深度學習中階37 分鐘2026年10月4日

先備知識: ML 02・類神經網路:從感知器到深度網路, 第 3 章・強度轉換與空間濾波

你將學到

  • 傳統影像工作的三個層次(影像處理、影像分析、電腦視覺),如何對應到深度學習實際使用的兩大類:低階(low-level)與高階(high-level)視覺任務。
  • 為什麼教科書上的圖形識別流程(感測器 → 特徵 → 分類器 → 驗證)會被端對端學習(end-to-end learning)取代,以及它又如何以「預訓練骨幹+輕量 head」的形式悄悄回歸。
  • 卷積層為什麼就是一組學習而來的空間濾波器,以及卷積核大小、步幅、填補與池化如何決定感受野(receptive field)與特徵階層。
  • 經典 CNN(LeNet-5、AlexNet、VGG、GoogLeNet、ResNet)背後的設計理由,以及用於密集預測的編碼器–解碼器(FCN、U-Net)。
  • Vision Transformer 怎麼運作、為什麼需要大規模預訓練,以及 Swin、ConvNeXt 與自監督骨幹網路(DINO、MAE、DINOv2/v3)各自如何回應它。
  • 現今任務與代表模型的全貌:分類、偵測、分割(SAM 系列)、復原與增強、生成(擴散模型、潛在擴散、DiT),以及視覺–語言模型(CLIP、LLaVA)。

先看全貌

這篇是深度學習系列的入口。它不會深入任何單一任務,而是先給你一張地圖:影像問題有哪些種類、哪些網路設計能解決它們、這些設計又為什麼長成現在這樣。後續的教學會再分別深入影像分類、物件偵測、影像復原、低光源增強與物件追蹤。

為什麼重要:幾乎所有現代相機的處理流程、醫學影像產品、駕駛輔助系統與修圖 App,都是由本篇介紹的元件組成。看懂這張地圖,你就能為新問題挑一個合理的起點、帶著批判的眼光讀論文,也能看出數位影像處理系列裡的哪些傳統想法仍活在網路裡面(其實很多)。

影像任務的三個層次

白話版。 廣義的「影像處理」包含三種工作。有些操作把一張影像變成一張更好的影像;有些操作從影像中取出某個部分或某種性質;有些則試著像人一樣理解影像。

精確版。 依照 Gonzalez 與 Woods [2] 的分法,可以用「輸入什麼、輸出什麼」把影像工作分成三個層次。

層次輸入 → 輸出典型操作傳統例子
影像處理(狹義;低階)影像 → 影像逐像素或鄰域的基本步驟直方圖等化、濾波、傅立葉轉換(DIP 03、DIP 04)
影像分析(中階)影像 → 屬性或被標示出的區域分割、特徵擷取、描述,運用先驗知識人臉影像中的膚色區域、X 光影像中的血管區域(DIP 10、DIP 12)
電腦視覺(高階;理解)影像 → 意義辨識、詮釋、判斷分類、「畫面中有沒有行人?」(DIP 13)

這三者的界線並不嚴格,實際系統往往三者都會用到。例如一個血管分割工具,會先去雜訊(低階)、再擷取血管圖(中階),最後可能標記出狹窄處(高階)。這三個層次描述的是計算的種類,而不是三個分開的部門。

深度學習如何重畫這張地圖

在深度學習的論文裡,你幾乎看不到「中階」這個詞。這個領域依照輸出的形式,只把任務分成兩大類 [1]:

  • 低階視覺:輸出是一張和輸入(大致)同樣大小的影像,目標是逐像素準確的訊號。例如去雜訊、去模糊、超解析度、除霧、低光源增強、影像到影像轉換。
  • 高階視覺:輸出是語意描述,可能是一個標籤、一組帶標籤的方框,或是每個像素一個標籤。

原本的「影像分析」被併入兩者之一。分割的輸出是逐像素的圖,看起來像影像到影像的任務;但它的數值是需要辨識才能得到的類別標籤,所以被歸為高階視覺。至於輸出一張更乾淨的亮度影像的邊緣或血管增強,則歸為低階視覺。

這樣分的理由很實際。兩類任務在損失函數(像素迴歸 vs. 分類)、架構(全解析度的編碼器–解碼器 vs. 逐步降採樣的骨幹網路)、訓練資料(劣化/乾淨影像對 vs. 人工標註)與評估指標(保真度 vs. 正確率)上都不同。圖 1 畫出了這個重新整理。

示意圖。左側三個方框由上而下為電腦視覺(影像到意義)、影像分析(影像到屬性)、影像處理(影像到影像)。右側兩個方框為高階視覺與低階視覺。箭頭顯示影像處理對應到低階、電腦視覺對應到高階,影像分析則分流到兩者。
圖 1 — 傳統的三個層次(左)與深度學習使用的兩大類(右)。中階的影像分析依輸出是「清理過的訊號」還是「語意圖」而被分到兩邊。

從圖形識別流程到端對端學習

白話版。 在深度學習之前,辨識系統像一條生產線:先有相機,再由人設計的步驟量出有用的性質,最後由分類器做決定。深度學習把中間的步驟融合成一個網路,讓它自己學會要量什麼。

精確版。 傳統流程 [3] 有四個階段:

  1. 感測器(sensor)。擷取圖形(相機、掃描器、顯微鏡)。
  2. 特徵生成與選擇(feature generation & selection)。以人工設計的映射 ϕ\phi(動差、紋理統計、邊緣直方圖、關鍵點描述子),從影像 II 計算出向量 x=ϕ(I)∈Rd\mathbf{x} = \phi(I) \in \mathbb{R}^d,再保留最有資訊量的分量。
  3. 分類器設計(classifier)。學習決策規則 y^=g(x;θ)\hat y = g(\mathbf{x}; \theta),θ\theta 為參數,例如貝氏分類器、最近鄰規則或支援向量機。
  4. 系統驗證(evaluation)。在保留的資料上量測錯誤率,太高就回到第 2 或第 3 步。

被學習的只有 θ\theta。特徵映射 ϕ\phi 由工程師固定,所以整個系統的上限就是 ϕ\phi 的品質。特徵擷取(DIP 12)那一章可以看到,這些映射背後花了多少巧思。

端對端學習讓特徵映射也變成可學習的。深度網路計算

y^=g(ϕ(I;w);θ),\hat y = g\big(\phi(I; \mathbf{w}); \theta\big),

其中 ϕ(⋅ ;w)\phi(\cdot\,; \mathbf{w}) 是權重為 w\mathbf{w} 的多層網路,g(⋅ ;θ)g(\cdot\,; \theta) 是一個小的 head,w\mathbf{w} 與 θ\theta 在標註資料 (I,y)(I, y) 上以梯度下降與反向傳播共同最小化損失 L(y^,y)\mathcal{L}(\hat y, y)。輸入就是原始像素;除了架構與損失函數之外,沒有任何東西是人工設計的。

兩條流程。上方:感測器、人工設計的特徵擷取、特徵選擇、分類器、驗證,只有分類器被標為可學習。下方:感測器之後是一個涵蓋特徵與分類器的深度網路方框,整體端對端可學習,接著是驗證;損失的箭頭把梯度送回整個網路。
圖 2 — 傳統圖形識別(上)與端對端學習(下)。深度網路裡「特徵」與「分類器」的功能區分仍然存在,但兩者之間沒有清楚的分界。

網路內部的功能區分其實還在:前面的層像特徵擷取器,最後幾層像分類器。但實務上,你通常無法指著某一層說「特徵到這裡結束」[1]。這帶來兩個結果:

  • 資料取代了設計。 端對端系統需要大量標註資料;人工設計的 ϕ\phi 原本承載的先驗知識,現在得由網路從資料中學到。
  • 分工以更大的規模回歸。 大約從 2021 年起,標準作法是用一個預訓練骨幹(在巨大的資料集上訓練一次,常常不需要標註)加上一個在你的小資料集上訓練的輕量任務 head。這又是「特徵擷取器+分類器」,只是特徵擷取器是學來的,而不是設計出來的。我們會在自監督骨幹那一節回到這一點。

卷積神經網路

白話版。 卷積層拿一個小視窗在影像上滑動,在每個位置計算加權和,跟 DIP 03 的空間濾波器一模一樣。差別在於:CNN 會學習濾波器的權重、一次使用很多個濾波器,並把數十層這樣的層與非線性函數交錯疊起來。

卷積層是一組學習而來的濾波器

精確版。 設輸入特徵圖為 X∈RCin×H×WX \in \mathbb{R}^{C_{\text{in}} \times H \times W}(通道、高、寬)。一個有 CoutC_{\text{out}} 個 k×kk \times k 濾波器的卷積層計算

Yo(x,y)=bo+∑c=1Cin∑i=−rr∑j=−rrWo,c(i,j) Xc(x+i, y+j),o=1,…,Cout,Y_{o}(x, y) = b_o + \sum_{c=1}^{C_{\text{in}}} \sum_{i=-r}^{r} \sum_{j=-r}^{r} W_{o,c}(i, j)\, X_c(x + i,\, y + j), \qquad o = 1, \dots, C_{\text{out}},

其中奇數 kk 時 r=(k−1)/2r = (k-1)/2,Wo,c(i,j)W_{o,c}(i,j) 是第 oo 個濾波器在輸入通道 cc、位移 (i,j)(i, j) 的權重,bob_o 是偏差。嚴格來說這是相關(correlation,不翻轉卷積核),如卷積教學所述;由於權重是學出來的,翻不翻轉沒有差別。之後接一個逐元素的非線性函數,例如 ReLU(z)=max⁡(0,z)\mathrm{ReLU}(z) = \max(0, z)。如果沒有它,一疊卷積層會塌縮成一個大的線性濾波器 [1]。

有兩個性質讓這種層特別適合影像:

  • 局部連接(local connectivity)。每個輸出只依賴一個 k×kk \times k 鄰域,因為相鄰像素彼此高度相關,距離遠的像素則關係弱得多。
  • 權重共享(weight sharing)。同一個濾波器用在每一個位置。這讓卷積層具有平移等變性(translation equivariance:輸入平移,輸出也跟著同樣平移),也大幅減少參數量。

省下的量非常可觀。從 224×224×3224 \times 224 \times 3 的影像連到 64 個神經元的全連接層需要 224⋅224⋅3⋅64+64≈960224 \cdot 224 \cdot 3 \cdot 64 + 64 \approx 960 萬個參數。從 3 個通道到 64 個通道的 3×33 \times 3 卷積只需要 3⋅3⋅3⋅64+64=1,7923 \cdot 3 \cdot 3 \cdot 64 + 64 = 1{,}792 個,而且輸出的是 64 張全解析度的特徵圖,而不是 64 個數字。

下面的程式把 PyTorch 卷積層的兩個濾波器手動設成 Sobel 卷積核,讓這一層變成邊緣偵測器。訓練則會改由梯度下降來決定這些數字。

import torch, torch.nn as nn, torch.nn.functional as F
from skimage import data, img_as_float

x = torch.tensor(img_as_float(data.camera()), dtype=torch.float32)[None, None]  # (1, 1, 512, 512)
conv = nn.Conv2d(1, 2, kernel_size=3, padding=1, bias=False)
sobel_x = torch.tensor([[-1., 0., 1.], [-2., 0., 2.], [-1., 0., 1.]])
with torch.no_grad():
    conv.weight[0, 0] = sobel_x        # 通道 0:對垂直邊緣有反應
    conv.weight[1, 0] = sobel_x.T      # 通道 1:對水平邊緣有反應
    y = F.relu(conv(x))                # (1, 2, 512, 512):兩張特徵圖
上排:攝影師影像,以及三個隨機初始化 3×3 濾波器的特徵圖,看起來像略為模糊或邊緣稍微增強的影像副本。下排:同一張影像與手動設定的濾波器(垂直 Sobel、水平 Sobel、Laplacian)的特徵圖,呈現乾淨的邊緣圖。
圖 3 — 攝影師影像經 3×3 卷積(並經過 ReLU)的特徵圖。上:隨機初始權重,得到平滑與邊緣混雜的結果。下:手動設定的 Sobel 與 Laplacian 權重。訓練會把隨機濾波器推向有用的濾波器。

訓練好的第一層濾波器長什麼樣子?我們可以用 scikit-learn 內建的 8×8 手寫數字 [36],在 CPU 上幾秒鐘就訓練完一個極小的 CNN。

import torch, torch.nn as nn
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split

torch.manual_seed(0)
X, y = load_digits(return_X_y=True)                    # 1,797 張 8x8 影像
X = torch.tensor(X / 16.0, dtype=torch.float32).reshape(-1, 1, 8, 8)
Xtr, Xte, ytr, yte = train_test_split(X, torch.tensor(y), test_size=0.25, random_state=0)

net = nn.Sequential(
    nn.Conv2d(1, 8, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),     # 8x8 -> 4x4
    nn.Conv2d(8, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),    # 4x4 -> 2x2
    nn.Flatten(), nn.Linear(16 * 2 * 2, 10),
)
opt = torch.optim.Adam(net.parameters(), lr=1e-2)
for epoch in range(30):
    for i in range(0, len(Xtr), 64):
        loss = nn.functional.cross_entropy(net(Xtr[i:i + 64]), ytr[i:i + 64])
        opt.zero_grad(); loss.backward(); opt.step()
print((net(Xte).argmax(1) == yte).float().mean())       # 約 0.97
filters = net[0].weight.detach()[:, 0]                   # (8, 3, 3) 學到的卷積核
兩排各八個 3×3 灰階小卷積核。上排為訓練前:隨機圖樣。下排為訓練後:其中幾個呈現有方向性的明暗轉換,類似微分濾波器。
圖 4 — 小型數字 CNN 的八個第一層 3×3 濾波器,訓練前(上)與訓練後(下)。其中幾個朝有方向性的明暗轉換移動,也就是人工設計者會挑選的類微分圖樣;沒有人告訴網路要這麼做。(8×8 的小輸入與 3×3 卷積核讓效果較不明顯;在自然影像上訓練的大型網路會更清楚地呈現這個現象。)

步幅、填補與輸出大小

白話版。 填補(padding)在影像外圍加一圈邊框,讓視窗可以停在邊緣像素上。步幅(stride)讓視窗一次跳不只一個像素,因此輸出會變小。

精確版。 對寬度為 WW 的輸入、卷積核大小 kk、每邊填補 pp 個像素、步幅 ss,輸出寬度為

Wout=⌊W+2p−ks⌋+1.W_{\text{out}} = \left\lfloor \frac{W + 2p - k}{s} \right\rfloor + 1 .

k=3k = 3、p=1p = 1、s=1s = 1 時大小不變(“same” 填補);s=2s = 2 時減半。預設是補零;但在低階網路中,常偏好鏡射或複製邊界的填補(與 DIP 03 討論的邊界處理相同),因為補零會在影像邊緣產生暗色瑕疵。

池化

池化(pooling)用一個數字概括每個小視窗,通常取最大值(max pooling)或平均值(average pooling),一般使用 2×22 \times 2 視窗、步幅 2。它把解析度減半、讓表示對小幅平移較不敏感,並以很低的成本擴大感受野。許多現代網路改用步幅卷積取代池化,讓網路自己學會怎麼降採樣。在分類網路的最後,全域平均池化(global average pooling)把 C×H×WC \times H \times W 的特徵圖變成給分類 head 用的 CC 維向量。

感受野

白話版。 一個神經元的感受野,是輸入影像中能影響它的那一塊區域。一層 3×33 \times 3 看得到 3×33 \times 3 個像素;疊兩層,每個輸出看得到 5×55 \times 5。降採樣會讓它長得快得多。

精確版。 將各層編號為 ℓ=1,…,L\ell = 1, \dots, L,卷積核大小 kℓk_\ell、步幅 sℓs_\ell。令 jℓj_\ell 為跳距(jump),也就是第 ℓ\ell 層兩個相鄰單元在輸入影像上相距多少像素;rℓr_\ell 為感受野大小;輸入層 r0=1r_0 = 1、j0=1j_0 = 1。則

rℓ=rℓ−1+(kℓ−1) jℓ−1,jℓ=jℓ−1 sℓ.r_\ell = r_{\ell-1} + (k_\ell - 1)\, j_{\ell-1}, \qquad j_\ell = j_{\ell-1}\, s_\ell .

每一層增加 kℓ−1k_\ell - 1 個輸入單元,而每個輸入單元相當於 jℓ−1j_{\ell-1} 個像素。若處處步幅為 1,LL 層 3×33 \times 3 得到 rL=2L+1r_L = 2L + 1:線性成長。每一次步幅 2 都讓跳距加倍,後面的層讓感受野長得兩倍快,因此隨深度大致呈指數成長。

def receptive_field(layers):
    r, j = 1, 1                       # 感受野與跳距,以輸入像素為單位
    for k, s in layers:               # 每一層的(卷積核大小, 步幅)
        r, j = r + (k - 1) * j, j * s
    return r

print(receptive_field([(3, 1)] * 3))                                             # 7
print(receptive_field([(3, 1), (3, 1), (2, 2), (3, 1), (3, 1), (2, 2), (3, 1)])) # 24
左:三層 3 抽頭的一維示意圖,連線顯示最上層的一個單元依賴 7 個輸入像素。右:感受野大小對 3×3 層數的折線圖,比較處處步幅 1(緩慢成長)與每兩層做一次 2 倍降採樣(陡峭得多)。
圖 5 — 左:疊三層 3 抽頭的層,讓一個輸出擁有 7 個像素的感受野。右:理論感受野對深度的關係,比較處處步幅 1 與每兩層之後做一次 2 倍降採樣。

實務上還有兩點要注意。第一,上面的公式給的是理論感受野。Luo 等人 [12] 發現,以「每個輸入像素對輸出梯度實際影響多少」來量測的有效感受野(effective receptive field)大致呈高斯分佈,只佔理論感受野的一小部分,中心附近的像素佔主導地位。第二,感受野決定網路能用到什麼:感受野比雜訊相關長度還小的去雜訊器,無法去除那種雜訊;最後一層只看得到物體一部分的分類器,也無法從上下文辨識它。

特徵階層

由於感受野隨深度變大、解析度變小,CNN 會建立一個特徵階層:前面的層對邊緣與色塊有反應(圖 4),中間的層對紋理與部件有反應,後面的層則對大範圍的物體層級圖樣有反應。典型的骨幹網路分成好幾個階段(stage),每個階段結束時做 2 倍降採樣並把通道數加倍,所以特徵從「高解析度、通道少、局部」一路變成「低解析度、通道多、語意」。高階任務讀取後面的階段;密集預測與低階任務還需要前面高解析度的階段,這正是編碼器–解碼器存在的原因(見下文)。

經典 CNN 架構

白話版。 2012 到 2016 年間,一系列一個比一個深的網路贏得了 ImageNet 大規模視覺辨識挑戰賽(ILSVRC)[6]。每一個都帶來一個至今仍在使用的設計想法。

2012 到 2025 年的水平時間軸,分三條軌道:CNN 骨幹(2012 AlexNet、2014 VGG 與 GoogLeNet、2015 ResNet、2022 ConvNeXt、2023 ConvNeXt V2)、Transformer 與自監督(2020 ViT、2021 Swin、DINO、MAE、2023 DINOv2、2024 Vision Mamba、2025 DINOv3)、任務與基礎模型(2014 FCN、2015 U-Net 與 Faster R-CNN、2020 DETR 與 DDPM、2021 CLIP 與潛在擴散、2022 DiT 與 InstructPix2Pix、2023 SAM 與 LLaVA、2024 SAM 2、2025 SAM 3)。
圖 6 — 本篇提到的架構時間軸(依 arXiv 年份)。LeNet-5(1998)與 1980 年代末更早的卷積網路位於這條軸的左側之外。

LeNet-5,以及 CNN 真正的起點

原文的標題寫著「CNN(1998~)」。1998 年是 LeCun、Bottou、Bengio 與 Haffner 發表 LeNet-5 [5] 的年份,並不是 CNN 的起點:以反向傳播訓練的卷積網路,早在 1989 年就已經用來辨識手寫郵遞區號 [4]。

LeNet-5 是一個以網路形式呈現的標準圖形識別系統 [1]。C1 到 C5 是特徵擷取器:卷積層(C1、C3、C5)與子取樣層(S2、S4)交錯,把 32×32 的數字影像變成 120 維的特徵向量;F6 與輸出層則是分類器。包含特徵在內的所有東西,都以分類損失透過梯度下降訓練。端對端的想法其實早已到位,只是還需要再等十五年的資料量與運算力,才成為主流。

AlexNet(2012)

AlexNet [7] 有五個卷積層與三個全連接層(共八個可學習的層,約 6,000 萬個參數)。它的元件個別來看並不新,新的是組合:訓練速度遠快於飽和型 sigmoid 的 ReLU 激活函數、高效率的 GPU 實作、大量的資料擴增,以及全連接層中的 dropout。它以很大的差距贏得 ILSVRC 2012,這也是為什麼 2012 年通常被視為視覺深度學習時代的起點。

VGG(2014)

Simonyan 與 Zisserman [8] 只問了一個問題:如果只用 3×33 \times 3 卷積,並把網路加深,會怎樣?他們最好的配置有 16 與 19 個權重層。3×33 \times 3 之所以足夠,答案就在上面的感受野公式:兩層 3×33 \times 3 看得到 5×55 \times 5,三層看得到 7×77 \times 7。輸入、輸出都是 CC 個通道時,三層 3×33 \times 3 需要 3⋅9C2=27C23 \cdot 9 C^2 = 27C^2 個權重,而一層 7×77 \times 7 需要 49C249C^2 個,而且前者還多插入了兩個非線性函數。VGG 整齊一致的設計,讓它多年來都是預設的預訓練特徵擷取器。

GoogLeNet / Inception(2014)

22 層深的 GoogLeNet [9] 贏得 ILSVRC 2014。它的 Inception 模組平行執行 1×11 \times 1、3×33 \times 3、5×55 \times 5 卷積與一個池化分支,再把輸出串接起來,讓每個模組同時看到好幾種尺度。為了負擔得起,便宜的 1×11 \times 1 卷積會先減少通道數。1×11 \times 1 卷積在每個像素上混合通道而不看鄰居,相當於逐像素的全連接層,至今仍是到處可見的基本元件。

ResNet(2015),以及殘差連接為什麼有效

照理說越深越好,但實際上並非如此:He 等人 [10] 觀察到,一個普通的 56 層網路,訓練誤差反而比 20 層的高。這不是過擬合(overfitting),而是最佳化失敗:較深的網路理論上可以複製淺網路、再把多出來的層設成恆等映射,但梯度下降找不到那個解。

解法是殘差區塊(residual block,圖 7)。與其讓一疊層直接學習映射 H(x)H(\mathbf{x}),不如讓它學殘差 F(x)=H(x)−xF(\mathbf{x}) = H(\mathbf{x}) - \mathbf{x},再把輸入加回來:

y=σ(x+F(x;W)),\mathbf{y} = \sigma\big(\mathbf{x} + F(\mathbf{x}; W)\big),

其中 x\mathbf{x} 是區塊輸入,FF 通常是 conv–BN–ReLU–conv–BN(BN 為批次正規化,batch normalization),權重為 WW,σ\sigma 為 ReLU。當通道數或解析度改變時,捷徑改用 1×11 \times 1 卷積取代恆等映射。

為什麼有效:

  • 恆等映射變得容易。 如果多出來的深度沒有用處,區塊只需要把 FF 推向零,這比讓一疊非線性層模仿恆等映射容易得多。把 FF 最後一個 BN 的縮放參數初始化為零,每個區塊一開始就是恆等映射。
  • 梯度有一條高速公路。 忽略最後的非線性,∂y/∂x=I+∂F/∂x\partial \mathbf{y}/\partial \mathbf{x} = I + \partial F/\partial \mathbf{x}。恆等項把梯度從損失直接帶到前面的層,不必穿過每一個權重矩陣,所以不會隨深度消失。
  • 集成的觀點。 把 LL 個區塊展開,會得到許多長短不一的路徑之和,因此一個很深的 ResNet 在某種程度上就像許多較淺網路的集合。
class ResidualBlock(nn.Module):
    """基本區塊:y = ReLU(x + F(x)),F = conv-BN-ReLU-conv-BN。"""
    def __init__(self, c):
        super().__init__()
        self.f = nn.Sequential(
            nn.Conv2d(c, c, 3, padding=1, bias=False), nn.BatchNorm2d(c), nn.ReLU(),
            nn.Conv2d(c, c, 3, padding=1, bias=False), nn.BatchNorm2d(c),
        )
    def forward(self, x):
        return torch.relu(x + self.f(x))

blk = ResidualBlock(16)
nn.init.zeros_(blk.f[4].weight)                  # 把最後一個 BN 的縮放設為零,使 F(x) = 0
x = torch.randn(2, 16, 32, 32)
print(torch.allclose(blk(x), torch.relu(x)))     # True:區塊一開始就是恆等映射(再接 ReLU)
殘差區塊示意圖:輸入 x 分成兩條路徑。右邊路徑經過 3×3 卷積、批次正規化、ReLU、3×3 卷積、批次正規化,標為 F(x);左邊路徑是恆等捷徑。兩者在加號處相加,再經過 ReLU,輸出 x 加 F(x)。第二個面板是使用 1×1、3×3、1×1 卷積的瓶頸區塊。
圖 7 — 左:基本殘差區塊。右:ResNet-50/101/152 使用的瓶頸區塊,以 1×1 卷積在便宜的 3×3 卷積前後縮減並恢復通道數。

論文在 ImageNet 上訓練了 18、34、50、101 與 152 層的 ResNet,其中較深的三種使用瓶頸區塊。有名的 1202 層網路只出現在論文的 CIFAR-10 實驗中 [10]、[11](32×32 的小影像);它可以順利訓練,但過擬合,測試結果反而比 110 層的版本差。ResNet 家族贏得 ILSVRC 2015,而殘差連接如今幾乎存在於所有深度網路中,Transformer 也不例外。

用於密集預測的編碼器–解碼器

白話版。 分類骨幹為了換取語意而丟掉解析度。分割或復原需要在每個像素上都給出答案,所以要再加上後半段,把解析度找回來。

精確版。 Long 等人提出的全卷積網路(fully convolutional network, FCN)[13] 把分類器中的全連接層換成卷積,讓網路對任意大小的輸入輸出一張粗略的類別分數圖,再以學習而來的轉置卷積上採樣,並與前面較精細層的分數融合。U-Net [14] 把這個想法做成對稱的形式:收縮的編碼器(卷積區塊與降採樣)與擴張的解碼器(上採樣與卷積區塊),中間以跳接(skip connection)把每個編碼器階段的特徵圖串接到同一解析度的解碼器階段。編碼器提供「是什麼」,跳接提供「在哪裡」。U-Net 原本是為標註很少、需要大量資料擴增的生醫影像設計的;同樣的形狀如今撐起了醫學影像分割、DL 04 介紹的幾乎所有復原網路,以及許多擴散模型內部的去雜訊器。

Vision Transformer

白話版。 Transformer [15] 原本是為句子設計的:它把輸入當成一串 token,讓每個 token 都能看到其他所有 token。Vision Transformer(ViT)[16] 把影像切成小方塊(patch),把每個 patch 當成一個「字」,再把這串序列送進一個沒有修改過的 Transformer 編碼器。

切塊、嵌入、注意力

精確版。 對影像 I∈RC×H×WI \in \mathbb{R}^{C \times H \times W} 與 patch 大小 PP:

  1. 切塊。 把 II 切成 N=HW/P2N = HW/P^2 個不重疊的 patch,並把每一塊攤平成向量 pi∈RCP2\mathbf{p}_i \in \mathbb{R}^{CP^2}。對 224×224224 \times 224 的 RGB 影像與 P=16P = 16,N=196N = 196,每個向量有 768768 個元素。
  2. 嵌入。 把每個 patch 線性映射成 DD 維 token,zi=E pi\mathbf{z}_i = E\,\mathbf{p}_i,E∈RD×CP2E \in \mathbb{R}^{D \times CP^2}。在最前面加上一個可學習的類別 token zcls\mathbf{z}_{\text{cls}},並加上可學習的位置嵌入(position embedding)ei\mathbf{e}_i,因為注意力本身不知道 token 來自哪裡:Z(0)=[zcls;z1;… ;zN]+[e0;… ;eN]Z^{(0)} = [\mathbf{z}_{\text{cls}}; \mathbf{z}_1; \dots; \mathbf{z}_N] + [\mathbf{e}_0; \dots; \mathbf{e}_N]。
  3. 編碼。 套用 LL 個 Transformer 編碼器區塊,每個區塊包含多頭自注意力(MSA)子層與 MLP 子層,兩者都搭配層正規化(LN)與殘差連接:
Z′=Z(ℓ−1)+MSA(LN(Z(ℓ−1))),Z(ℓ)=Z′+MLP(LN(Z′)).\begin{aligned} Z' &= Z^{(\ell-1)} + \mathrm{MSA}\big(\mathrm{LN}(Z^{(\ell-1)})\big),\\ Z^{(\ell)} &= Z' + \mathrm{MLP}\big(\mathrm{LN}(Z')\big). \end{aligned}
  1. Head。 把最後的類別 token(或所有 token 的平均)送進 MLP head,它扮演的就是圖形識別中分類器的角色 [1]。

對 token 矩陣 Z∈R(N+1)×DZ \in \mathbb{R}^{(N+1) \times D},單一注意力頭計算

Attn(Z)=softmax ⁣(QK⊤d)V,Q=ZWQ,  K=ZWK,  V=ZWV,\mathrm{Attn}(Z) = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d}}\right) V, \qquad Q = ZW_Q,\; K = ZW_K,\; V = ZW_V,

其中 WQ,WK,WV∈RD×dW_Q, W_K, W_V \in \mathbb{R}^{D \times d} 是學習而來的投影,dd 是每個頭的維度。softmax 矩陣的第 ii 列表示 token ii 從其他每個 token 汲取多少資訊。和卷積相比,這裡的「濾波器」是依內容計算出來的,而且從第一層起就涵蓋整張影像。代價是計算量隨 token 數呈平方成長,O(N2d)O(N^2 d),這也是為什麼使用 patch 而不是像素。

img = torch.randn(1, 3, 224, 224)
P, D = 16, 768
patches = img.unfold(2, P, P).unfold(3, P, P)                    # (1, 3, 14, 14, 16, 16)
patches = patches.permute(0, 2, 3, 1, 4, 5).reshape(1, -1, 3 * P * P)
print(patches.shape)                                              # (1, 196, 768)
embed = nn.Conv2d(3, D, kernel_size=P, stride=P)                  # 切塊+線性嵌入,一步完成
tokens = embed(img).flatten(2).transpose(1, 2)                    # (1, 196, 768)

最後兩行說明了一個實用的等式:patch 嵌入就是一個卷積核大小與步幅都等於 PP 的卷積。

太空人影像以白線切成 4×4 個 patch;箭頭表示這些 patch 被攤平成一排 token 方框,各自加上位置編號,最前面還有一個類別 token,接著進入標示為 L 個區塊的 Transformer 編碼器,最後由 MLP head 輸出類別。
圖 8 — 一張圖看懂 ViT:切塊、線性嵌入、加上位置嵌入與類別 token、經過 Transformer 編碼器,再由類別 token 做分類。(為了清楚起見只畫 4×4;ViT-B/16 在 224×224 輸入上使用 14×14 個 patch。)

歸納偏置與規模的需求

原文提到 ViT「更難收斂」。更精確的說法 [1]、[16] 與歸納偏置(inductive bias)有關,也就是架構在看到資料之前就內建的假設。CNN 假設局部性與權重共享,所以它已經「知道」相鄰像素要一起看,也知道同一個圖樣出現在影像中任何位置都代表同一件事。ViT 幾乎沒有任何假設:除了切 patch 之外,所有空間結構,甚至位置嵌入的二維排列,都必須自己學。

這是一種取捨,而不是缺陷。資料少的時候,CNN 的假設是寶貴的先發優勢,只在 ImageNet-1k 上從頭訓練的 ViT 表現不如同等的 ResNet。資料夠多時,這些假設反而成為限制;在非常大的資料集上預訓練的 ViT,微調後可以追平甚至超越最好的 CNN [16]。實務上的結論是:ViT 都是預訓練後才使用,預訓練資料可能是巨大的標註資料集,也越來越常是自監督學習。

ViT 之後的骨幹網路

白話版。 ViT 之後,研究朝三個方向走:讓 Transformer 更適合影像(Swin)、證明現代化之後的 CNN 也能追上(ConvNeXt),以及在沒有標註的情況下預訓練,讓一個骨幹就能服務所有任務(DINO、MAE、DINOv2/v3)。

Swin Transformer:局部性回歸

Swin [17] 只在不重疊的局部視窗(例如 7×77 \times 7 個 token)內計算注意力,讓計算量對影像大小呈線性。在交替的區塊中,視窗格線會位移半個視窗,讓資訊跨越視窗邊界。在階段之間,相鄰的 token 會被合併,使解析度減半。結果是一個階層式、多尺度的特徵金字塔,形狀就像 CNN 骨幹,正好是偵測與分割 head 所需要的。Swin 把 CNN 的歸納偏置,也就是局部性與階層性,放回了 Transformer 裡。

ConvNeXt:CNN 的反擊

Liu 等人 [18] 從 ResNet-50 出發,一步一步採用 Transformer 的訓練方法與設計選擇來將它現代化:「切塊式」的 stem(步幅 4 的 4×44 \times 4 卷積)、大的 7×77 \times 7 逐通道卷積(depthwise convolution)、倒置瓶頸的 MLP、較少的激活與正規化層,以及層正規化。得到的純 CNN,ConvNeXt,在分類、偵測與分割上的準確度與擴展性都與 Swin 打平。結論是:ViT 的優勢有很大一部分來自訓練方法與宏觀設計,而不是注意力本身。ConvNeXt V2 [18] 接著加入了為卷積改寫的遮罩自編碼器預訓練(全卷積遮罩自編碼器,FCMAE)以及全域響應正規化(global response normalization)層。如今大型基礎模型多以 ViT 為骨幹,但在低階任務與邊緣裝置上,卷積仍然很常見 [1]。

自監督預訓練:DINO 與 MAE

自監督學習(self-supervised learning)從影像本身產生訓練訊號,因此不需要標註。主流的作法有兩種,而且常常被混為一談。

DINO:自蒸餾(self-distillation)[19]。學生網路 gsg_s 與教師網路 gtg_t 架構相同,各自輸出一個 KK 維的機率向量。對一張影像做好幾個隨機裁切:兩個大的「全域」視圖與數個小的「局部」視圖。教師只看全域視圖,學生看所有視圖,並被訓練去符合教師的輸出:

min⁡θs∑x∈{x1g,x2g}  ∑x′∈Vx′≠xH(Pt(x), Ps(x′)),H(a,b)=−a⊤log⁡b,\min_{\theta_s} \sum_{x \in \{x^g_1, x^g_2\}} \;\sum_{\substack{x' \in V \\ x' \neq x}} H\big(P_t(x),\, P_s(x')\big), \qquad H(a, b) = -a^\top \log b,

其中 VV 是所有視圖的集合,PtP_t、PsP_s 是教師與學生的 softmax 輸出,θs\theta_s 是學生的權重。教師不經由梯度訓練,它的權重是學生權重的指數移動平均,θt←λθt+(1−λ)θs\theta_t \leftarrow \lambda \theta_t + (1 - \lambda)\theta_s,λ\lambda 接近 1;教師的輸出還會經過置中(centering)與銳化(sharpening),避免訓練塌縮成常數輸出。讓「小裁切」去符合「整張圖」,會迫使網路從局部辨識出物體。一個令人驚訝的湧現性質是:DINO ViT 的注意力圖在從未看過任何遮罩的情況下,就能分割出主要物體。

MAE:遮罩預測(masked prediction)[20]。遮罩自編碼器(masked autoencoder)隨機遮住大部分的 patch(75 % 效果最好),只用 ViT 編碼看得見的 patch,再讓一個輕量解碼器重建被遮住的像素:

LMAE=1∣M∣∑i∈M∥p^i−pi∥22,\mathcal{L}_{\text{MAE}} = \frac{1}{|\mathcal{M}|} \sum_{i \in \mathcal{M}} \big\lVert \hat{\mathbf{p}}_i - \mathbf{p}_i \big\rVert_2^2,

其中 M\mathcal{M} 是被遮住的 patch 索引集合,pi\mathbf{p}_i 是 patch ii(正規化後)的像素,p^i\hat{\mathbf{p}}_i 是重建結果。這種「遮住再預測」的遊戲,相當於語言模型中遮字預測的影像版本;相對地,DINO 是教師–學生蒸餾法 [1]。MAE 的編碼器只處理四分之一的 token,所以很省計算,微調效果也非常好;DINO 類的特徵則更適合凍結使用,直接接一個線性 head。

DINOv2 與 DINOv3:凍結即用的通用特徵

DINOv2 [21] 把 DINO 式的自蒸餾擴展到 10 億參數的 ViT,在一個自動篩選(curated)過的大型影像集合上訓練,再蒸餾成較小的模型。它凍結後的特徵,只需要一個輕量 head,就能同時勝任影像層級任務(分類、檢索)與像素層級任務(分割、深度估計)。DINOv3 [21] 進一步擴大資料與模型規模,並提出 Gram anchoring,這是一種正則化方法,能防止密集的 patch 特徵在非常長的訓練過程中退化,讓同一個凍結骨幹提供高品質的密集特徵。

這讓我們回到了圖形識別流程。「特徵擷取器+分類器」以預訓練凍結骨幹+輕量 head 的形式回來了,只是特徵擷取器現在是在極大規模、沒有標註的情況下學一次就好。

狀態空間骨幹

**Vision Mamba(Vim)**與 VMamba [22] 以選擇性狀態空間模型(selective state-space model)取代注意力,用與序列長度呈線性的成本掃描 token 序列。影像不是序列,所以這些模型會沿不只一條路徑掃描 patch 網格(Vim 是雙向的;VMamba 的二維選擇性掃描會走好幾條路線)。它們對高解析度輸入很有吸引力,但目前仍偏向研究路線,還不是預設的骨幹。

高階視覺任務

白話版。 高階任務的差別在於答案要多精確地指出位置:整張圖一個標籤、每個物體一個方框,或是每個像素一個標籤。

任務輸出典型損失典型指標代表模型
分類一個標籤(或機率向量)交叉熵top-1 / top-5 正確率ResNet、ViT、ConvNeXt [10]、[16]、[18]
物件偵測一組(方框、類別、分數)分類+方框迴歸,或集合匹配多個 IoU 門檻下的平均精確度(AP)Faster R-CNN、DETR [23]
語意分割每個像素一個類別逐像素交叉熵、Dice(重疊損失,見下文)mean IoUFCN、U-Net [13]、[14]
實例分割每個物體一個遮罩與類別偵測+遮罩損失mask AP可提示式:SAM 系列 [24]

分類

為整張影像指定一個標籤。網路是骨幹+全域池化+線性層,以交叉熵 L=−log⁡p^y\mathcal{L} = -\log \hat p_{y} 訓練,其中 p^y\hat p_y 是真實類別 yy 的預測機率。在自監督學習出現之前,分類也是產生大多數骨幹網路的預訓練任務。DL 02 會深入介紹。

物件偵測

找出每個物體、它的類別,以及它的位置;位置以軸對齊的方框表示(感興趣區域,ROI,由角點座標或中心與長寬決定)[1]。有兩條設計路線可以說明這個領域 [23]。Faster R-CNN 是兩階段式:區域提議網路(region proposal network)從共享的 CNN 特徵中提出候選方框,第二個 head 再對每個候選分類並微調;重複的框由非極大值抑制(non-maximum suppression)移除。DETR 把偵測視為集合預測:Transformer 解碼器輸出固定數量的預測,再以預測與真實物體之間的二分匹配定義損失,省去了人工設計的錨框與非極大值抑制。方框品質以交併比(intersection over union)衡量:

IoU(A,B)=∣A∩B∣∣A∪B∣,\mathrm{IoU}(A, B) = \frac{|A \cap B|}{|A \cup B|},

其中 AA、BB 分別是預測與真實區域。與它密切相關的 Dice 係數 2∣A∩B∣/(∣A∣+∣B∣)2|A \cap B| / (|A| + |B|),以可微分的軟性形式作為分割損失。平均精確度則在一個或多個 IoU 門檻下概括精確率–召回率曲線。細節請見 DL 03。

語意分割與實例分割

這裡的感興趣區域是物體確切的像素集合,而不是方框 [1]。

  • 語意分割(semantic segmentation)為每個像素標上類別。兩個重疊的人會變成同一塊「人」的區域。
  • 實例分割(instance segmentation)還要把同一類別的不同物體分開。兩個人會變成「人 1」與「人 2」。

語意分割是上面編碼器–解碼器 [13]、[14] 的本行。實例分割則再加上一個類似偵測的元件,為每個物體提出一個遮罩。

可提示的分割:SAM、SAM 2、SAM 3

分割領域如今有了可提示的基礎模型 [24]。SAM(Segment Anything)接收一張影像與一個提示(點、方框或粗略遮罩),回傳被指定物體的遮罩。笨重的 ViT 影像編碼器每張影像只跑一次,輕量的提示編碼器與遮罩解碼器則每個提示跑一次,所以互動很快。它在 SA-1B 上訓練;SA-1B 包含 1,100 萬張影像上超過 10 億個遮罩,是以「模型在迴圈中」的資料引擎建立的。SAM 2 把這個能力擴展到影片,以串流記憶(streaming memory)把物體一幀一幀帶下去,並在新的影片資料集(SA-V)上訓練。SAM 3 加入了可提示的概念分割(promptable concept segmentation):給它一個短名詞片語,例如「黃色校車」,或是影像範例,或兩者並用,它會找出、分割並(在影片中)追蹤所有符合的實例,而不只是點擊指向的那一個物體。到了 SAM 3,偵測、實例分割與追蹤之間的界線已經變得很薄;追蹤請見 DL 06。

低階視覺任務

白話版。 低階任務輸入一張影像,回傳同一個場景經過改善或轉換的影像。輸出以逐像素的方式評判,或以看起來有多自然來評判。

一般的形式是一個反問題。劣化的觀測 y\mathbf{y} 被建模為

y=D(x)+n,\mathbf{y} = \mathcal{D}(\mathbf{x}) + \mathbf{n},

其中 x\mathbf{x} 是乾淨影像,D\mathcal{D} 是劣化運算子(模糊、降採樣、霧、曝光不足),n\mathbf{n} 是雜訊,與 DIP 05 的模型相同。網路 fθf_\theta 在成對資料上訓練,最小化例如 ∥fθ(y)−x∥1\lVert f_\theta(\mathbf{y}) - \mathbf{x} \rVert_1。由於真實的成對資料很少,通常會對乾淨影像套用一個建模好的劣化來合成成對資料,而合成劣化與真實劣化之間的落差,正是這個領域的核心難題。

  • 影像復原(image restoration)找回乾淨影像,又可稱為「清晰化」:去雜訊、去模糊、超解析度(小圖變大圖)、除霧(霧濛濛的影像變清楚)、去雨。架構是全解析度的編碼器–解碼器(類 U-Net),或不降採樣的殘差網路,現在也常加入視窗注意力。請見 DL 04。
  • 影像增強(image enhancement)讓內容更容易看清楚,但沒有唯一的「正確答案」:低光源增強(讓暗影像中的細節變清楚,某種程度上是聰明的調亮;如果是把黑夜變白天,就屬於轉譯了)與水下影像增強。請見 DL 05。
  • 影像對齊(image alignment,或稱影像配準)估計把一張影像對應到另一張影像的幾何轉換或稠密位移場,是連拍融合、HDR 與醫學影像比對的前置步驟。
  • 影像到影像轉換(image-to-image translation)把影像從一個領域或風格轉到另一個:白天變黑夜、夏天變冬天、草圖變照片。換臉的「深偽」(deepfake)就是同一個想法的(被濫用的)延伸應用。自從擴散模型出現後,轉換與編輯常改由一個以輸入影像為條件的生成模型完成,見下一節。

生成與視覺–語言模型

白話版。 有兩類較新的模型不太能放進舊地圖:一類從文字創造影像,另一類能談論影像。兩者都依賴大規模預訓練,以及把影像和語言連結起來。

擴散模型:從雜訊到影像

去雜訊擴散機率模型(denoising diffusion probabilistic model, DDPM)[27] 定義了一個前向過程,在 TT 步內逐漸對影像 x0\mathbf{x}_0 加入高斯雜訊。寫成封閉形式為

xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I),\mathbf{x}_t = \sqrt{\bar\alpha_t}\, \mathbf{x}_0 + \sqrt{1 - \bar\alpha_t}\, \boldsymbol{\epsilon}, \qquad \boldsymbol{\epsilon} \sim \mathcal{N}(\mathbf{0}, I),

其中 t∈{1,…,T}t \in \{1, \dots, T\} 是步數,αˉt∈(0,1)\bar\alpha_t \in (0, 1) 是固定的排程,從接近 1 遞減到接近 0。網路 ϵθ\boldsymbol{\epsilon}_\theta 被訓練來預測加入的雜訊:

L=Ex0,t,ϵ∥ϵ−ϵθ(xt,t)∥22,\mathcal{L} = \mathbb{E}_{\mathbf{x}_0, t, \boldsymbol{\epsilon}} \big\lVert \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \big\rVert_2^2,

生成時則反向執行這個過程:從純雜訊開始,一步一步去雜訊。換句話說,生成器就是反覆套用許多次的學習式去雜訊器,這讓生成直接和上面的復原問題連在一起。

  • 潛在擴散(latent diffusion)[28] 不在像素上、而是在預訓練自編碼器的壓縮潛在空間中進行擴散,大幅降低成本,使高解析度的文字生成影像變得可行;文字條件透過交叉注意力(cross-attention)加入。它是 Stable Diffusion 的基礎。
  • DiT(Diffusion Transformer)[28] 把 U-Net 去雜訊器換成作用在潛在 patch 上的 Transformer,並顯示品質會隨模型計算量穩定提升。
  • InstructPix2Pix [29] 依照文字指令(「把它變成冬天」)編輯給定的影像,讓傳統的影像到影像轉換成為條件生成的一個特例。

視覺–語言模型

視覺問答(visual question answering, VQA),也就是針對一張影像回答自由形式的問題,以前需要串起影像特徵、影像描述(captioning)與文字問答的流程 [1]。兩個進展讓它變成單一模型。

CLIP [25] 以對比式(contrastive)目標,在 4 億組影像–文字對上訓練影像編碼器 ff 與文字編碼器 gg。在一個包含 BB 組配對的批次中,令正規化後的嵌入為 ui=f(Ii)\mathbf{u}_i = f(I_i)、vj=g(Tj)\mathbf{v}_j = g(T_j),溫度為 τ\tau,影像到文字的損失為

LI→T=−1B∑i=1Blog⁡exp⁡(ui⊤vi/τ)∑j=1Bexp⁡(ui⊤vj/τ),\mathcal{L}_{I \to T} = -\frac{1}{B} \sum_{i=1}^{B} \log \frac{\exp(\mathbf{u}_i^\top \mathbf{v}_i / \tau)}{\sum_{j=1}^{B} \exp(\mathbf{u}_i^\top \mathbf{v}_j / \tau)},

總損失則與對稱的文字到影像項平均。配對的組合被拉近,批次中其他所有組合被推開。由於標籤空間變成了「任何一句話」,CLIP 可以做零樣本(zero-shot)分類:把「a photo of a cat」、「a photo of a dog」……等提示嵌入,再挑出與影像最接近的那一個。

LLaVA [26] 透過一個投影層,把 CLIP 視覺編碼器接上大型語言模型(LLM);投影層把視覺 token 映射到 LLM 的詞嵌入空間,再以關於影像的指令跟隨對話進行微調。目前大多數多模態 LLM 都沿用這種視覺編碼器+投影層+LLM 的架構,所以 VQA、影像描述與許多辨識任務,現在都可以透過對同一個模型下提示來完成。

現代觀點

貫穿本篇的趨勢,是從「一個任務一個模型」走向「一個基礎模型+提示或輕量 head」。以下的綜述論文,是理解這個領域如何走到今天的好地圖。

CNN 架構。 Li 等人 [30] 回顧了 CNN 的歷史、卷積運算本身、經典與進階架構(LeNet 到 ResNet 一脈,以及輕量化與加入注意力的網路)、一維/二維/多維卷積與各種應用。他們也整理了每個元件的改進(層設計、激活與損失函數、正則化、最佳化、快速計算),透過實驗歸納出挑選函數與超參數的經驗法則,最後討論開放問題與有潛力的方向。若想一次看到 CNN 的設計空間被逐個元件攤開,這是最好的單一參考。

Vision Transformer。 Khan 等人 [31](ACM Computing Surveys)依任務整理 Transformer 的研究:先是基礎(自注意力、大規模預訓練、雙向編碼),接著是辨識(分類、偵測、分割、動作辨識)、生成模型、多模態任務(VQA、視覺推理、視覺定位)、影片、低階視覺(超解析度、增強、上色)與三維點雲。他們的核心對比與本篇一致:Transformer 以極少的歸納偏置建模長距離依賴,因此需要大規模預訓練或架構上的先驗(視窗、階層)才能有好的資料效率。

自監督視覺學習。 Jing 與 Tian [32](TPAMI)綜述了 2020 年以前那一代的自監督方法,依前置任務(pretext task)分為生成式、上下文式、免費語意標籤式與跨模態式四類,並說明以遷移到下游任務來評估特徵的標準流程。Balestriero 等人 [33] 則以實用的「食譜」形式涵蓋新一代方法,把它們分成四個家族:深度度量學習(對比式)、自蒸餾(DINO 家族)、典型相關分析類方法,以及遮罩影像建模(MAE)。他們強調許多隱藏的「旋鈕」(資料擴增、投影 head、防止塌縮的機制),這也解釋了為什麼自監督結果難以重現。

視覺基礎模型。 Awais 等人 [34](TPAMI)依模態組合(視覺搭配文字、音訊、深度)、訓練目標(對比式 vs. 生成式)與提示類型(文字提示;視覺提示,例如 SAM 的點、框、遮罩;以及異質混合提示)為視覺基礎模型分類。他們列出的開放挑戰包括評估與基準測試、真實世界理解與上下文推理、偏差、對抗強健性與可解釋性。Zhang 等人 [35](TPAMI)聚焦於用於視覺辨識的視覺–語言模型:架構與預訓練目標、遷移方法(提示微調、特徵轉接器),以及把知識蒸餾到偵測器與分割器。他們主張網路規模的影像–文字資料降低了對群眾標註的依賴,並讓一個模型服務許多任務。

2024–2026 年的最新進展。 不引用任何基準數字,大致的局面如下:

  • 骨幹網路。 以自監督或影像–文字資料預訓練的大型 ViT 是高階任務的預設選擇,凍結的 DINOv2/DINOv3 特徵 [21] 是密集任務的強基準。現代 CNN(ConvNeXt V2 [18])仍具競爭力,在延遲、記憶體或高解析度是主要考量時更受青睞。狀態空間骨幹 [22] 是活躍的替代路線。
  • 分割與追蹤已收斂到可提示模型:影片物體用 SAM 2,開放詞彙概念用 SAM 3 [24]。
  • 生成已轉向以 Transformer 為去雜訊器的潛在擴散 [28],編輯則轉向以指令為條件的擴散 [29]。
  • 理解越來越多交給 LLaVA 架構的多模態 LLM [26]。
  • 低階視覺仍大量依賴在合成劣化上訓練的任務專用編碼器–解碼器,並越來越常結合生成式(擴散)先驗;見 DL 04 與 DL 05。

開放問題。 (1) 資料與評估:基準測試趨於飽和,也可能與網路規模的預訓練資料重疊,難以區分泛化與記憶 [34]。(2) 真實世界的劣化:在合成雜訊或模糊上訓練的模型,遇到真實相機流程仍會失敗。(3) 保真度與幻覺:生成式先驗產生銳利、但有時是捏造的細節,這在醫學或鑑識用途中無法接受。(4) 效率:注意力對 token 數呈平方成長,基礎模型也很難在裝置端執行。(5) 大規模下的密集特徵:DINOv3 之所以需要 Gram anchoring [21],正是因為密集特徵品質可能隨訓練規模擴大而退化。(6) 以未篩選網路資料訓練的模型,其偏差、強健性與可解釋性 [34]。

重點整理

  • 深度學習把傳統的三個層次縮減為兩類:低階(影像 → 影像,以保真度評判)與高階(影像 → 語意,以正確率評判)。中階分析則依輸出的形式歸入其中之一。
  • 端對端學習以學習而來的特徵取代人工設計的特徵;而分工以預訓練骨幹+輕量 head 的形式在更大規模下回歸。
  • 卷積層是一組具局部連接與權重共享的學習式空間濾波器。步幅、填補與池化決定輸出大小;感受野依 rℓ=rℓ−1+(kℓ−1)jℓ−1r_\ell = r_{\ell-1} + (k_\ell - 1) j_{\ell-1} 成長,而有效感受野比理論值小。
  • LeNet-5(1998)不是第一個 CNN;以反向傳播訓練的卷積網路可追溯到 1989 年。ResNet 在 ImageNet 上訓練的是 18/34/50/101/152 層;1202 層只出現在 CIFAR-10。殘差連接讓恆等映射變得容易,也給梯度一條直達的路徑。
  • 帶跳接的編碼器–解碼器(FCN、U-Net)是密集預測與影像復原的標準形狀。
  • ViT 的歸納偏置很少,因此需要大規模預訓練。Swin 把局部性加回去;ConvNeXt 則證明現代化的 CNN 可以與之打平。
  • DINO 是教師–學生自蒸餾;MAE 是遮罩預測。DINOv2/v3 提供凍結即用的通用特徵。
  • 各種任務越來越收斂到可提示或與語言連結的基礎模型:分割用 SAM 1/2/3,生成用潛在擴散與 DiT,視覺–語言用 CLIP 與 LLaVA。

練習

  1. 手算感受野。 一個網路依序為:7×77 \times 7 卷積、步幅 2;3×33 \times 3 最大池化、步幅 2;接著四個 3×33 \times 3、步幅 1 的卷積。計算每一層之後的理論感受野與跳距,並用 receptive_field 函式驗證。
提示

從 r=1r = 1、j=1j = 1 開始。第一個卷積之後:r=7r = 7、j=2j = 2。池化之後:r=7+2⋅2=11r = 7 + 2 \cdot 2 = 11、j=4j = 4。之後每一層 3×33 \times 3 增加 2⋅4=82 \cdot 4 = 8,所以 r=19,27,35,43r = 19, 27, 35, 43,j=4j = 4。

  1. 參數預算。 輸入與輸出通道都是 C=256C = 256 時,比較(忽略偏差)一層 5×55 \times 5 卷積、兩層疊起來的 3×33 \times 3 卷積,以及一個瓶頸結構(1×11 \times 1 降到 64 通道、64 通道的 3×33 \times 3、1×11 \times 1 回到 256)的權重數。哪些的感受野相同?
提示

25C2≈16425C^2 \approx 164 萬;2⋅9C2≈1182 \cdot 9C^2 \approx 118 萬;瓶頸 256⋅64+9⋅642+64⋅256≈7256 \cdot 64 + 9 \cdot 64^2 + 64 \cdot 256 \approx 7 萬。前兩者都看得到 5×55 \times 5;瓶頸只看得到 3×33 \times 3,但便宜得多,這就是 ResNet-50 以上使用它的原因。

  1. 沒有捷徑時,恆等映射為什麼很難。 在網路內部,區塊的輸入通常來自前一個 ReLU,因此是非負的。證明對這樣的輸入,F≡0F \equiv 0 的殘差區塊輸出恰好是 y=x\mathbf{y} = \mathbf{x}。接著說明普通區塊(conv–BN–ReLU–conv–BN–ReLU)要輸出 y=x\mathbf{y} = \mathbf{x} 必須學到什麼。這對非常深的普通網路代表什麼?
提示

對 x≥0\mathbf{x} \ge 0,ReLU(x+0)=x\mathrm{ReLU}(\mathbf{x} + 0) = \mathbf{x}。普通區塊則必須學到恰好抵消兩次卷積與兩次正規化的權重,這是一個精確又脆弱的解,梯度下降很少找得到。殘差區塊只需要 F=0F = 0,而權重衰減與零初始化本來就把它往那裡推。因此很深的普通網路很難讓多出來的層「什麼都不做」,這與 ResNet 作者觀察到的退化現象一致。

  1. ViT 的 token 數與計算量。 對 512×512512 \times 512 的輸入,計算 patch 大小為 32、16、8 時的 token 數,以及一層全域注意力的相對成本(∝N2\propto N^2)。Swin 使用 7×77 \times 7 視窗的視窗注意力,會如何改變這個成長趨勢?
提示

N=(512/P)2N = (512/P)^2:256、1024、4096 個 token;成本比為 1 : 16 : 256。視窗注意力每層成本為 N⋅49N \cdot 49(每個 token 只關注 49 個 token),所以隨 NN 線性成長。

  1. 學來的與手動設定的濾波器。 修改數字 CNN,讓第一層凍結為四個手動設定的卷積核(兩個 Sobel、一個 Laplacian、一個平均模糊)加上四個隨機卷積核,只訓練其餘部分。與完全學習的網路比較測試正確率;再解凍隨機卷積核,觀察它們會變成什麼樣子。
提示

設定好權重之後執行 conv.weight.requires_grad_(False),並只把其餘參數交給最佳化器。在這個簡單的資料集上兩者正確率相近;重點在於手動設定的微分濾波器本來就是合理的第一層,而解凍後的隨機卷積核往往會朝有方向性、類微分的圖樣移動(可對照圖 4)。

  1. 選擇配方。 你有 2,000 張標註過的顯微鏡影像,需要 (a) 每張影像的品質標籤、(b) 逐像素的細胞遮罩、(c) 去雜訊後的影像。根據本篇的地圖,為每一項提出骨幹、head 與訓練策略,並說明哪一項最能受益於凍結的自監督骨幹。
提示

(a) 凍結的 DINOv2/v3,或微調的 ConvNeXt+線性 head。(b) U-Net(可搭配預訓練編碼器),或以點提示 SAM 再微調。(c) 全解析度的復原網路,在符合該顯微鏡雜訊特性的合成雜訊/乾淨影像對上訓練。凍結的語意特徵對 (a) 與 (b) 幫助最大;(c) 更依賴逐像素準確的統計特性,而不是語意。

參考文獻

  1. Shyandram, “深度學習的數位影像處理介紹,” blog post, 2024; updated 2026. link
  2. R. C. Gonzalez and R. E. Woods, Digital Image Processing, 4th ed., Pearson, 2018. publisher page
  3. S. Theodoridis and K. Koutroumbas, Pattern Recognition, 4th ed., Academic Press, 2008. publisher page
  4. Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel, “Backpropagation applied to handwritten zip code recognition,” Neural Computation, vol. 1, no. 4, pp. 541–551, 1989. doi:10.1162/neco.1989.1.4.541
  5. Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner, “Gradient-based learning applied to document recognition,” Proceedings of the IEEE, vol. 86, no. 11, pp. 2278–2324, 1998. doi:10.1109/5.726791
  6. O. Russakovsky, J. Deng, H. Su, et al., “ImageNet large scale visual recognition challenge,” International Journal of Computer Vision, vol. 115, no. 3, pp. 211–252, 2015. doi:10.1007/s11263-015-0816-y · arXiv:1409.0575
  7. A. Krizhevsky, I. Sutskever, and G. E. Hinton, “ImageNet classification with deep convolutional neural networks,” NeurIPS, 2012. proceedings
  8. K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” ICLR, 2015. arXiv:1409.1556
  9. C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich, “Going deeper with convolutions,” CVPR, 2015. doi:10.1109/CVPR.2015.7298594 · arXiv:1409.4842
  10. K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,” CVPR, 2016. doi:10.1109/CVPR.2016.90 · arXiv:1512.03385
  11. A. Krizhevsky, “Learning multiple layers of features from tiny images,” technical report, University of Toronto, 2009 (the CIFAR-10/100 datasets). dataset page
  12. W. Luo, Y. Li, R. Urtasun, and R. Zemel, “Understanding the effective receptive field in deep convolutional neural networks,” NeurIPS, 2016. arXiv:1701.04128
  13. J. Long, E. Shelhamer, and T. Darrell, “Fully convolutional networks for semantic segmentation,” CVPR, 2015. arXiv:1411.4038
  14. O. Ronneberger, P. Fischer, and T. Brox, “U-Net: Convolutional networks for biomedical image segmentation,” MICCAI, 2015. arXiv:1505.04597
  15. A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A. N. Gomez, Ł. Kaiser, and I. Polosukhin, “Attention is all you need,” NeurIPS, 2017. ML anthology
  16. A. Dosovitskiy, L. Beyer, A. Kolesnikov, D. Weissenborn, X. Zhai, T. Unterthiner, M. Dehghani, M. Minderer, G. Heigold, S. Gelly, J. Uszkoreit, and N. Houlsby, “An image is worth 16x16 words: Transformers for image recognition at scale,” ICLR, 2021. arXiv:2010.11929
  17. Z. Liu, Y. Lin, Y. Cao, H. Hu, Y. Wei, Z. Zhang, S. Lin, and B. Guo, “Swin Transformer: Hierarchical vision Transformer using shifted windows,” ICCV, 2021. doi:10.1109/ICCV48922.2021.00986 · arXiv:2103.14030
  18. Z. Liu, H. Mao, C.-Y. Wu, C. Feichtenhofer, T. Darrell, and S. Xie, “A ConvNet for the 2020s,” CVPR, 2022, arXiv:2201.03545; and S. Woo, S. Debnath, R. Hu, X. Chen, Z. Liu, I. S. Kweon, and S. Xie, “ConvNeXt V2: Co-designing and scaling ConvNets with masked autoencoders,” CVPR, 2023, arXiv:2301.00808.
  19. M. Caron, H. Touvron, I. Misra, H. Jégou, J. Mairal, P. Bojanowski, and A. Joulin, “Emerging properties in self-supervised vision Transformers,” ICCV, 2021. doi:10.1109/ICCV48922.2021.00951 · arXiv:2104.14294
  20. K. He, X. Chen, S. Xie, Y. Li, P. Dollár, and R. Girshick, “Masked autoencoders are scalable vision learners,” CVPR, 2022. doi:10.1109/CVPR52688.2022.01553 · arXiv:2111.06377
  21. M. Oquab, T. Darcet, T. Moutakanni, et al., “DINOv2: Learning robust visual features without supervision,” Transactions on Machine Learning Research, 2024, arXiv:2304.07193; and O. Siméoni, H. V. Vo, M. Seitzer, F. Baldassarre, M. Oquab, et al., “DINOv3,” arXiv preprint, 2025, arXiv:2508.10104.
  22. L. Zhu, B. Liao, Q. Zhang, X. Wang, W. Liu, and X. Wang, “Vision Mamba: Efficient visual representation learning with bidirectional state space model,” ICML, 2024, arXiv:2401.09417; and Y. Liu, Y. Tian, Y. Zhao, H. Yu, L. Xie, Y. Wang, Q. Ye, J. Jiao, and Y. Liu, “VMamba: Visual state space model,” NeurIPS, 2024, arXiv:2401.10166.
  23. S. Ren, K. He, R. Girshick, and J. Sun, “Faster R-CNN: Towards real-time object detection with region proposal networks,” NeurIPS, 2015, arXiv:1506.01497; and N. Carion, F. Massa, G. Synnaeve, N. Usunier, A. Kirillov, and S. Zagoruyko, “End-to-end object detection with Transformers,” ECCV, 2020, arXiv:2005.12872.
  24. A. Kirillov, E. Mintun, N. Ravi, et al., “Segment anything,” ICCV, 2023, arXiv:2304.02643; N. Ravi, V. Gabeur, Y.-T. Hu, R. Hu, et al., “SAM 2: Segment anything in images and videos,” ICLR, 2025, arXiv:2408.00714; and N. Carion, L. Gustafson, Y.-T. Hu, S. Debnath, et al., “SAM 3: Segment anything with concepts,” ICLR, 2026, arXiv:2511.16719.
  25. A. Radford, J. W. Kim, C. Hallacy, A. Ramesh, G. Goh, et al., “Learning transferable visual models from natural language supervision,” ICML, 2021. arXiv:2103.00020
  26. H. Liu, C. Li, Q. Wu, and Y. J. Lee, “Visual instruction tuning,” NeurIPS, 2023. arXiv:2304.08485
  27. J. Ho, A. Jain, and P. Abbeel, “Denoising diffusion probabilistic models,” NeurIPS, 2020. arXiv:2006.11239
  28. R. Rombach, A. Blattmann, D. Lorenz, P. Esser, and B. Ommer, “High-resolution image synthesis with latent diffusion models,” CVPR, 2022, arXiv:2112.10752; and W. Peebles and S. Xie, “Scalable diffusion models with Transformers,” ICCV, 2023, arXiv:2212.09748.
  29. T. Brooks, A. Holynski, and A. A. Efros, “InstructPix2Pix: Learning to follow image editing instructions,” CVPR, 2023. arXiv:2211.09800
  30. Z. Li, F. Liu, W. Yang, S. Peng, and J. Zhou, “A survey of convolutional neural networks: Analysis, applications, and prospects,” IEEE Transactions on Neural Networks and Learning Systems, vol. 33, 2022. doi:10.1109/TNNLS.2021.3084827 · arXiv:2004.02806
  31. S. Khan, M. Naseer, M. Hayat, S. W. Zamir, F. S. Khan, and M. Shah, “Transformers in vision: A survey,” ACM Computing Surveys, vol. 54, no. 10s, 2022. doi:10.1145/3505244 · arXiv:2101.01169
  32. L. Jing and Y. Tian, “Self-supervised visual feature learning with deep neural networks: A survey,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 43, 2021. doi:10.1109/TPAMI.2020.2992393 · arXiv:1902.06162
  33. R. Balestriero, M. Ibrahim, V. Sobal, et al., “A cookbook of self-supervised learning,” arXiv preprint, 2023. arXiv:2304.12210
  34. M. Awais, M. Naseer, S. Khan, R. M. Anwer, H. Cholakkal, M. Shah, M.-H. Yang, and F. S. Khan, “Foundation models defining a new era in vision: A survey and outlook,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 47, 2025. doi:10.1109/TPAMI.2024.3506283 · arXiv:2307.13721
  35. J. Zhang, J. Huang, S. Jin, and S. Lu, “Vision-language models for vision tasks: A survey,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 46, 2024. doi:10.1109/TPAMI.2024.3369699 · arXiv:2304.00685
  36. scikit-learn developers, “sklearn.datasets.load_digits” (a copy of the test set of the UCI optical recognition of handwritten digits dataset). docs