干貨 | 自動數(shù)據(jù)增強:概述和SOTA
點擊左上方藍字關(guān)注我們

作者 | deephub
鏈接 | https://zhuanlan.zhihu.com/p/377196888

自動化搜索概述
到目前為止,大致有兩種方法。“AI 模型方法”試圖搜索大量的增強策略空間,以使用強化學習或 GAN 找到最佳策略。它取得了顯著的成果,Adversarial AutoAugment 實現(xiàn)了當前最先進的性能。我認為這種方法是自動化數(shù)據(jù)增強的未來;然而,它可能(還)不適合個人開發(fā)人員。在其中,我們必須訓練一個完整的 GAN——一個需要棘手的實現(xiàn)和重要計算資源的過程。如果我們唯一的 GPU 能力來自 Kaggle 內(nèi)核和 Colab 筆記本,那就不太好(盡管 Faster AutoAugment 有助于降低計算成本,我相信這種方法最多在幾年內(nèi)會變得更容易使用)。
我想要一個自動搜索過程,我可以放下并停止思考。幸運的是,這就是我們使用其他數(shù)據(jù)增強管道搜索策略“基于隨機性的方法”所得到的結(jié)果,它減少了搜索空間(通過使用更少的參數(shù))和隨機采樣策略。這種方法犧牲了速度的靈活性,體現(xiàn)在 RandAugment 算法中,產(chǎn)生了與 AI 模型方法競爭的性能......就像幾年前一樣。后一種方法進一步發(fā)展,現(xiàn)在優(yōu)于 RandAugment。然而,RandAugment 仍然要快得多,如果你只需要一個“足夠好”的數(shù)據(jù)增強管道——一個易于使用并且仍然比手動和迭代地拼湊在一起更好的管道——它是一個可行的選擇。
還有另一種尚未廣為人知的算法,它介于基于隨機性和 AI 模型方法的兩極之間。它確實使用深度學習模型來選擇最佳轉(zhuǎn)換;然而,該模型并不像一個單獨的 GAN,而是被訓練的模型。該算法比 RandAugment 慢得多,但仍比基于 AI 的最快方法 Faster AutoAugment 快幾倍,同時在性能上匹配 Adversarial AutoAugment,這是性能最好的基于 AI 的方法。
我很想給你這個算法的名字,但它似乎缺乏一個,或者至少是一個好的。論文“On the Generalization Effects of Linear Transformations in Data Augmentation”(2020 年)將該算法稱為“基于不確定性的變換采樣方案”。
代表基于模型不確定性的增強的“MuAugment”怎么樣?讓我們一起去吧。
深入MuAugment
在做MuAugment之前,我們必須了解RandAugment。幸運的是,RandAugment非常簡單。
我們有一個K變換列表(如HorizontalFlip, change亮度)。選擇' K '變換的' N ' (' N ' < ' K ')一致隨機而不替換,每個變換的大小為' M '。將這些“N”數(shù)組轉(zhuǎn)換為合成,并將合成應(yīng)用到傳入圖像。這是RandAugment。下面是一個代碼示例:
import numpy as np
import albumentations as A
# K=3 here
transforms = [A.HorizontalFlip(p=1),
A.Rotate(M*9, p=1),
A.RandomBrightness(M/20, p=1)]
def rand_augment(N, M):
composition = np.random.choice(transforms, N, replacement=False)
return A.Compose(composition)
我說MuAugment是RandAugment和其他ai模型方法的混合。我沒有撒謊。
我們在每個圖像' C '上應(yīng)用RandAugment 不同次數(shù)。使用正在訓練的模型,從每個圖像的' C '增強版本中選擇最有用的' S ' (' S ' < ' C ')版本。只輸入每個圖像的“S”增強版本到模型中進行訓練。我們?nèi)绾未_定哪些增廣是最有用的?我們通過模型向前傳遞每個“C”增廣,損失越高,增廣越有用。這是MuAugment。
為什么高損耗意味著有用的增益?好的,一個小的損失意味著模型已經(jīng)學會了如何很好地預(yù)測這類圖像,所以如果對它進行進一步訓練,模型將只會擬合偶然的情況,可能是虛假的模式-例如過擬合。反之,如果損失較大,則說明模型還沒有掌握圖像類型和目標之間的一般映射關(guān)系,因此我們需要對這類圖像進行更多的訓練。
MuAugment是一種挑選最困難的增強體并進行訓練的方法。RandAugment不能很好地工作,因為它產(chǎn)生簡單和困難的增強,并將兩者都輸入模型。因此,它更容易在容易的增廣上過擬合,而在難的增廣上欠擬合。當像MuAugment這樣的算法保證對難的增廣進行額外擬合而跳過簡單的增廣時,該模型學習更一般化的模式。
你可能已經(jīng)想到了MuAugment的一個問題。有時,應(yīng)用在圖像上的變換是如此嚴重,以至于圖像變得非常難以理解,完全失去了它的目標信息。所以我們最終給模型注入純噪聲。然而,當輸入到模型中時,純噪聲會產(chǎn)生很高的損失,所以使用MuAugment可以選擇那些創(chuàng)建時無法識別的圖像。對于這個問題沒有簡單的解決方案,除了選擇適當?shù)某瑓?shù),以減少難以理解的圖像的生成,所以保持合成中變換的數(shù)量“N”小于4,每個變換的大小“M”小于6是一個好的開始。
如果你有時間,試試網(wǎng)格搜索。為了減少搜索空間,只需在[2,4]范圍內(nèi)選取一個值為' N '即可。作為一種啟發(fā)式,更大的模型和數(shù)據(jù)集需要更多的正則化,相應(yīng)地,更大的“M”量級會表現(xiàn)得更好。這是因為更大的模型更容易過擬合,更長的數(shù)據(jù)集有更高的信噪比,這應(yīng)該減少到一個最佳點。所以,在網(wǎng)格搜索中采樣M的值時要記住這一點。
總結(jié)
我們對數(shù)據(jù)增強策略搜索算法的區(qū)系進行了調(diào)查。有些游戲在我們的任務(wù)之上疊加了另一個AI模型。其他的使用更少的參數(shù)和一個隨機樣本的集合變換。前者比后者表現(xiàn)得更準確,但速度要慢得多。進入MuAugment: ai模型和基于隨機性的方法的混合。它從一個變換列表中隨機采樣合成,并且只使用最有用的(即損耗最大的)來訓練數(shù)據(jù)。為了得到最好的結(jié)果,將變換大小的不同值放入網(wǎng)格搜索中。
如果您希望在您的項目中使用MuAugment或RandAugment,請考慮使用MuarAugment。它是一個包,提供了一個簡單的API和為速度而優(yōu)化的實現(xiàn)。
鏈接:https://github.com/adam-mehdi/MuarAugment
引用
Cubuk et al. 2019, “RandAugment: Practical automated data augmentation with a reduced search space”.
Zhang et al. 2020, “Automating the Art of Data Augmentation”.
Wu et al. 2020, “On the Generalization Effects of Linear Transformations in Data Augmentation”.
Zhang et al. 2019, “Adversarial AutoAugment”.
Hataya et al. 2019, “Faster AutoAugment: Learning Augmentation Strategies using Backpropagation”.
END
整理不易,點贊三連↓
