本文依據 MIT 6.5940 Fall 2024。 這是 MIT 6.5940 導讀系列第 20 篇,合併第 16 與第 17 講。
系列位置:上一篇 L15 長上下文 LLM|下一篇 L18 Diffusion 加速|系列總覽
官方材料:
- 第 16 講 Vision Transformer(2024-10-31):Lec16-Vision-Transformers.pdf(85 頁)、錄影
- 第 17 講 GAN, Video, and Point Cloud(2024-11-05):Lec17-Efficient-GANs-Video-PointCloud.pdf(106 頁)、錄影
以下「L16 第 N 頁」「L17 第 N 頁」分別指這兩份 PDF 的頁碼。存取等級 A3:投影片與錄影公開,這兩講沒有對應的 lab。2026-09-30 核對。
Fall 2026 對照:Fall 2026 課頁保留「Vision Transformer」(11 月 5 日,第 16 講),但 GAN、Video、Point Cloud 這一講被拿掉,第 17、18 講改成 Diffusion Model Part I/II。截至 2026-09-30 這幾講都還沒上線。想學第 17 講的內容,目前只能用 Fall 2024 的材料。
為什麼這兩講放在一起
前面十五講的主角是 CNN 分類器和 LLM。這兩講換成「視覺任務的特殊結構」:高解析度影像、生成模型、影片、3D 點雲。L17 第 2 頁把思路講得很清楚:每種資料都有自己的冗餘,GAN 有 2D 空間冗餘,影片有時間冗餘,點雲有 3D 空間冗餘(而且極度稀疏)。找到冗餘,就知道從哪裡省。
| 講次 | 段落 | 代表技術 |
|---|---|---|
| L16 | ViT 基礎 | patch embedding、資料量與 CNN 的比較 |
| L16 | 高效 ViT | window attention(Swin)、linear attention(EfficientViT)、sparse attention(SparseViT) |
| L16 | ViT 的自監督 | 對比學習、CLIP、MAE |
| L16 | ViT 與自迴歸生成 | VQ、VAR、HART |
| L17 | 高效 GAN | GAN Compression、AnyCost GAN、DiffAugment |
| L17 | 高效影片理解 | 2D/3D CNN 的取捨、TSM |
| L17 | 高效點雲 | PVCNN、SPVCNN、BEVFusion |
第 16 講:Vision Transformer
ViT 基礎:一張圖切成幾個 token
ViT 把圖切成 patch,每個 patch 當一個 token(L16 第 4–8 頁)。投影片的小例子:96×96 的圖、32×32 的 patch,得到 3×3=9 個 token,每個 token 攤平是 3×32×32=3072 維,線性投影到 ViT 的 hidden size 768,這一層有 3072×768≈2.36M 參數。實作上就是一個 32×32、stride 32 的卷積。
第 10–11 頁是 ViT 論文的經典結論:資料量有限時 ViT 輸給 CNN,用大資料集預訓練後才超越 CNN。這個結論會在自監督那段再用到。
為什麼高解析度是問題
分割、超解析度、自駕這類 dense prediction 任務需要高解析度,低解析度會丟掉細節與小物體(L16 第 14–21 頁)。問題是 ViT 的計算量隨輸入解析度平方成長(第 16 頁)。第 17 頁給了一個對照:在 Jetson AGX Orin(TensorRT、fp16、batch 1)上做 Cityscapes 分割,SegFormer 1.6 FPS、82.4 mIoU,EfficientViT 21.8 FPS、82.7 mIoU。
接下來三種 attention 就是三種省法。
Window attention:只在局部視窗算
Swin Transformer(L16 第 23–26 頁)把 attention 限制在固定大小(例如 7×7)的局部視窗內。每個視窗 token 數固定,所以總計算量對影像大小是線性的;特徵圖再逐層降採樣。問題是視窗之間不交換資訊,解法是下一個 block 把視窗位移(shifted window)。第 27 頁延伸到點雲:FlatFormer 處理 99.9% 稀疏的 3D 點雲,用等大小分組的稀疏視窗。
Linear attention:換個乘法順序
直覺(L16 第 29–30 頁)。Softmax attention 要先算 $QK^\top$,得到 n×n 的矩陣,所以是 $O(n^2)$。如果把 softmax 換成 ReLU,就可以利用矩陣乘法的結合律 $(ab)c = a(bc)$,先算 $K^\top V$(只有 d×d),再乘 Q,成本變成 $O(n)$。
代價(第 31–32 頁)。天下沒有白吃的午餐:ReLU linear attention 產生不了尖銳的注意力分布,擅長抓全域資訊,但抓不好局部細節,也缺少多尺度學習能力。
EfficientViT 的補法(第 33 頁)。EfficientViT 做兩件事:用小卷積把鄰近 token 聚合成多尺度的 Q/K/V,再做 linear attention;在 FFN 裡加 depthwise convolution 補局部資訊。第 34–39 頁的結果涵蓋 Cityscapes 分割、超解析度(最多快 6.4 倍)、Segment Anything 與 ImageNet 分類。
Sparse attention:不是每個視窗都值得算
SparseViT(L16 第 41–46 頁)的問題是:高解析度加稀疏,會不會比低解析度加稠密更好?做法分三步:以視窗為單位剪掉 activation(每層稀疏度可以不同)、做稀疏感知的訓練調整、在資源限制下搜尋每層的稀疏度。第 46 頁把不同延遲預算(24 ms、19 ms)下保留的視窗畫出來。這和 L3–L4 的剪枝是同一套想法,只是剪的是 activation 而不是權重。
自監督:ViT 需要大資料,但標註很貴
L16 第 48–49 頁把前面的結論接回來:ViT 要大資料才好,標註大資料又很貴,那就用沒有標註的資料。
- 對比學習(第 51–53 頁):同一張圖的兩個隨機視角是正樣本,其他圖是負樣本。引用 Chen et al.(MoCo v3) 的結果:在小資料上直接監督訓練大 ViT,模型越大準確率反而多半下降;自監督的 ViT 則是模型越大越好。
- CLIP(第 54–56 頁):CLIP 用大量圖文配對做對比學習,推論時可以 zero-shot、開放詞彙分類,不必微調、類別數不限。
- MAE(第 57–61 頁):MAE 隨機遮住 patch 再預測回來,類似 BERT 的 masked language model。兩個設計:非對稱的 encoder-decoder(重的 encoder 只處理沒遮的 token,輕的 decoder 處理全部);遮蔽比例 75%,遠高於 BERT 的 15%,因為影像的資訊密度比語言低。第 61 頁顯示 MAE 在部分與完整微調設定下都比 MoCo v3 好。
MAE 只處理沒遮的 25% token,本身就是一個效率設計。
自迴歸影像生成與 HART
L16 最後一段問:ViT 會「看」視覺 token,那能不能「生成」視覺 token?
- VQ 把影像變離散 token(第 67–68 頁):vector quantization 用一個 codebook 把每個 patch 對應到最近的碼字。第 68 頁特別指出,VQ 是 Deep Compression 裡 codebook 量化的推廣,也就是 L5 講過的 k-means 量化。
- VAR(第 69–70 頁):VAR 把「預測下一個 token」改成「預測下一個尺度」,一次生成一整個解析度層級,比逐 token 生成快。
- 離散 tokenizer 的問題(第 71–72 頁):重建品質差,高解析度下細節糊掉。
HART 的做法(第 73–81 頁)。HART 的 tokenizer 能同時解碼離散與連續 token,並把連續 token 拆成「離散 token + 殘差 token」。生成時分兩部分:
- 離散 token 由可擴展解析度的自迴歸 Transformer 生成(沿用 VAR 的做法)。
- 殘差 token 由一個小 MLP 做的 residual diffusion 補上。
為什麼快(第 65 頁):diffusion 模型通常要在最高解析度上跑完整 Transformer 約 20 步;HART 用 10–14 步取樣,而且只有最後一步在最高解析度。第 82 頁的結論是在相近畫質下吞吐量是 diffusion 模型的 4.5–7.7 倍(1024px),第 65 頁在 512px 下最多 9.6 倍。第 84 頁展示它在搭載 4090 mobile GPU 的筆電上以互動速度執行。
第 17 講:GAN、影片與點雲
高效 GAN
背景(L17 第 5–11 頁)。GAN 由生成器 G 和判別器 D 對抗訓練;D 只在訓練時用,推論時真正要加速的是 G。第 11 頁的比較重點是:生成模型比辨識模型貴得多。
GAN Compression(第 13–17 頁)。GAN Compression 壓縮 conditional GAN,流程是:用預訓練的 teacher 生成器蒸餾一個 super student 生成器(配合 L2 特徵匹配),再用 NAS 自動決定每層 channel 數,從候選池裡評估、挑選後微調。第 15–16 頁的壓縮倍數:pix2pix 11.8 倍、CycleGAN 21.2 倍、GauGAN 8.8 倍。這一招把 L7–L8 的 NAS 和 L9 的蒸餾接在一起。
AnyCost GAN(第 19–33 頁)。場景:用 GAN 修圖時,每次調整都要等完整生成,很難互動。直覺:光線追蹤會用較少光線先出快速預覽,GAN 能不能也這樣?機制:AnyCost GAN 訓練一個能在不同解析度、不同 channel 數下產生一致結果的生成器,編輯時用小子網路即時預覽,最後用完整模型輸出。訓練時隨機取樣 channel 數會遇到兩個問題:子網路輸出不一致(加蒸餾 loss 解決);單一判別器無法同時給不同子生成器有效回饋(改用依生成器架構條件化的判別器)。
DiffAugment(第 35–45 頁)。問題換成資料量:FFHQ 有 7 萬張精選人臉,收集與標註要花很久。第 37 頁的數字是 StyleGAN2 在 100%、20%、10% 訓練資料下的 FID 分別是 11.1、23.1、36.0(越低越好),資料一少就明顯變差,原因是判別器過擬合。資料增強是對付過擬合的老辦法,但 GAN 要怎麼增強?
| 做法 | 問題 |
|---|---|
| 只增強真實圖 | 生成圖也學到增強造成的假影(第 40 頁) |
| 真假圖都增強,但只在更新 D 時 | 最佳化失衡,訓練崩壞(第 41 頁) |
| DiffAugment:真假圖都增強,D 與 G 更新時都用,且增強可微分 | 資料少時明顯改善,100 張圖也能生成(第 42–45 頁) |
高效影片理解:TSM
2D 與 3D CNN 的取捨(L17 第 51–59 頁):
- 2D CNN:取樣影格各自過 2D CNN 再彙總分數,或加光流做 two-stream,或後接 LSTM。好處是計算省、能重用影像模型;壞處是無法建模時間資訊,光流比網路本身還慢,後期融合抓不到低階時間關係。
- 3D CNN(C3D、I3D):在時間維度也做卷積,能同時建模時空資訊;代價是多一個維度,模型大小與計算量都大。I3D 用「膨脹」把 2D 權重沿時間複製來初始化。
第 59 頁的問題:能不能用 2D CNN 的成本拿到 3D CNN 的表現?
TSM 的做法(第 61–64 頁)。TSM 把一部分 channel 沿時間軸位移:雙向版一部分往前、一部分往後,讓相鄰影格交換資訊,用於離線影片;單向版只從過去往未來位移,用於即時串流。插進現成的 2D CNN,零 FLOPs、零參數。第 64 頁的實作只有幾行:
# shape of x: [N, T, C, H, W]
out = torch.zeros_like(x)
fold = c // fold_div
out[:, :-1, :fold] = x[:, 1:, :fold] # shift left
out[:, 1:, fold: 2 * fold] = x[:, :-1, fold: 2 * fold] # shift right
out[:, :, 2 * fold:] = x[:, :, 2 * fold:] # not shift
return out
結果(第 65–76 頁):
- Something-Something 資料集上,計算量是 ECO 家族的 1/3、Non-local I3D 家族的 1/6,表現更好。
- Tesla P100、batch 1:I3D 每支影片 164.3 ms、準確率 41.6%;TSM 17.4 ms、43.4%。
- 放大到 SUMMIT 超級電腦:8 幀 ResNet-50 TSM 在 Kinetics 上訓練,1 個節點(6 GPU)要 49 小時 50 分,256 個節點(1536 GPU)只要 14 分鐘,準確率維持在 74% 左右。
高效點雲:PVCNN、SPVCNN、BEVFusion
挑戰(L17 第 82–86 頁)。點雲是一組無序的 3D 點(x, y, z 加特徵),極度稀疏(有時密度不到 0.1%),在記憶體中不規則存放,一般 CNN 處理不了。模型又常要部署在自駕車、AR 頭盔這類資源有限的裝置上。
PVCNN(第 88–93 頁)。兩種既有做法各有瓶頸:voxel 方法在 8GB GPU 記憶體下會損失 40% 以上資訊;point 方法有大量不規則記憶體存取,而第 89 頁提醒,晶片外 DRAM 存取比算術運算貴得多,隨機存取還可能撞到 bank conflict。PVCNN 兩者並用:voxel 分支規則、沒有不規則存取,適合聚合鄰域資訊;point 分支保留高解析度,減少 voxel 化的資訊損失。第 93 頁的室內分割示範:PointNet 用 1.9 GB 記憶體、1.9 秒,PVCNN 用 1.2 GB、1.0 秒。
SPVCNN(第 94–98 頁)。SPVConv 把 voxel 分支換成稀疏卷積,處理大場景時不必付出稠密網格的代價;再配合 3D NAS(super network、演化搜尋、延遲預測器)在延遲目標下找架構。
BEVFusion(第 100–105 頁)。自駕車同時有多顆相機(透視視角)和 LiDAR(3D 視角),融合前需要一個共同空間:所有感測器資料都能低損失轉換過去,而且適合不同 3D 任務。BEVFusion 選鳥瞰圖(BEV):相機走稠密分支、LiDAR 走稀疏分支,各自轉到 BEV 後融合,再接偵測、地圖分割等任務頭。第 105 頁寫著截至 2022 年 11 月 9 日在 Waymo 排行榜排名第一。
兩講共用的想法
整理完會發現兩條線:
- 找到結構性的冗餘再省:ViT 的局部性(window attention)、影片相鄰幀的相似(TSM)、點雲的稀疏(SPVConv)、影像 token 的低資訊密度(MAE 遮 75%)。
- 前面各講的技術被重新組合:SparseViT 是剪枝,GAN Compression 是 NAS 加蒸餾,VQ 是 k-means 量化,PVCNN 的論證回到記憶體存取成本。F24 課頁把這兩講排在「Chapter II: Domain-Specific Optimization」底下,指的就是這種依資料特性重組既有工具的做法。
自學怎麼做
- L16 第 30 頁的結合律圖是整講最值得停下來的一頁:自己寫出 $QK^\top V$ 兩種乘法順序的矩陣形狀,確認哪一種是 $O(n)$。
- 把 L17 第 64 頁的 TSM 程式碼抄進 notebook,用一個隨機
[N, T, C, H, W]tensor 跑一次,印出位移前後某個 channel 在時間軸上的值。 - 今晚就能做的一件事:用 L16 第 5 頁的算法,算 patch size 16 的 ViT 在 224×224 與 1024×1024 輸入下各有幾個 token((224/16)² 與 (1024/16)²),再平方一次估計 attention 矩陣大小差幾倍,對照第 16 頁的 GMACs 曲線。
延伸閱讀
- 同系列:L15 長上下文 LLM、L14 LLM 後訓練(VILA-U 的影像 token 化)、L18 Diffusion 加速
- ViT 與自監督:CS231N L8:Attention、Transformer 與 ViT、CS231N L12:自監督學習
- GAN:CS231N L13:自迴歸、VAE 與 GAN
- 影片與 3D:CS231N L10:影片理解、CS231N L15:3D 視覺
參考資料
- Lec16-Vision-Transformers.pdf(Fall 2024)、第 16 講錄影
- Lec17-Efficient-GANs-Video-PointCloud.pdf(Fall 2024)、第 17 講錄影
- MIT 6.5940 Fall 2024 課頁 — 排程與日期
- MIT 6.5940 Fall 2026 課頁 — 第 16 講保留、第 17 講改為 Diffusion Part I
- Dosovitskiy et al., ViT、Liu et al., Swin Transformer、Liu et al., FlatFormer
- Cai et al., EfficientViT、Chen et al., SparseViT
- Chen et al., An Empirical Study of Training Self-Supervised ViTs(MoCo v3)、Radford et al., CLIP、He et al., MAE
- Han et al., Deep Compression、Tian et al., VAR、Tang et al., HART
- Li et al., GAN Compression、Lin et al., AnyCost GAN、Zhao et al., DiffAugment
- Lin et al., TSM
- Liu et al., PVCNN、Tang et al., SPVNAS/SPVConv、Liu et al., BEVFusion
Loading...