推薦深藍學院的《深度神經網絡加速:cuDNN 與 TensorRT》,課程面向就業,細致講解CUDA運算的理論支撐與實踐,學完可以系統化掌握CUDA基礎編程知識以及TensorRT實戰,并且能夠利用GPU開發高性能、高并發的軟件系統,感興趣可以直接看看鏈接:
深藍學院《深度神經網絡加速:cuDNN 與 TensorRT》
核心思想分析
論文提出了一種基于圖注意力網絡(Graph Attention Network, GAT)的單幅圖像超分辨率(Single Image Super-Resolution, SISR)方法,稱為 SRGAT。其核心思想是利用圖像內部的 patch-recurrence(小塊重復性)特性,通過圖神經網絡(GNN)挖掘低分辨率(LR)圖像中不同 patch 之間的結構相似性和互補信息,從而增強高分辨率(HR)圖像的重構質量。
- Patch-Recurrence 特性:自然圖像中,相似的小塊(patch)在不同區域重復出現,這些 patch 可能具有不同的分辨率或丟失不同的細節信息(見論文圖 1)。SRGAT 通過構建 patch 間的圖結構,捕捉這些相似性,并利用 GAT 進行信息聚合,增強紋理和結構細節。
- 圖注意力機制:與傳統基于卷積神經網絡(CNN)的 SISR 方法不同,SRGAT 在特征空間中構建圖,將每個 patch 視為節點,利用 GAT 學習 patch 之間的關系,避免直接替換 patch 帶來的不一致問題。
- 并行分支設計:SRGAT 結合了 圖相似性分支(Graph Similarity Branch)和 內容分支(Content Branch),分別負責挖掘結構信息和紋理細節,通過特征融合提升重建效果。
目標函數分析
SRGAT 的目標函數基于 L 1 L_1 L1? 范數損失,旨在最小化超分辨率圖像 I S R I^{SR} ISR 與真實高分辨率圖像 I H R I^{HR} IHR 之間的像素級差異。目標函數定義如下:
L ( θ ) = 1 l ∑ i = 1 l ∥ I i S R ? I i H R ∥ 1 L(\theta) = \frac{1}{l} \sum_{i=1}^{l} \| I_i^{SR} - I_i^{HR} \|_1 L(θ)=l1?i=1∑l?∥IiSR??IiHR?∥1?
-
變量說明:
- θ \theta θ:SRGAT 模型的參數。
- l l l:訓練集中的圖像對數量。
- I i S R I_i^{SR} IiSR?:第 i i i 張低分辨率圖像經過 SRGAT 生成的超分辨率圖像。
- I i H R I_i^{HR} IiHR?:對應的真實高分辨率圖像。
- ∥ ? ∥ 1 \|\cdot\|_1 ∥?∥1?: L 1 L_1 L1? 范數,計算像素級絕對差的和。
-
特點:
- 簡單性:論文僅使用 L 1 L_1 L1? 損失,未引入復雜的對抗損失(如 GAN)或感知損失(如 VGG 特征損失),卻依然取得競爭性結果,體現了模型設計的有效性。
- 魯棒性: L 1 L_1 L1? 損失對噪聲和異常值較為魯棒,適合 SISR 任務中像素級的精確重建。
- 局限性: L 1 L_1 L1? 損失可能導致生成圖像過于平滑,缺乏高頻細節。論文通過圖相似性分支挖掘 patch 間的結構信息,部分彌補了這一不足。
目標函數的優化過程
SRGAT 的優化過程通過最小化上述 L 1 L_1 L1? 損失函數,使用 ADAM 優化器 進行梯度下降訓練。具體優化步驟如下:
-
初始化:
- 初始學習率設為 1 0 ? 4 10^{-4} 10?4,ADAM 參數設置為 β 1 = 0.9 \beta_1 = 0.9 β1?=0.9, β 2 = 0.999 \beta_2 = 0.999 β2?=0.999, ? = 1 0 ? 8 \epsilon = 10^{-8} ?=10?8。
- 訓練數據集為 DIV2K,包含 800 張訓練圖像,100 張驗證圖像和 100 張測試圖像。
-
數據預處理:
- 從高分辨率圖像中裁剪 patch,通過雙三次插值(bicubic)下采樣生成對應的低分辨率 patch。
- 數據增強包括縮放、翻轉和旋轉(90°、180°、270°)。
-
訓練過程:
- 每個訓練 batch 包含 16 個 40 × 40 40 \times 40 40×40 的低分辨率 patch。
- 訓練共 1000 個 epoch,每個 epoch 包含 1000 次反向傳播迭代。
- 學習率每 200 個 epoch 減半,以保證收斂。
-
反饋機制:
- SRGAT 采用反饋連接(feedback connections),在特征映射塊中通過 T T T 次迭代( t ≤ T t \leq T t≤T)利用高層信息精煉低層特征表示。特征映射塊的數學表達為:
F M t o u t = [ f G ( F M t i n ) ∥ f C ( F M t i n ) ] , 1 ≤ t ≤ T F_{M_t}^{out} = \left[ f_G(F_{M_t}^{in}) \| f_C(F_{M_t}^{in}) \right], \quad 1 \leq t \leq T FMt?out?=[fG?(FMt?in?)∥fC?(FMt?in?)],1≤t≤T
其中, f G ( ? ) f_G(\cdot) fG?(?) 和 f C ( ? ) f_C(\cdot) fC?(?) 分別表示圖相似性分支和內容分支的操作, ∥ \| ∥ 表示特征拼接, F M t i n F_{M_t}^{in} FMt?in? 為第 t t t 次迭代的輸入特征:
F M t i n = { f E ( I L R ) , t = 1 [ F M t ? 1 o u t ∥ f E ( I L R ) ] , 1 < t ≤ T F_{M_t}^{in} = \begin{cases} f_E(I^{LR}), & t = 1 \\ \left[ F_{M_{t-1}}^{out} \| f_E(I^{LR}) \right], & 1 < t \leq T \end{cases} FMt?in?={fE?(ILR),[FMt?1?out?∥fE?(ILR)],?t=11<t≤T?
f E ( ? ) f_E(\cdot) fE?(?) 為特征提取塊的操作。
- SRGAT 采用反饋連接(feedback connections),在特征映射塊中通過 T T T 次迭代( t ≤ T t \leq T t≤T)利用高層信息精煉低層特征表示。特征映射塊的數學表達為:
-
實現細節:
- 使用 PyTorch 框架,在 NVIDIA 1080Ti GPU 上訓練。
- 模型能夠在 0.2 秒內處理一張 256 × 256 256 \times 256 256×256 的圖像( × 4 \times 4 ×4 尺度)。
主要貢獻點
-
引入 GNN 到 SISR:
- 首次將圖神經網絡(GNN)應用于單幅圖像超分辨率,通過在特征空間構建 patch 圖,挖掘 patch 間的結構相似性,降低對精確 patch 匹配的依賴。
-
圖注意力機制(GAT)的應用:
- 使用 GAT 學習 patch 間的關系,通過自注意力機制為重要特征分配更大權重,增強了模型對復雜結構(如邊緣、角點)的建模能力。
-
并行分支設計:
- 提出圖相似性分支和內容分支的并行結構,分別聚焦結構信息和紋理細節,通過特征融合提升重建質量。
-
魯棒的 patch-recurrence 利用:
- 利用圖像內部 patch 的冗余性,通過圖結構傳播互補信息,生成更魯棒的超分辨率估計,尤其在復雜場景(如 Urban100)和高度相關 patch 場景(如 Manga109)中表現優異。
-
優異的實驗表現:
- 在五個基準數據集(Set5、Set14、BSD100、Urban100、Manga109)上,SRGAT 在 × 2 \times 2 ×2、 × 3 \times 3 ×3、 × 4 \times 4 ×4 尺度下均超越或匹敵最先進方法,PSNR 和 SSIM 指標表現突出。
實驗結果分析
數據集
- 訓練數據集:DIV2K(800 張訓練圖像,100 張驗證圖像,100 張測試圖像)。
- 測試數據集:
- Set5、Set14、BSD100:自然場景圖像。
- Urban100:城市場景,包含復雜頻率細節。
- Manga109:日本漫畫,具有高度相關的 patch 模式。
- 評估指標:PSNR(峰值信噪比)和 SSIM(結構相似性),在 YCbCr 空間的亮度通道(Y 通道)上計算。
定量結果
- 比較方法:與 13 種最先進方法比較,包括 SRCNN、VDSR、LapSRN、DRCN、DRRN、MemNet、EDSR、SRMDNF、CARN、FRSR、RNAN、USRNet 和 OISR-RK3。
- 結果亮點(見表 I,論文頁面 4911):
- 在 × 2 \times 2 ×2 尺度下,SRGAT 在 Set5(38.20/0.9610)、Set14(33.93/0.9201)、Urban100(32.90/0.9359)上取得最高 PSNR/SSIM。
- 在 × 3 \times 3 ×3 和 × 4 \times 4 ×4 尺度下,SRGAT 在大多數數據集上表現最佳或次佳,尤其在 Urban100 和 Manga109 上優勢明顯(例如, × 4 \times 4 ×4 尺度下 Urban100 的 PSNR 為 26.76/0.8052)。
- 與 EDSR、RNAN、OISR-RK3 相比,SRGAT 使用較少的濾波器(64 vs. 256)和參數,卻依然達到競爭性性能(見圖 4,論文頁面 4912)。
- 運行時間(表 II,論文頁面 4911):
- SRGAT 的速度略慢于 CARN,但優于 EDSR,且性能更佳。例如,處理 256 × 256 256 \times 256 256×256 圖像耗時約 0.2 秒( × 4 \times 4 ×4 尺度)。
定性結果
- 視覺效果(圖 7-9,論文頁面 4913-4915):
- SRGAT 在自然場景(Set5、Set14)、城市場景(Urban100)和漫畫場景(Manga109)上能精確重構直線、網格和復雜紋理(如建筑窗戶邊緣、漫畫線條)。
- 相比傳統方法(VDSR、LapSRN、DRRN),SRGAT 生成的圖像更清晰,偽影更少。
消融實驗
- 圖相似性分支的作用(表 III,論文頁面 4916):
- 去除 GAT 的 SRGAT(SRGAT w/o GAT)在所有數據集上的 PSNR/SSIM 下降,尤其在 Urban100(0.22)和 Manga109(0.24)上差距更大,證明 GAT 在復雜場景中的重要性。
- GNN 類型比較(表 IV,論文頁面 4916):
- GAT 優于 Chebyshev 和 GCN,因為自注意力機制能更好分配權重。
- Patch 大小與特征維度(表 V,論文頁面 4916):
- Patch 大小影響較小,特征維度為 64 時在性能和訓練時間間取得平衡。
- 鄰居節點數 k k k(表 VI,論文頁面 4916):
- k = 5 k=5 k=5 時性能和計算成本平衡最佳, k ≥ 5 k \geq 5 k≥5 后性能提升有限。
算法實現過程詳細解釋
SRGAT 的算法實現基于一個三階段的網絡架構(見圖 2,論文頁面 4908),包括 特征提取塊(E)、特征映射塊(M) 和 重構塊(R)。以下是詳細的實現過程:
1. 特征提取塊(E)
- 功能:從低分辨率圖像 I L R I^{LR} ILR 中提取初始特征。
- 實現:
- 輸入:低分辨率圖像 I L R I^{LR} ILR。
- 結構:一組卷積層,生成維度為 h × w × d h \times w \times d h×w×d 的低分辨率特征,其中 h h h 和 w w w 是輸入圖像的空間維度, d d d 是特征通道數(論文中設為 64)。
- 輸出: F E = f E ( I L R ) F_E = f_E(I^{LR}) FE?=fE?(ILR),作為后續特征映射塊的輸入。
- 細節:為加速收斂,添加長跳躍連接(long skip connection),將上采樣的 I L R I^{LR} ILR 直接傳遞到輸出。
2. 特征映射塊(M)
- 功能:通過并行的圖相似性分支和內容分支精煉特征,利用反饋機制迭代優化。
- 結構:
- 輸入:在第 t t t 次迭代,輸入特征 F M t i n F_{M_t}^{in} FMt?in? 定義為:
F M t i n = { f E ( I L R ) , t = 1 [ F M t ? 1 o u t ∥ f E ( I L R ) ] , 1 < t ≤ T F_{M_t}^{in} = \begin{cases} f_E(I^{LR}), & t = 1 \\ \left[ F_{M_{t-1}}^{out} \| f_E(I^{LR}) \right], & 1 < t \leq T \end{cases} FMt?in?={fE?(ILR),[FMt?1?out?∥fE?(ILR)],?t=11<t≤T? - 輸出:通過圖相似性分支 f G ( ? ) f_G(\cdot) fG?(?) 和內容分支 f C ( ? ) f_C(\cdot) fC?(?) 的特征拼接:
F M t o u t = [ f G ( F M t i n ) ∥ f C ( F M t i n ) ] F_{M_t}^{out} = \left[ f_G(F_{M_t}^{in}) \| f_C(F_{M_t}^{in}) \right] FMt?out?=[fG?(FMt?in?)∥fC?(FMt?in?)] - 反饋機制:通過 T T T 次迭代,利用前一次迭代的輸出 F M t ? 1 o u t F_{M_{t-1}}^{out} FMt?1?out? 精煉當前特征。
- 輸入:在第 t t t 次迭代,輸入特征 F M t i n F_{M_t}^{in} FMt?in? 定義為:
圖相似性分支(Graph Similarity Branch)
- 功能:利用 GAT 挖掘 patch 間的結構相似性,恢復邊緣、角點等結構信息。
- 實現:
- 構建圖:
- 輸入特征 F M t i n F_{M_t}^{in} FMt?in?(維度 h × w × d h \times w \times d h×w×d)通過卷積層(步幅 s s s,核大小 p × p p \times p p×p)處理,輸出維度為 h / s × w / s × d h/s \times w/s \times d h/s×w/s×d。
- 將特征圖重塑為 n × d n \times d n×d 矩陣( n = h / s × w / s n = h/s \times w/s n=h/s×w/s),每行表示一個 patch 節點,構成圖的節點集 h = { h ? 1 , h ? 2 , … , h ? n } \mathbf{h} = \{ \vec{h}_1, \vec{h}_2, \ldots, \vec{h}_n \} h={h1?,h2?,…,hn?}, h ? i ∈ R d \vec{h}_i \in \mathbb{R}^d hi?∈Rd。
- 邊連接:為每個節點選擇 k k k 個最近鄰節點(基于 patch 中心歐幾里得距離, k = 5 k=5 k=5)。
- GAT 層(見圖 3,論文頁面 4909):
- 線性變換:對每個節點特征 h ? i \vec{h}_i hi? 應用共享權重矩陣 W ∈ R d ′ × d \mathbf{W} \in \mathbb{R}^{d' \times d} W∈Rd′×d( d ′ = d d' = d d′=d)。
- 自注意力機制:計算節點 i i i 和 j j j 的注意力系數:
e i j = a ( W h ? i , W h ? j ) = LeakyReLU ? ( a ? T [ W h ? i ∥ W h ? j ] ) e_{ij} = a(\mathbf{W} \vec{h}_i, \mathbf{W} \vec{h}_j) = \operatorname{LeakyReLU}(\vec{\mathbf{a}}^T [\mathbf{W} \vec{h}_i \| \mathbf{W} \vec{h}_j]) eij?=a(Whi?,Whj?)=LeakyReLU(aT[Whi?∥Whj?])
其中, a a a 是一個參數化的前饋神經層, a ? ∈ R 2 d ′ \vec{\mathbf{a}} \in \mathbb{R}^{2d'} a∈R2d′。 - 歸一化:通過 Softmax 歸一化注意力系數:
α i j = exp ? ( e i j ) ∑ l ∈ n exp ? ( e i l ) \alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{l \in n} \exp(e_{il})} αij?=∑l∈n?exp(eil?)exp(eij?)? - 特征更新:聚合鄰居節點信息,更新節點特征:
h ? i ′ = σ ( ∑ j ∈ k α i j W h ? j ) \vec{h}_i' = \sigma \left( \sum_{j \in k} \alpha_{ij} \mathbf{W} \vec{h}_j \right) hi′?=σ ?j∈k∑?αij?Whj? ?
其中, σ \sigma σ 為非線性激活函數。
- 輸出處理:
- GAT 層輸出維度仍為 n × d n \times d n×d,重塑為 h / s × w / s × d h/s \times w/s \times d h/s×w/s×d。
- 通過反卷積上采樣至 h × w × d h \times w \times d h×w×d,與內容分支輸出拼接。
- 構建圖:
內容分支 CDP(Content Branch)
- 功能:基于反饋塊(Feedback Block)恢復紋理細節。
- 實現:
- 結構:包含多個投影組(projection groups),每個組由 1 × 1 1 \times 1 1×1 卷積、上采樣反卷積和下采樣卷積組成,組間通過密集跳躍連接(dense skip connections)增強特征傳遞。
- 輸出:維度保持為 h × w × d h \times w \times d h×w×d,與圖相似性分支輸出拼接。
3. 重構塊(R)
- 功能:將特征映射塊的輸出上采樣并生成殘差圖像,最終合成超分辨率圖像。
- 實現:
- 結構:包含反卷積層(用于上采樣)和卷積層(生成殘差圖像)。
- 輸出:超分辨率圖像通過以下公式計算:
I S R = f R ( F M T o u t ) + I L R ↑ I^{SR} = f_R(F_{M_T}^{out}) + I^{LR}\uparrow ISR=fR?(FMT?out?)+ILR↑
其中, f R ( ? ) f_R(\cdot) fR?(?) 表示重構塊操作, I L R ↑ I^{LR}\uparrow ILR↑ 為上采樣的低分辨率圖像。
4. 訓練與優化
- 損失函數:使用 L 1 L_1 L1? 損失(公式 4),通過 ADAM 優化器最小化。
- 訓練細節:如前所述,1000 epoch,初始學習率 1 0 ? 4 10^{-4} 10?4,每 200 epoch 減半,batch 大小為 16。
總結
SRGAT 是一種創新的單幅圖像超分辨率方法,通過引入圖注意力網絡充分利用圖像內部 patch 的重復性,結合并行分支設計和反饋機制,顯著提升了重建質量。其 L 1 L_1 L1? 損失函數簡單有效,優化過程通過 ADAM 和反饋機制保證收斂。實驗結果表明,SRGAT 在多個基準數據集上超越或匹敵最先進方法,尤其在復雜場景中表現優異。算法實現清晰,圖相似性分支和內容分支的協同工作為其高效性和魯棒性提供了保障。