如何使用 Google 的 AutoAugment 改進圖像分類器

2021-01-10 雷鋒網

通過使用優化的數據增強方法,在CIFAR-10、CIFAR-100、SVHN和ImageNet上得到了目前最好的結果。您可以從這裡找到和使用它們。

在ImageNet上得到的最好的增強效果,源自:https://arxiv.org/abs/1805.09501v1

AutoML——使用機器學習來改進機器學習設計(如體系結構或優化器)的想法——已經來到了數據增強的領域。本文將解釋什麼是數據增強,谷歌AutoAugment如何搜索最佳增強策略,以及如何將這些策略應用到您自己的圖像分類問題。

數據增強(Data Augmentation)

數據增強意味著在訓練機器學習模型時,對輸入數據隨機的應用各種變換。這種人為地擴大訓練數據,可以生成更多可能的輸入數據。它還有助於防止過度擬合,因為網絡幾乎從來不會看到完全相同的兩次輸入然後僅僅記住它們。典型的圖像數據增強技術包括從輸入圖像中隨機裁剪部分,水平翻轉,應用仿射變換,如平移、旋轉或剪切等。

源自:https://github.com/aleju/imgaug

事實上,正如 AutoAugment 作者所指出的,近年來在ImageNet挑戰賽上,人們為尋找更好的網絡結構投入了大量的精力,但是數據增強技術,基本上與Krizhevsky等人在2012年為AlexNet設計的方法相同,或者只有一些微小的變化。

現狀

選擇使用哪些數據增強的通用做法,是首先提出適合對應數據集的不同假設,然後進行試驗。你可以從隨機剪切、隨機調整大小或者水平翻轉開始,因為它們幾乎總是有效的,並且還可以嘗試諸如小尺度的旋轉等。由於重複訓練帶來的驗證集性能的隨機波動,很難確定這些增加的旋轉是否提高了模型性能,因為您可以從兩次不同的訓練中獲得隨機的改進,而這些改進並不是因為使用了數據增強。

通常來說,由於我們實驗的高度不確定性,並且也沒有時間或資源來嚴格測試所有的可能組合,所以我們放棄了搜索最好的方法,或者堅持使用某些固定的增強策略,而不知道它們是否有很大的貢獻。但是,如果有一種可以遷移有用數據的增強技術,就像我們在遷移學習中從預先訓練的模型中遷移參數一樣,那會怎樣呢?

從數據中學習增強策略

AutoAugment的思想是在強化學習(RL)的幫助下學習給定數據集的最佳增強策略。由於在圖片上應用和組合轉換的方法非常多,所以它們對可選擇的方法增加了一些限制。一個主要策略由5個子策略組成,每個子策略依次應用2個圖像操作,每個圖像操作都有兩個參數:應用它的概率和操作的幅值(70%的概率執行旋轉30度的操作)

這種策略在訓練時是如何應用在圖片上的呢?對於我們當前批次的每張圖片,首先隨機均勻地選擇一個子策略,然後應用該子策略。讓我們來看一個包含5個子策略的示例,這些子策略應用於SVHN數據集中的圖片:

對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)種可能性,如果同時有五個子策略,則共有(16 * 11 * 10)≈2.9 * 10種可能 。需要強化學習來幫忙了!

如何訓練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表明這是可行的。

