如何使用 Google的AutoAugment 改進圖像分類器
本文為 AI 研習社編譯的技術博客,原標題 :
How to improve your image classifier with Google』s AutoAugment
作者 |Philip Popien
翻譯 | 敬愛的勇哥 編輯 | 王立魚
https://towardsdatascience.com/how-to-improve-your-image-classifier-with-googles-autoaugment-77643f0be0c9
通過使用優化的數據增強方法,在CIFAR-10、CIFAR-100、SVHN和ImageNet上得到了目前最好的結果。您可以從這裡找到和使用它們。
源自:https://arxiv.org/abs/1805.09501v1
AutoML——使用機器學習來改進機器學習設計(如體系結構或優化器)的想法——已經來到了數據增強的領域。本文將解釋什麼是數據增強,谷歌AutoAugment如何搜索最佳增強策略,以及如何將這些策略應用到您自己的圖像分類問題。
數據增強(Data Augmentation)
數據增強意味著在訓練機器學習模型時,對輸入數據隨機的應用各種變換。這種人為地擴大訓練數據,可以生成更多可能的輸入數據。它還有助於防止過度擬合,因為網路幾乎從來不會看到完全相同的兩次輸入然後僅僅記住它們。典型的圖像數據增強技術包括從輸入圖像中隨機裁剪部分,水平翻轉,應用仿射變換,如平移、旋轉或剪切等。
事實上,正如 AutoAugment 作者所指出的,近年來在ImageNet挑戰賽上,人們為尋找更好的網路結構投入了大量的精力,但是數據增強技術,基本上與Krizhevsky等人在2012年為AlexNet設計的方法相同,或者只有一些微小的變化。
現狀
選擇使用哪些數據增強的通用做法,是首先提出適合對應數據集的不同假設,然後進行試驗。你可以從隨機剪切、隨機調整大小或者水平翻轉開始,因為它們幾乎總是有效的,並且還可以嘗試諸如小尺度的旋轉等。由於重複訓練帶來的驗證集性能的隨機波動,很難確定這些增加的旋轉是否提高了模型性能,因為您可以從兩次不同的訓練中獲得隨機的改進,而這些改進並不是因為使用了數據增強。
通常來說,由於我們實驗的高度不確定性,並且也沒有時間或資源來嚴格測試所有的可能組合,所以我們放棄了搜索最好的方法,或者堅持使用某些固定的增強策略,而不知道它們是否有很大的貢獻。但是,如果有一種可以遷移有用數據的增強技術,就像我們在遷移學習中從預先訓練的模型中遷移參數一樣,那會怎樣呢?
從數據中學習增強策略
AutoAugment的思想是在強化學習(RL)的幫助下學習給定數據集的最佳增強策略。由於在圖片上應用和組合轉換的方法非常多,所以它們對可選擇的方法增加了一些限制。一個主要策略由5個子策略組成,每個子策略依次應用2個圖像操作,每個圖像操作都有兩個參數:應用它的概率和操作的幅值(70%的概率執行旋轉30度的操作)
這種策略在訓練時是如何應用在圖片上的呢?對於我們當前批次的每張圖片,首先隨機均勻地選擇一個子策略,然後應用該子策略。讓我們來看一個包含5個子策略的示例,這些子策略應用於SVHN數據集中的圖片:
源自:https://arxiv.org/abs/1805.09501v1
子策略1在x的方向上,以90%的概率執行力度為7的剪裁。然後,有20%的概率,對圖像的顏色進行翻轉。子策略4以90%的概率對圖像進行顏色反轉,然後在10次中有6次進行顏色直方圖均衡化。操作的次數是固定的,但是由於子策略的隨機性和操作存在的概率,對於單個圖像也可能有很多的增強結果。
讓我們看看AutoAugment RL模型的搜索空間。他們考慮了16種操作:14種來自Python圖像庫PIL,比如旋轉、顏色反轉和一些不太知名的操作,比如色調分離(減少像素位)和過度曝光(將顏色反轉到某個閾值以上),再加上裁剪和採樣(類似於Mixup)這些數據增強領域的新方法。增加11個離散概率值(0.0,0.1,…,1)和從0到9共10個等間距的幅值,這相當於對某一個子策略有(16 * 11 * 10)2種可能性,如果同時有五個子策略,則共有(16 * 11 * 10)1?≈2.9 * 1032種可能 。需要強化學習來幫忙了!
如何訓練AutoAugment ?
AutoAugment像NASNet一樣訓練——一個源自Google的用於搜索最優圖像分類模型結構的增強學習方法。它的訓練方法如下:我們有一個控制器,它決定當前哪個增強策略看起來最好,並通過在特定數據集的一個子集上運行子實驗來測試該策略的泛化能力。在子實驗完成後,採用策略梯度法(Proximal policy Optimization algorithm, PPO),以驗證集的準確度作為更新信號對控制器進行更新。解釋PPO超出了本文的範圍,但是我們可以更詳細地看看控制器和子模型實驗。
控制器(controller)
控制器以Softmax輸出要應用於哪個操作決策。然後,該決策作為輸入傳遞到控制器的下一步,這是因為控制器是一個RNN(對於NASNet,使用了一個包含100個隱藏單元的LSTM)。然後控制器決定應用哪個幅值的操作。第三步是選擇概率。因此,控制器擁有所有其他操作的上下文、早期的概率和幅值,以便做出最佳的下一個選擇。(這是一個說明性的例子,因為這篇論文目前並沒有告訴我們選擇操作、大小和概率的順序)。
控制器模型架構 源自:https://arxiv.org/abs/1707.07012
總共有30個softmax預測值,因為有5個子策略,每個子策略需要在兩個操作、大小和概率(5 * 2 * 3 = 30)中做出兩個選擇。
子模型(child model)
我們如何告訴控制器哪些策略選擇得好,哪些沒有真正提高性能(例如將亮度設為零)?為此,我們使用當前增強策略在子神經網路上進行泛化實驗。實驗結束後,對RNN控制器的權值進行更新,以驗證集的準確度作為更新信號。當最後將整體最佳的5個策略(每個策略包含5個子策略)合併到最終策略(現在包含25個子策略)中時,共將執行15,000次迭代。最後的這個策略是用於該數據集所有數據的策略。
實驗結果
正如副標題已經給出的那樣,AutoAugment提升了CIFAR-10、CIFAR-100、SVHN、ImageNet等數據集上的最優結果。此外,還有一些特別有趣的細節:
CIFAR-10和ImageNet數據集上的最佳策略主要是基於顏色的轉換。對於SVHN數據集,與CIFAR-10相比,AutoAugment選擇了完全不同的轉換:剪切圖像和反轉顏色,這對於門牌號是很有意義的。
CIFAR-10測試集上的錯誤率,越低越好,
源自:https://arxiv.org/abs/1805.09501v1
ImageNet驗證集上Top-1/Top-5的錯誤率,越低越好,
源自:https://arxiv.org/abs/1805.09501v1
在數據很少的情況下,使用autoaugmented的效果會更好。這是數據增強技術的預期效果。
在CIFAR-10上發現的最佳增強策略可以將CIFAR-100的錯誤率從12.19%提高到10.67%。
CIFAR-100測試集的錯誤率,
源自:https://arxiv.org/abs/1805.09501v1
將ImageNet上的最終策略應用在5個不同的較難的數據集,可以顯著提高最終的準確度。這是通過數據增強而不是權值的遷移學習得到的結果。這些結果是從零開始訓練Inception v4,而不是從ImageNet微調權重時得到的。
FGVC測試集上Top-1錯誤率(%)。Inception v4是從零開始訓練,沒有應用最佳ImageNet增強策略。源自:https://arxiv.org/abs/1805.09501v1
兩個遷移學習
如果我們想要解決圖像分類問題,通常使用來自ImageNet預訓練的權重初始化模型,然後對這些權重進行微調。我們剛剛看到,使用AutoAugment的最佳ImageNet策略,同時從零開始訓練,也有類似的正效果。如果我們同時使用這兩種方法:在使用ImageNet AutoAugment 策略時微調ImageNet的權重?這些優化的效果會疊加起來,為我們解決新的圖像分類問題提供新的最佳方法嗎?
為了回答這個問題,我使用了相同的5個FGVC數據集(Oxford 102 Flowers, Caltech-101, Oxford- iiit Pets, FGVC Aircraft和Stanford Cars),對Inception v4進行微調,使用或不使用來自AutoAugment的ImageNet策略。
實驗設置:
在GPU上以batch size為32訓練一個Inception v4網路,SGD的momentum設為0.9,學習率設為0.01。
如果驗證集的準確度在5個epoch內沒有增加,則學習率減半。如果驗證集上的準確度在3*5=15個周期內沒有提高,就停止訓練。
使用這個repo中預訓練的ImageNet權值,只有最後的輸出層被替換來表示數據集的不同類。從一開始,所有層都是可訓練的。
如AutoAugment論文中所寫的那樣,輸入圖像的尺寸為448x448。
兩種微調場景都使用隨機水平翻轉和隨機大小裁剪作為基礎數據增強。選擇隨機調整大小的最小剪切百分比,基於小的ResNet18驗證集的效果而定。
ImageNet 的AutoAugment策略是在隨機裁剪大小後施加。不過實驗表明,在剪切前還是剪切後施加都無關緊要。
選擇這些超參數後,最終的模型在訓練集和驗證集的組合上進行訓練,並在測試集中進行測試。為了保證測試結果的穩定性,採用該方法訓練了5個模型,並對測試結果進行平均。
對FGVC測試集上5次Top-1錯誤率結果進行平均。Inception v4通過對ImageNet權重進行微調,使用和不使用AutoAugment ImageNet策略。有趣的是,在5個數據集中,只有3個數據集的微調結果比從上面AutoAugment論文中從零開始訓練的結果更好。正如在「Do Better ImageNet Models Transfer Better」中討論的那樣,微調似乎不會在所有情況下都提升模型性能。 https://arxiv.org/abs/1805.08974
將最佳的ImageNet增強策略應用於不同的數據集,可以將5個數據集中的3個的錯誤率平均降低18.7%。在另外兩個數據集上,錯誤率平均增加了5.3%。
這些結果表明,當需要對ImageNet權重進行微調時,應該嘗試額外應用ImageNet AutoAugment策略。通常情況下,基本上都可以額外獲得顯著的改進。
如何將AutoAugment策略應用於您的問題
我在本文附錄中創建了一個包含最佳ImageNet、CIFAR-10和SVHN策略的repo。一些實現細節還不明確,但我正在與作者聯繫,一旦我知道更多細節,我將會在這個repo里及時更新。
將ImageNet策略的隨機子策略通過PIL應用搭配圖像上,可以如下:
要將它應用到PyTorch,您可以這樣做:
結論
AutoML再次展現:對於給定數據集,最好的數據增強操作是可學習的,甚至可以遷移到類似的數據集中。這只是許多可能的自動優化數據增強方法中的一個。提高學習此類策略的效率是另一種令人興奮的方法,目的是使任何人都能夠使用這些技術(無需使用GPU伺服器群)。ENAS表明這是可行的。
感謝Avinash C Mishra和Tom Voltz。
※搜狗搜索 「AIS 2019」 論文研討會回放觀看&嘉賓 PPT 打包下載
TAG:AI研習社 |