用於超大影象的訓練策略:Patch Gradient Descent

語言: CN / TW / HK

前言 本文旨在計算和記憶體限制的情況下,解決在大規模影象上訓練現有CNN 架構的問題。提出PatchGD,它基於這樣的假設:與其一次對整個影象執行基於梯度的更新,不如一次只對影象的一小部分執行模型更新,確保其中的大部分是在迭代過程中覆蓋。

當在大規模影象上訓練模型時,PatchGD 廣泛享有更好的記憶體和計算效率。尤其是在計算記憶體有限的情況下,該方法在處理大影象時比標準梯度下降法更穩定和高效。

歡迎關注公眾號CV技術指南,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀、CV招聘資訊。

論文:http://arxiv.org/pdf/2301.13817.pdf

論文出發點

現有的使用 CNN 的深度學習模型主要在相對較低的解析度範圍(小於 300 × 300 畫素)上進行訓練和測試。這部分是因為廣泛使用的影象基準資料集。在高解析度影象上使用這些模型會導致相關啟用大小的二次增長,而這反過來又會導致訓練計算量和記憶體佔用量的大幅增加。此外,當可用的 GPU 記憶體有限時,CNN 無法處理如此大的影象。

解決使用 CNN 處理超大影象問題的工作非常有限。其中最常見的方法是通過降尺度來降低影象的解析度。然而,這會導致與小尺度特徵相關的資訊大量丟失,並且會對與影象相關的語義上下文產生不利影響。另一種策略是將影象劃分為重疊或不重疊的圖塊,然後按順序處理這些圖塊。然而,這種方法並不能保證塊之間的語義連結將被保留,並且它會阻礙學習過程。存在幾種類似的策略來嘗試學習大影象中包含的資訊,但是,它們無法捕獲全域性上下文限制了它們的使用。

這篇論文提出一種可擴充套件的訓練策略,旨在構建具有非常大的影象、非常低的記憶體計算或兩者結合的神經網路。

創新思路

本文認為“大影象”不應該根據它們所包含的畫素數量來簡單解釋,而是如果相應的計算記憶體預算很小,則影象應該被認為太大而無法使用 CNN 進行訓練。

因此提出PatchGD ,一次只使用影象的一部分執行模型更新,同時還確保它在多個步驟的過程中看到幾乎完整的上下文。

方法

General description

PatchGD 的核心是構建或填充 Z 塊。無論輸入的哪些部分用於執行模型更新,Z 都會根據從前幾個更新步驟中為影象的不同部分獲取的資訊構建完整影象的編碼。

Z 塊的使用如圖a 所示 。首先將輸入影象分成 m×n 塊,每個塊使用 θ1 作為獨立影象處理。模型的輸出與各patch對應的位置相結合,並將它們作為批次傳遞給模型進行處理,用於填充 Z 的各個部分。

為了構建端到端 CNN 模型,添加了一個包含卷積層和全連線層的小型子網路,該子網路處理 Z 中包含的資訊,並將其轉換為分類任務所需的概率向量。模型訓練和推理的pipeline如下圖 b 所示。在訓練期間,更新模型元件 θ1 和 θ2。基於從輸入影象中取樣的一小部分patch,使用 θ1 的最新狀態計算相應的編碼,輸出用於更新已填充 Z 中的相應條目。然後使用部分更新的 Z 進一步計算損失函式值,並通過反向傳播更新模型引數。

Mathematical formulation

PatchGD 避免一次性對整個影象樣本進行模型更新,而是僅使用部分影象計算梯度並更新模型引數。由此,其模型更新步驟可以表示為:

其中, i 表示某個 epoch 內的 mini-batch 迭代的索引, j 表示內部迭代。在每次內部迭代中,從輸入影象 X中取樣 k 個補丁,執行梯度的更新。

演算法 1 描述了對一批 B 影象的模型訓練。作為模型訓練過程的第一步,初始化每個輸入影象對應的Z:

演算法 2 描述了 Z 的填充過程:

結果

本文在UltraMNIST和PANDA前列腺癌分級評估兩個資料集上進行實驗驗證。其中,UltraMNIST 是一個分類資料集,每個樣本包含 3-5 個不同比例的 MNIST 數字,這些數字位於影象中的隨機位置,數字之和介於 0-9 之間。PANDA 資料集包含高解析度組織病理學影象。

使用 ResNet50 架構在 UltraMNIST 分類任務中,對於512 × 512影象,PatchGD 的效能優於 GD 以及 GD-extended 的大幅提升:

同理,使用MobileNetV2 架構的對比情況:

PANDA 資料集上使用 Resnet50的驗證情況:

歡迎關注公眾號CV技術指南,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀、CV招聘資訊。

【技術文件】《從零搭建pytorch模型教程》122頁PDF下載

QQ交流群:444129970。群內有大佬負責解答大家的日常學習、科研、程式碼問題。

模型部署交流群:732145323。用於計算機視覺方面的模型部署、高效能運算、優化加速、技術學習等方面的交流。

其它文章

姿態估計端到端新方案 | DirectMHP:用於全範圍角度2D多人頭部姿勢估計

深度理解變分自編碼器(VAE) | 從入門到精通

計算機視覺入門1v3輔導班

計算機視覺交流群

用於超大影象的訓練策略:Patch Gradient Descent

CV小知識討論與分析(5)到底什麼是Latent Space?

【免費送書活動】關於語義分割的億點思考

新方案:從錯誤中學習,點雲分割中的自我規範化層次語義表示

經典文章:Transformer是如何進軍點雲學習領域的?

CVPR 2023 Workshop | 首個大規模視訊全景分割比賽

如何更好地應對下游小樣本影象資料?不平衡資料集的建模的技巧和策

Transformer交流群

經典文章:Transformer是如何進軍點雲學習領域的?

CVPR 2023 Workshop | 首個大規模視訊全景分割比賽

如何更好地應對下游小樣本影象資料?不平衡資料集的建模的技巧和策

U-Net在2022年相關研究的論文推薦

用少於256KB記憶體實現邊緣訓練,開銷不到PyTorch千分之一

PyTorch 2.0 重磅釋出:一行程式碼提速 30%

Hinton 最新研究:神經網路的未來是前向-前向演算法

聊聊計算機視覺入門

FRNet:上下文感知的特徵強化模組

DAMO-YOLO | 超越所有YOLO,兼顧模型速度與精度

《醫學影象分割》綜述,詳述六大類100多個演算法

如何高效實現矩陣乘?萬文長字帶你從CUDA初學者的角度入門

近似乘法對卷積神經網路的影響

BT-Unet:醫學影象分割的自監督學習框架

語義分割該如何走下去?

輕量級模型設計與部署總結

從CVPR22出發,聊聊CAM是如何啟用我們文章的熱度!

入門必讀系列(十六)經典CNN設計演變的關鍵總結:從VGGNet到EfficientNet

入門必讀系列(十五)神經網路不work的原因總結

入門必讀系列(十四)CV論文常見英語單詞總結

入門必讀系列(十三)高效閱讀論文的方法

入門必讀系列(十二)池化各要點與各方法總結

TensorRT教程(三)TensorRT的安裝教程

TensorRT教程(一)初次介紹TensorRT

TensorRT教程(二)TensorRT進階介紹