自动搜索数据增强方法分享——fast-autoaugment
前言
簡短的介紹下分享fast-autoaugment的原因
毫無疑問數(shù)據(jù)增強對于訓(xùn)練CNN非常有效,大家也在不斷發(fā)明新的數(shù)據(jù)增強方法
拿到一份數(shù)據(jù)集,我們憑借之前的經(jīng)驗組合不同的增強方法形成一個數(shù)據(jù)增強策略,通??梢缘玫揭粋€還不錯的baseline。但如何更進一步,讓模型再提升1-2個百分點就很困難了。通常我是進行一些數(shù)據(jù)增強效果的可視化,選定一個潛在的優(yōu)化方向(比如旋轉(zhuǎn)的幅度是否過大了),然后調(diào)整對應(yīng)的超參數(shù)進行一組對比實驗。
當問題發(fā)展到這個階段時,人工優(yōu)化的成本已經(jīng)很高而且很可能收效甚微了。針對這個問題,開始有人嘗試借助AutoML這個新技術(shù)來進行數(shù)據(jù)增強策略的篩選。
這里面最有代表性的應(yīng)該算是2019年google提出的AutoAugment,該方法借助強化學(xué)習(xí)來自動的在給定的數(shù)據(jù)集上探索最優(yōu)的數(shù)據(jù)增強策略。AutoAugment在包括ImageNet,CIFAR-10等在內(nèi)的多個數(shù)據(jù)集上,與人工設(shè)計的數(shù)據(jù)增強策略所訓(xùn)練出的baseline相比,都取得了顯著提升。
但AutoAugment即使是在CIFAR-10這樣的小數(shù)據(jù)集上,探索出一個數(shù)據(jù)增強策略,都要花費5000個GPU hours,這顯然是個致命的缺點。
截至到今天,我發(fā)現(xiàn)了兩篇優(yōu)秀的paper,他們都在借鑒AutoAugment的基礎(chǔ)上,實現(xiàn)了大幅的提速,分別是:
PBA: Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules
Fast AutoAugment
Fast AutoAugment 提出了一種方法,避免了調(diào)整不同數(shù)據(jù)增強參數(shù)不停的重復(fù)訓(xùn)練網(wǎng)絡(luò)這個超級消耗GPU的步驟,從而獲得了100-1000倍的速度提升,并且能夠和AutoAugment取得近似的效果,這也是我打算學(xué)習(xí)和分享這篇paper的原因。
至于PBA,由于這篇paper我還沒看,所以暫時不討論,當然PBA和Fast AutoAugment哪個效果好,也是之后值得討論的問題。
em… 前兩天google又出來一個RandAugment,一個個跟進
現(xiàn)有數(shù)據(jù)增強方法總結(jié)
ShearX, ShearY
TranslateX, TranslateY
Rotate
AutoContrast
調(diào)整圖像對比度。計算一個輸入圖像的直方圖,從這個直方圖中去除最亮和最暗的部分,然后重新映射圖像,以便保留的最暗像素變?yōu)楹谏?#xff0c;即0,最亮的變?yōu)榘咨?#xff0c;即255。
Invert
將輸入圖像轉(zhuǎn)換為反色圖像。
Equalize
直方圖均衡化,產(chǎn)生像素值均勻分布的圖像
Solarize
反轉(zhuǎn)在閾值threshold范圍內(nèi)的像素點(>threshold的像素點取反)
例如一個像素的取值為124=01111100
如果threshold=100,返回的結(jié)果為131=10000011
如果threshold=200,返回結(jié)果為124 (124<200)
Posterize
色調(diào)分離,將每個顏色通道上像素值對應(yīng)變量的最低的(8-x)個比特位置0,x的取值范圍為[0,8]
Contrast
調(diào)整圖片的對比度
ImageEnhance.Contrast(img).enhance(v)
v = 1 保持原始圖像, v < 1 像素值間差距變小, v > 1 增強對比度,像素值間差異變大
Color
調(diào)整圖片的飽和度
ImageEnhance.Color(img).enhance(v)
v = 1 保持原始圖像, v < 1 飽和度減小趨于灰度圖, v > 1 飽和度增大色情更飽滿
Brightness
調(diào)整圖片的亮度
ImageEnhance.Brightness(img).enhance(v)
v = 1 保持原始圖像, v < 1 亮度減小, v > 1 亮度增大
Sharpness
調(diào)整圖片銳度
ImageEnhance.Sharpness(img).enhance(v)
v = 1 保持原始圖像, v < 1 產(chǎn)生模糊圖片, v > 1 產(chǎn)生銳化后的圖片
Cutout
Improved Regularization of Convolutional Neural Networks with Cutout
對訓(xùn)練圖像進行隨機遮擋,該方法激勵神經(jīng)網(wǎng)絡(luò)在決策時能夠更多考慮次要特征,而不是主要依賴于很少的主要特征
Cutout是一種類似于DropOut的正則化方法,被證明對于模型漲點非常有效。
Random erasing
Random erasing其實和cutout非常類似,也是一種模擬物體遮擋情況的數(shù)據(jù)增強方法。區(qū)別在于,cutout每次裁剪掉的區(qū)域大小是固定的,Random erasing替換掉的區(qū)域大小是隨機的, 使用隨機數(shù)替換。
Sample Pairing
Data Augmentation by Pairing Samples for Images Classification
Mixup
mixup: BEYOND EMPIRICAL RISK MINIMIZATION
原理可以簡單概括為隨機抽取兩個樣本進行簡單的隨機加權(quán)求和,同時樣本的標簽也對應(yīng)加權(quán)求和
Bag of Freebies for Training Object Detection Neural Networks中將mixup應(yīng)用在目標檢測算法上,同樣效果也很好。
CutMix
Cutmix: Regularization strategy to train strong classifiers with localizable features
Ricap
Data Augmentation using Random Image Cropping and Patching for Deep CNNs
Fast AutoAugment
搜索空間
將paper中的公式簡化成如下描述,按照最終的實驗設(shè)置:
我們最終要搜索的總的數(shù)據(jù)增強方案,包含若干個策略policies
每個策略包含5個子策略sub-policies
每個子策略包含兩個數(shù)據(jù)增強操作operations
每個operation對應(yīng)了一種數(shù)據(jù)增強方法,有3個需要調(diào)整的參數(shù),使用的具體數(shù)據(jù)增強方法,使用的概率p和使用的強度λ
每個子策略中的operations是串行結(jié)合在一起的。
按照paper介紹,實驗包含16個可選的operations(ShearX, ShearY, TranslateX, TranslateY, Rotate, AutoContrast, Invert,
Equalize, Solarize, Posterize, Contrast, Color, Brightness, Sharpness, Cutout, Sample Pairing),對于最后一個是否使用我目前存疑,因為我看作者給出的代碼把這個方法注釋掉了。
搜索空間與一個策略對應(yīng),因此按照實驗的配置,對應(yīng)了30個特征=(5個sub-policies)* (2個operations)* (每個operation三個參數(shù):使用的數(shù)據(jù)增強方法,p和λ)
策略的搜索算法:Bayesian Optimization
策略的搜索算法使用Bayesian Optimization,即貝葉斯優(yōu)化器采樣出一組參數(shù)(對應(yīng)了一個數(shù)據(jù)增強策略police),然后對這個策略的優(yōu)劣進行評估(后面會介紹如何評估),將評估結(jié)果反饋給貝葉斯優(yōu)化器進行學(xué)習(xí),然后重新采樣,反復(fù)迭代這個過程直到達到停止條件(paper中設(shè)置迭代次數(shù)B=200)。
采集函數(shù)使用的是Expected Improvement (EI),代理函數(shù)使用的是tree-structured Parzen estimator (TPE) algorithm。
貝葉斯優(yōu)化的原理和流程之前已經(jīng)介紹過了,稍有區(qū)別的是,作者將這個數(shù)據(jù)集拆分成了K個子數(shù)據(jù)集(K=5),然后在K個子數(shù)據(jù)集上分別進行上述的貝葉斯優(yōu)化過程,每次貝葉斯優(yōu)化選出最優(yōu)的N次采樣作為候選策略(N=10),在同一個子數(shù)據(jù)集上貝葉斯優(yōu)化重復(fù)T次(T=2)。
因此,整個過程中會產(chǎn)生 100 = K * T * N = 5 * 2 * 10 個候選的策略集合,最終的訓(xùn)練使用全部的數(shù)據(jù)集,并從候選集合中隨機挑選策略進行數(shù)據(jù)增強。
整個搜索框架如下圖所示:
流程圖如下圖所示:
評價方法:Density Matching
評價一個數(shù)據(jù)增強策略好壞的最直接且準確的方法就是用這個策略在訓(xùn)練集上,使用最終要使用的網(wǎng)絡(luò)執(zhí)行完整的訓(xùn)練流程,然后看驗證集的準確率,為了減小隨機誤差通常還要進行重復(fù)實驗取平均。這個過程會非常耗時,通常會使用一個小得多的代理CNN網(wǎng)絡(luò),并縮小訓(xùn)練數(shù)據(jù)集的規(guī)模,來減少搜索策略的耗時,但這也會引入很大的誤差,導(dǎo)致效果不好。
本文的作者從另一個角度來看待數(shù)據(jù)增強方法優(yōu)劣的評估問題。按文中所述:
對于任何給定的訓(xùn)練集Dtrain和驗證集Dvalid,我們的目標是搜索能夠讓未增強的Dtrain與增強后的Dvalid密度匹配的數(shù)據(jù)增強策略來提高泛化能力。但是,直接比較這兩個數(shù)據(jù)集的分布以評估每個候選策略是不切實際的。因此,我們通過在Dtrain上不使用數(shù)據(jù)增強時訓(xùn)練的模型,并在加上數(shù)據(jù)增強后的Dvalid上進行預(yù)測,使用預(yù)測結(jié)果的loss或者accuracy來評估一個數(shù)據(jù)集遵循另一個數(shù)據(jù)集的程度。
可以這樣理解,一個已經(jīng)盡可能擬合訓(xùn)練集(真實數(shù)據(jù),未使用數(shù)據(jù)增強)的模型,如果去預(yù)測一個使用了數(shù)據(jù)增強后的測試集,并且能夠取得很好的準確率,就認為這種數(shù)據(jù)增強方法是自然的,符合真實分布的,密度匹配的。
對于密度匹配,其實就是作者試圖對提出方法進行的理論解釋,我理解就是數(shù)據(jù)分布一致的含義。就像Mixup一樣,有些方法原理其實很難解釋,效果好就行。
這個基于“密度匹配”的評估方法是這篇paper最靈魂的貢獻,實現(xiàn)起來也很簡單,雖然原理很難去解釋,但是這種方法巧妙的大幅降低了每次評估所需的計算量。
實驗結(jié)果
作者已經(jīng)開源,方法到底好壞還要后面實際驗證過才知道。先看看paper中給出的一些結(jié)果:
TodoList
1.幾乎在所有任務(wù)上,Cutout都被證明有效,進行嘗試
2.包括AutoAugment、PBA、Fast AutoAugment、RandAugment在內(nèi)的這些方法,它們在ImageNet上已經(jīng)搜出的策略,遷移到自己的任務(wù)上是否也能在baseline上獲得提升。
3.閱讀其它幾篇論文,確認一個實驗?zāi)繕?#xff0c;嘗試驗證效果。
參考文獻
圖像處理之錯切變換
Python圖像處理庫PIL的ImageOps模塊介紹
ImageEnhance
數(shù)據(jù)增強方法 | 基于隨機圖像裁剪和修補的方式(文末源碼共享)
圖像分類訓(xùn)練技巧和精度提升總結(jié)
Improved Regularization of Convolutional Neural Networks with Cutout
mixup: BEYOND EMPIRICAL RISK MINIMIZATION
Population Based Augmentation: Efficient Learning of Augmentation Policy Schedules
Fast AutoAugment
總結(jié)
以上是生活随笔為你收集整理的自动搜索数据增强方法分享——fast-autoaugment的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows mysql 备份_Win
- 下一篇: Intel Hex概述