沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

PaperWeekly發表於2020-09-03
當沒有足夠多的資料量時該怎麼辦?學者們針對這一問題已經研發看各種巧妙的解決方案,以避在深度學習模型中資料少的問題。近來,在做活體檢測和打 Kaggle 比賽過程中查詢了很多相關文獻和資料,現整理後與大家分享。一般有以下幾種方法解決的資料量少的問題:

Transfer learning:其的工作原理是在大型資料集(如 ImageNet)上訓練網路,然後將這些權重用作新的分類任務中的初始權重。通常,僅複製卷積層中的權重,而不復制包括完全連線的層的整個網路。這是非常有效的,因為許多影像資料集共享低階空間特徵,而大資料可更好地學習這些特徵。

Self/Semi Supervised learning:傳統上,要麼選擇有監督的路線,然後只對帶有標籤的資料進行學習;要麼將選擇無監督的路徑並丟棄標籤,以進行 Self Supervised learning,而 Semi Supervised learning 這類方法就是訓練模型的時候,僅需要使用少量標籤和大量未標籤的資料。

Few/One-shot and Zero-shot learning:Few/One-Shot Learning 目的在於從每個類別中的少量樣本/一個樣本中學習有關物件的特徵,而 Zero-Shot Learning 的核心目標在於用訓練好的模型對訓練集中沒有出現過的類別進行相應的預測。近些年 Few/One-Shot Learning 和 Zero-Shot Learning 技術發展迅速,模型的效能得到了大幅度的提升。

Regularization technique:如 dropout、batch normalization 等等正則化方法也能夠緩解資料量過少帶來的過擬合現象。

Data Augmentation:資料增強是根據已有的資料生成新的資料。與上述技術相反,資料增強從問題的根源(訓練資料集)著手解決問題。使用資料增強方法擴充套件資料集不僅有助於利用有限的資料,還可以增加訓練集的多樣性,減少過度擬合併提高模型的泛化能力。

在本文中,我們將重點關注 Data Augmentation,因為計算機視覺是當前研究領域中最活躍的領域之一,所以,本文更聚焦於影像增強,但是其中很多技術技術都可以應用於其他領域。我們把影像的資料增強分為以下 4 類:
  • Basic Image

    • Geometric Transformations

    • Color Space Transformations

    • RandomRrase/GridMask

    • Mixup/Cutmix

    • Mosaic

  • Feature space augmentation

    • MoEx

  • GAN-based Data Augmentation

  • NAS

    • AutoAugment

    • Fast AutoAugment

    • DADA

  • Other

    • UDA

一、基本影像處理的擴增

常見的就是對影像進行幾何變換,影像翻轉,裁剪,旋轉和平移等等,還可以使用對比度,銳化,白平衡,色彩抖動,隨機色彩處理和許多其他技術來更改影像的色彩空間。

此外,還可以使用遮擋類的方法,如 CutOut、RandomRrase、GridMask。Cutmix 就是將一部分割槽域 cut 掉但不填充 0 畫素而是隨機填充訓練集中的其他資料的區域畫素值,分類結果按一定的比例分配,CutMix 的操作使得模型能夠從一幅影像上的區域性檢視上識別出兩個目標,提高訓練的效率。

而 Mosaic 資料增強方法是 YOLOV4 論文中提出來的,主要思想是將四張圖片進行隨機裁剪,再拼接到一張圖上作為訓練資料,這樣做的好處是豐富了圖片的背景。

基礎的圖形擴增方法在很多深度學習框架中都有實現,例如:torchvision。還有一些更加全面豐富的資料擴增庫,如 albumentations 等等。

二、特徵空間擴增

沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
論文標題:On Feature Normalization and Data Augmentation(MoEx)
論文連結:https://arxiv.org/abs/2002.11102
程式碼連結:https://github.com/Boyiliee/MoEx

在上面的示例中,我們在影像空間上進行變換,此外,還可以在特徵空間中變換。藉助神經網路,我們可以非常有效地以低維或高維的形式表示影像,這樣,中間的潛在張量包含有關資料集的所有資訊,並且可以提取出來做各種事情,包括資料增強。MoEx 這篇文章作者在特徵空間進行增強的嘗試。具體做法如下圖所示:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
1. 對 hA 做 normalization 的到 hˆA,然後計算 hB 的 µB,σB

2. 接著對 hˆA 反歸一化如下:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
3. 使用新的損失函式計算 loss:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

MoEx 的實驗包括:ImageNet、Speech Commands、IWSLT 2014、ModelNet40 等。可以說涵蓋了影像、NLP、語音三大領域,可見其優點很明顯,由於是在特徵空間做資料增強,所以不受輸入資料型別的限制,對於影像、音訊以及文字等資料具有通用性。

三、GAN-based Data Augmentation

生成建模是當前最火的技術之一,生成模型學習資料的分佈,而不是資料之間的邊界,因此,可以生成全新的影像。

GAN 由兩個網路組成:生成器和鑑別器。生成器的工作是生成僅具有噪聲作為輸入的偽造資料。鑑別器接收真實影像和偽影像(由發生器產生)作為輸入,並學會識別影像是偽影像還是真實影像。

隨著兩個網路相互競爭,在對抗訓練的過程中,生成器在生成影像方面變得越來越好,因為其最終目標是欺騙鑑別器,而鑑別器在區分偽造品和真實影像方面變得越來越好,因為它的目標是不被欺騙,最終生成器生成了令人難以置信的真實偽資料。

需要說明的是,GAN 生成的資料是要因地制宜。據說在這篇文章右下角 double click 的同學會有奇效(哈哈)。
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
論文標題:Emotion classification with data augmentation using generative adversarial networks.
論文連結:https://arxiv.org/abs/1711.00648

沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

本文在情緒識別驗證了 GAN 做資料擴增的有效性。情緒識別資料集 FER2013 包含了7種不同的情緒:憤怒,厭惡,恐懼,快樂,悲傷,驚奇和中立。,這些類是不平衡的。而本文使用 CycleGAN 將其他幾類的影像轉換為少數類的樣本,使得模型準確性提高了 5-10%。
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

論文標題:Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in vitro

論文連結:https://arxiv.org/abs/1701.07717

程式碼連結:https://github.com/layumi/Person-reID_GAN

沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
這篇文章想法在當時情況下還是比較好的。沒有 ReID 的 GAN,那就用原始資料訓練一個 GAN,然後生成圖片,沒有標籤就用 ReID 網路生成 pseudo label。這樣一來,就從監督學習轉化為了半監督學習

四、NAS-based Data Augmentation

資料增強方法在各個領域都得到了廣泛應用,不過即使在一些特定的資料集已經找到了適合的資料增強方法,但這些方法通常也不能有效地轉移到其他資料集上去。

例如,由於不同資料集中存在不同的對稱性要求,在 CIFAR-10 資料集上訓練階段水平翻轉影像是的有效資料增強方法,但對 MNIST 卻不適用。因而, 讓網路自主的尋找資料增強方法逐漸成為一種無論是學術或者工程上都不可或缺的需求。

Google DeepMind 率先提出了利用 NAS 的方法 AutoAugment,在資料增強的策略搜尋空間中利用資料集上評定特定策略的質量,自動搜尋出合適的資料增強的策略。相關的文獻還有:Fast AutoAugment 以 及 DADA 等等。

沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

論文標題:AutoAugment: Searching for best Augmentation policies Directly on the Dataset of Interest

論文連結:https://arxiv.org/abs/1805.09501

程式碼連結:https://github.com/tensorflow/models/tree/master/research/autoaugment


AutoAugment 是 Google 提出的自動選擇最優資料增強方案的研究,它的基本思路是使用強化學習從資料本身尋找最佳影像變換策略,對於不同的任務學習不同的增強方法。流程如下:

AutoAugment 的控制器決定當前哪個增強策略看起來最好,並透過在特定資料集的一個子集上執行子實驗來測試該策略的泛化能力。在子實驗完成後,採用策略梯度法 (Proximal policy Optimization algorithm, PPO),以驗證集的準確度作為更新訊號對控制器進行更新。

總的來說,控制器擁有 30 個 softmax 來分別預測 5 個子策略的決策,每個子策略又具有 2 個操作,而每個操作又需要操作型別,幅度和機率。

而資料增強操作的搜尋空間一共有 16 個:ShearX/Y,TranslateX/Y,Rotate,AutoContrast,Invert,Equalize,Solarize,Posterize,Contrast,Color,Brightness,Sharpness,Cutout,Sample Pairing。

在實驗中發現 AutoAugment 學習到的已有資料增強的組合策略,對於門牌數字識別等任務,研究表明剪下和平移等幾何變換能夠獲得最佳效果。而對於 ImageNet 中的影像分類任務,AutoAugment 學習到了不使用剪下,也不完全反轉顏色,因為這些變換會導致影像失真。AutoAugment 學習到的是側重於微調顏色和色相分佈。

AutoAugment 的方法在很多資料集上達到 state-of-the-art 的水平。在 CIFAR-10 上,實現了僅 1.48% 的錯誤率,比之前 state-of-the-art 的方法又提升了 0.65%;

在 SVHN 上,將 state-of-the-art 的錯誤率從 1.30% 提高到 1.02%;在一些 reduced 資料集上,在不使用任何未標記資料的情況下實現了與半監督方法相當的效能;在 ImageNet 上,實現了前所未有的 83.54% 的精度。

五、Other

在上面我們介紹了一些對有監督的資料進行資料增強的方法,但是對有監督的資料進行資料增強大多被認為是“蛋糕上的櫻桃”,因為雖然它提供了穩定但是有限的效能提升,下面,將介紹一種半監督技術中的資料增強方法。

沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

論文標題:Unsupervised Data Augmentation for Consistency Training(UDA)

論文連結:https://arxiv.org/abs/1904.12848

程式碼連結:https://github.com/google-research/uda

UDA 訓練過程如下圖所示:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

1. 最小化未標記資料和增強未標記資料上預測分佈之間的 KL 差異:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結

其中,x 是原始未標記資料的輸入,x^ 是對未標籤資料進行增強(如:影像上進行裁剪、旋轉,文字進行反翻譯)後的資料。

2. 為了同時使用有標記的資料和未標記的資料,新增了標記資料的 Supervised Cross-entropy Loss 和(1)中定義的一致性/平滑性目標 Unsupervised Consistency Loss,權重因子 λ 為我們的訓練目標,最終目標的一致性損失函式定義如下:
沒有足夠多的資料怎麼辦?計算機視覺資料增強方法總結
此外,UDA 為了解決未標記的資料和標記資料不平衡導致資料過擬合的問題,提出了新的訓練技巧 Training Signal Annealing 簡稱 TSA,TSA 的思路是隨著模型被訓練到越來越多的未標記資料上,逐漸減少標記資料的訓練訊號,而不會過度擬合它們。實驗結果方面,UDA 在很大程度上優於現有的半監督學習方法。

六、總結

眾所周知,深度學習的模型訓練依賴大量的資料。如果沒有訓練資料,那麼即使是優秀的演算法也基本上很難發揮作用。本文總結了幾種方法常見的解決的資料量少的問題的方法,並對 Data augment 進行了詳細的總結,希望對您有所幫助。

相關文章