相關焦點

  • 面對未知分類的圖像,我要如何拯救我的分類器
    那麼我們應該如何改進分類器、如何克服這個問題呢?老實說,這真的是領域內的一個老大難問題,沒人能給出完美的答案。Jetpac(現被谷歌收購) CTO、蘋果畢業生、TensorFlow 團隊成員 Pete Warden 在個人博客中寫下了他的一些個人思考。雷鋒網 AI 科技評論編譯如下。
  • 如何用 Python 腳本批量下載 Google 圖像?
    問題《如何用Python和深度神經網絡識別圖像?》一文中,我給你展示了如何用深度學習,教電腦區分機器人瓦力和哆啦a夢。很快就有用戶在後臺留言,問:老師,我想自己訓練一個圖片分類器,到哪裡去批量下載帶標註的訓練圖像呢?說說我寫教程的時候,是如何找圖片的吧。最大的圖片庫,當然就是 Google 了。
  • CS231N 01: 圖像分類器
    學習(Learning):任務是使用訓練集來學習每一類的樣子,這一步稱為訓練一個分類器,或者學習一個模型。評估(Evaluation):通過要求分類器預測一組新的、它從未見過的圖像的標籤來評估分類器的質量。然後,將這些圖像的真實標籤與分類器預測的標籤進行比較。
  • 手把手教你用PyTorch實現圖像分類器(第一部分)
    最後一個項目是用PyTorch創建一個102種不同類型的花的圖像分類器。在做這個final project的時候,很多同學都遇到了類似的問題和挑戰。當我接近完成的時候,我決定與大家分享一些在未來對他人有益的建議和見解。通過3篇短文,介紹如何實現圖像分類器的概念基礎——這是一種能夠理解圖像內容的算法。
  • 如何用PyTorch訓練圖像分類器
    PyTorch並想學習如何進行基本的圖像分類,那麼你可以參考本教程。它將介紹如何組織訓練數據,使用預訓練神經網絡訓練模型,然後預測其他圖像。為此,我將使用由Google地圖中的地圖圖塊組成的數據集,並根據它們包含的地形特徵對它們進行分類。我會在另一篇文章中介紹如何使用它(簡而言之:為了識別無人機起飛或降落的安全區域)。但是現在,我只想使用一些訓練數據來對這些地圖圖塊進行分類。下面的代碼片段來自Jupyter Notebook。
  • Auto Machine Learning 自動化機器學習筆記
    在機器學習中的分類模型中:常規 ML framework 如下圖灰色部分:導入數據-數據清洗-特徵工程-分類器-輸出預測值auto部分如下圖綠色方框:在ML framework 左邊新增 meta-learning,在右邊新增 build-ensemble,對於調超參數,用的是貝葉斯優化
  • 【2019年第六期文章推薦】Softmax分類器深度學習圖像分類方法應用綜述
    2 Softmax在深度學習圖像分類中的應用自Softmax分類器問世以來,其在圖像分類領域的應用越來越廣泛,基於深度學習Softmax的圖像分類算法採用神經網絡模型與Softmax分類器級聯的形式實現圖像分類[17]。
  • Google I/O 2019 上的 Firebase 新功能速遞
    設備端 Translation API 讓您能夠使用支持 Google 翻譯的相同離線模型,將應用中的文本以動態方式快速翻譯成 58 種語言。Object Detection & Tracking API 使您的應用能夠實時定位並跟蹤相機實時畫面中最突出的對象。藉助 AutoML Vision Edge,您可以根據自身需要,輕鬆創建自定義圖像分類模型。
  • 港中文提出:GridMask 數據增廣新網絡(可提高分類/檢測/分割性能)
    、檢測、分割三個問題上都做了實驗,提升效果明顯,好於當前SOTA 的autoaugment。本文提出的GridMask方法屬於信息刪除的方法,這種方法的實現方式是隨機在圖像上丟棄一塊區域,作用相當於是在網絡上增加一個正則項,避免網絡過擬合,相比較改變網絡結構來說,這種方法只需要在數據輸入的時候進行增廣,簡單便捷。2.Gridmask效果提升2.1 分類實驗提升
  • NeurIPS 2020 | AWS Auto-Aug: 利用權重共享思想的新型自動數據...
    該方法在多個圖像分類數據集上取得了優秀的表現,尤其在CIFAR-10數據集上刷新了當時的SOTA性能。這是一個典型的雙層優化問題(ω表示分類器模型的權重,θ表示自動數據增強策略的權重):在後期我們則會讓分類器模型繼承早期的共享權重,進行fine-tune和策略搜索:
  • 深度學習基礎(九):CNN使用TensorFlow在開發圖像分類器
    卷積神經網絡的起源卷積神經網絡如何工作?卷積神經網絡示例圖像的卷積ReLu層池化層堆疊層使用卷積神經網絡預測圖像用例:CIFAR10圖像分類器  訓練一個網絡參考文獻計算機如何讀取圖像?考慮一下紐約天際線的圖像,乍一看,您會看到很多建築物和色彩。那麼計算機如何處理該圖像?紐約天際線圖像被分解成3個顏色通道,其是紅,綠和藍。這些顏色通道中的每一個都映射到圖像的像素。
  • NeurIPS 2020 | AWS Auto-Aug: 利用權重共享思想的新型自動數據增強方法解讀
    該方法在多個圖像分類數據集上取得了優秀的表現,尤其在CIFAR-10數據集上刷新了當時的SOTA性能。論文名稱:Improving Auto-Augment via Augmentation-Wise Weight Sharing來源:商湯泰坦公開課數據增強是深度學習中被廣泛運用的一項正則化技術,其被用於提升數據分布的多樣性。
  • 谷歌大腦開源項目 AutoML-Zero:用數學運算能探索出機器學習算法
    打個比方,我們可以這樣來描述 AutoML:如果一個人要建造一座房子,那麼他從零開始動手,要比只使用預製板建造房子有更多的靈活性或改進的潛力。然而,對房屋的設計卻是極為艱難的一個步驟,因為與預製的整個房間的組合相比,將磚瓦和砂漿結合起來的可能方法要多得多。
  • KNN學習之圖像分類與KNN原理
    圖像分類問題那麼KNN算法如何應用到圖像分類問題中,其實問題也就是如何評價一張待分類的圖像A與P個訓練樣本圖像中間的距離呢? 其中關鍵的問題就是圖像的特徵選擇成什麼,把問題往更大的方面考慮下,對於圖像而言,(傳統)機器學習與深度學習的一個很大區別是後者的自動特徵抽取,所以深度學習的問世在一定程度上改變了人們對圖像處理問題的側重點,從特徵描述到網絡結構。
  • 在Xcode裡創建圖像分類器的超簡易教程
    圖源:unsplash想創建圖像分類器又嫌麻煩?無需一行代碼,本文教你在Xcode裡創建圖像分類器。對於本文實例,應選擇第一項:Image Classifier(圖像分類器)。接下來就是給項目命名了!這一步無需多說。給項目命名後,會出現如下頁面:有一個選項為同時添加訓練數據和測試數據。此外,還可以添加額外的參數,比如圖像增廣後需要的迭代次數(這個模型需要自我重複多少次?)。
  • 手把手教你使用圖像處理利器OpenCV
    因此,我們需要首先分析它,執行必要的預處理,然後使用它——特別推薦《數據準備和特徵工程》,此書即為這方面最佳讀物。例如,我們正在嘗試構建一個關於貓的分類器。我們的程序會把一個圖像作為輸入,然後告訴我們這個圖像是否包含一隻貓。構建這個分類器的第一步是收集數百張含有貓的圖片。
  • 獨家 | kaggle季軍新手筆記:利用fast.ai對油棕人工林圖像進行快速分類(附代碼)
    訓練模型過程中使用到的數據標籤處理圖像分類數據集和表格數據集的主要區別在於標籤的存儲方式,這裡的標籤指的是圖像中的內容。在這個特定的數據集中,標籤存儲在CSV文件中。這個權重從一個已經訓練好的圖像分類的resnet模型中直接獲得,無須擔心這種方法的細節。
  • 使用ResNet在iOS上進行AI圖像分類
    在這裡,我們將設置您的示例應用程式,設置模型,弄清楚如何處理應用程式中的分類請求,並將轉換後的ResNet模型添加到項目中。介紹深度神經網絡在諸如圖像分類等任務上非常出色。擁有一半像樣的GPU的任何人現在都可以輕鬆獲得十年前耗資數百萬美元的結果以及整個研究團隊。但是,深度神經網絡有一個缺點。
  • 如何優化你的圖像分類模型效果?
    這麼做的主要收益是,由於學習率在每次迭代的開始可以重置,因此學習器能夠跳出局部極小值或鞍點。 他們可以學習生成類似原始數據的數據,而且可以是任何領域——圖像、語音、文本等等。我們使用fastai的Wasserstein GAN的實現來生成更多的訓練數據。 GANs包括訓練兩個神經網絡,一個被稱為生成器,它生成新的數據實例,另一個被稱為判別器,它對它們進行真實性評估,它決定每個數據實例是否屬於實際的訓練數據集。你可以從這個連結查閱更多。