盤點深度學習中的各種數(shù)據(jù)增強技巧
點擊上方“小白學視覺”,選擇加"星標"或“置頂”
重磅干貨,第一時間送達
1 什么是數(shù)據(jù)增強?
數(shù)據(jù)增強也叫數(shù)據(jù)擴增,意思是在不實質性的增加數(shù)據(jù)的情況下,讓有限的數(shù)據(jù)產(chǎn)生等價于更多數(shù)據(jù)的價值。
比如上圖,第1列是原圖,后面3列是對第1列作一些隨機的裁剪、旋轉操作得來。
每張圖對于網(wǎng)絡來說都是不同的輸入,加上原圖就將數(shù)據(jù)擴充到原來的10倍。 假如我們輸入網(wǎng)絡的圖片的分辨率大小是256×256,若采用隨機裁剪成224×224的方式,那么一張圖最多可以產(chǎn)生32×32張不同的圖,數(shù)據(jù)量擴充將近1000倍。 雖然許多的圖相似度太高,實際的效果并不等價,但僅僅是這樣簡單的一個操作,效果已經(jīng)非凡了。
如果再輔助其他的數(shù)據(jù)增強方法,將獲得更好的多樣性,這就是數(shù)據(jù)增強的本質。
數(shù)據(jù)增強可以分為, 有監(jiān)督的數(shù)據(jù)增強和無監(jiān)督的數(shù)據(jù)增強方法 。 其中有監(jiān)督的數(shù)據(jù)增強又可以分為 單樣本數(shù)據(jù)增強和多樣本數(shù)據(jù)增強方法,無監(jiān)督的數(shù)據(jù)增強分為生成新的數(shù)據(jù)和學習增強策略兩個方向。
2 有監(jiān)督的數(shù)據(jù)增強
有監(jiān)督數(shù)據(jù)增強,即 采用預設的數(shù)據(jù)變換規(guī)則,在已有數(shù)據(jù)的基礎上 進行數(shù)據(jù)的擴增,包含單樣本數(shù)據(jù)增強和多樣本數(shù)據(jù)增強,其中單樣本又包括幾何操作類,顏色變換類。
2.1. 單樣本數(shù)據(jù)增強
所謂單樣本數(shù)據(jù)增強,即增強一個樣本的時候,全部圍繞著該樣本本身進行操作,包括 幾何變換類,顏色變換類 等。
(1) 幾何變換類
幾何變換類即對圖像進行幾何變換,包括
翻轉,旋轉,裁剪,變形,縮放
等各類操作,下面展示其中的若干個操作。
水平翻轉和垂直翻轉
隨機旋轉
隨機裁剪
變形縮放
翻轉操作和旋轉操作,對于那些對方向不敏感的任務,比如圖像分類,都是很常見的操作,在caffe等框架中翻轉對應的就是mirror操作。
翻轉和旋轉不改變圖像的大小,而裁剪會改變圖像的大小。 通常在訓練的時候會采用隨機裁剪的方法,在測試的時候選擇裁剪中間部分或者不裁剪。 值得注意的是,在一些競賽中進行模型測試時,一般都是裁剪輸入的多個版本然后將結果進行融合,對預測的改進效果非常明顯。
以上操作都不會產(chǎn)生失真,而縮放變形則是失真的。
很多的時候,網(wǎng)絡的訓練輸入大小是固定的,但是數(shù)據(jù)集中的圖像卻大小不一,此時就可以選擇上面的裁剪成固定大小輸入或者縮放到網(wǎng)絡的輸入大小的方案,后者就會產(chǎn)生失真,通常效果比前者差。
(2) 顏色變換類
上面的幾何變換類操作,沒有改變圖像本身的內容,它可能是選擇了圖像的一部分或者對像素進行了重分布。
如果要改變圖像本身的內容,就屬于顏色變換類的數(shù)據(jù)增強了,常見的包括
噪聲、模糊、顏色變換、擦除、填充
等等。
基于噪聲的數(shù)據(jù)增強就是在原來的圖片的基礎上,隨機疊加一些噪聲,最常見的做法就是高斯噪聲。 更復雜一點的就是在面積大小可選定、位置隨機的矩形區(qū)域上丟棄像素產(chǎn)生黑色矩形塊,從而產(chǎn)生一些彩色噪聲,以Coarse Dropout方法為代表,甚至還可以對圖片上隨機選取一塊區(qū)域并擦除圖像信息。
添加Coarse Dropout噪聲
顏色變換的另一個重要變換是顏色擾動,就是在某一個顏色空間通過增加或減少某些顏色分量,或者更改顏色通道的順序。
顏色擾動
還有一些顏色變換,本文就不再詳述。
幾何變換類,顏色變換類的數(shù)據(jù)增強方法細致數(shù)來還有非常多,推薦給大家一個git項目:
https://github.com/aleju/imgaug
預覽一下它能完成的數(shù)據(jù)增強操作吧。
2.2. 多樣本數(shù)據(jù)增強
不同于單樣本數(shù)據(jù)增強,多樣本數(shù)據(jù)增強方法利用多個樣本來產(chǎn)生新的樣本,下面介紹幾種方法。
(1) SMOTE[1]
SMOTE即Synthetic Minority Over-sampling Technique方法,它是通過人工合成新樣本來處理樣本不平衡問題,從而提升分類器性能。
類不平衡現(xiàn)象是很常見的,它指的是數(shù)據(jù)集中各類別數(shù)量不近似相等。 如果樣本類別之間相差很大,會影響分類器的分類效果。 假設小樣本數(shù)據(jù)數(shù)量極少,如僅占總體的1%,則即使小樣本被錯誤地全部識別為大樣本,在經(jīng)驗風險最小化策略下的分類器識別準確率仍能達到99%,但由于沒有學習到小樣本的特征,實際分類效果就會很差。
SMOTE方法是基于插值的方法,它可以為小樣本類合成新的樣本,主要流程為:
第一步,定義好特征空間,將每個樣本對應到特征空間中的某一點,根據(jù)樣本不平衡比例確定好一個采樣倍率N;
第二步,對每一個小樣本類樣本(x,y),按歐氏距離找出K個最近鄰樣本,從中隨機選取一個樣本點,假設選擇的近鄰點為(xn,yn)。 在特征空間中樣本點與最近鄰樣本點的連線段上隨機選取一點作為新樣本點,滿足以下公式:
第三步,重復以上的步驟,直到大、小樣本數(shù)量平衡。
該方法的示意圖如下。
在python中,SMOTE算法已經(jīng)封裝到了imbalanced-learn庫中,如下圖為算法實現(xiàn)的數(shù)據(jù)增強的實例,左圖為原始數(shù)據(jù)特征空間圖,右圖為SMOTE算法處理后的特征空間圖。
(2) SamplePairing[2]
SamplePairing方法的原理非常簡單,從訓練集中隨機抽取兩張圖片分別經(jīng)過基礎數(shù)據(jù)增強操作(如隨機翻轉等)處理后經(jīng)像素以取平均值的形式疊加合成一個新的樣本,標簽為原樣本標簽中的一種。 這兩張圖片甚至不限制為同一類別,這種方法對于醫(yī)學圖像比較有效。
經(jīng)SamplePairing處理后可使訓練集的規(guī)模從N擴增到N×N。 實驗結果表明,因SamplePairing數(shù)據(jù)增強操作可能引入不同標簽的訓練樣本,導致在各數(shù)據(jù)集上使用SamplePairing訓練的誤差明顯增加,而在驗證集上誤差則有較大幅度降低。
盡管SamplePairing思路簡單,性能上提升效果可觀,符合奧卡姆剃刀原理,但遺憾的是可解釋性不強。
(3) mixup[3]
mixup是Facebook人工智能研究院和MIT在“Beyond Empirical Risk Minimization”中提出的基于鄰域風險最小化原則的數(shù)據(jù)增強方法,它使用線性插值得到新樣本數(shù)據(jù)。
令(xn,yn)是插值生成的新數(shù)據(jù),(xi,yi)和(xj,yj)是訓練集隨機選取的兩個數(shù)據(jù),則數(shù)據(jù)生成方式如下
λ的取指范圍介于0到1。
提出mixup方法的作者們做了豐富的實驗,實驗結果表明可以改進深度學習模型在ImageNet數(shù)據(jù)集、CIFAR數(shù)據(jù)集、語音數(shù)據(jù)集和表格數(shù)據(jù)集中的泛化誤差,降低模型對已損壞標簽的記憶,增強模型對對抗樣本的魯棒性和訓練生成對抗網(wǎng)絡的穩(wěn)定性。
SMOTE,SamplePairing,mixup三者思路上有相同之處,都是試圖將離散樣本點連續(xù)化來擬合真實樣本分布 ,不過所增加的樣本點在特征空間中仍位于已知小樣本點所圍成的區(qū)域內。 如果能夠在給定范圍之外適當插值,也許能實現(xiàn)更好的數(shù)據(jù)增強效果。
3 無監(jiān)督的數(shù)據(jù)增強
無監(jiān)督的數(shù)據(jù)增強方法包括兩類:
(1) 通過模型學習數(shù)據(jù)的分布,隨機生成與訓練數(shù)據(jù)集分布一致的圖片,代表方法GAN[4]。 ? ? ??
(2) 通過模型,學習出適合當前任務的數(shù)據(jù)增強方法,代表方法AutoAugment[5]。
3.1 GAN
關于GAN(generative adversarial networks),我們已經(jīng)說的太多了。 它包含兩個網(wǎng)絡,一個是生成網(wǎng)絡,一個是對抗網(wǎng)絡,基本原理如下:
(1) G是一個生成圖片的網(wǎng)絡,它接收隨機的噪聲z,通過噪聲生成圖片,記做G(z) 。 ? ? ??
(2) D是一個判別網(wǎng)絡,判別一張圖片是不是“真實的”,即是真實的圖片,還是由G生成的圖片。
GAN的以假亂真能力就不多說了。
2 Autoaugmentation[5]
AutoAugment是Google提出的自動選擇最優(yōu)數(shù)據(jù)增強方案的研究,這是無監(jiān)督數(shù)據(jù)增強的重要研究方向。
它的基本思路是使用增強學習從數(shù)據(jù)本身尋找最佳圖像變換策略,對于不同的任務學習不同的增強方法,流程如下:
(1) 準備16個常用的數(shù)據(jù)增強操作。
(2) 從16個中選擇5個操作,隨機產(chǎn)生使用該操作的概率和相應的幅度,將其稱為一個sub-policy,一共產(chǎn)生5個sub-polices。
(3) 對訓練過程中每一個batch的圖片,隨機采用5個sub-polices操作中的一種。
(4) 通過模型在驗證集上的泛化能力來反饋,使用的優(yōu)化方法是增強學習方法。
(5) 經(jīng)過80~100個epoch后網(wǎng)絡開始學習到有效的sub-policies。
(6) 之后串接這5個sub-policies,然后再進行最后的訓練。
總的來說,就是學習已有數(shù)據(jù)增強的組合策略,對于門牌數(shù)字識別等任務,研究表明剪切和平移等幾何變換能夠獲得最佳效果。
而對于ImageNet中的圖像分類任務,AutoAugment學習到了不使用剪切,也不完全反轉顏色,因為這些變換會導致圖像失真。
AutoAugment學習到的是側重于微調顏色和色相分布。
除此之外還有一些數(shù)據(jù)增強方法,篇幅有限不做過多解讀,請持續(xù)關注。
4 思考
數(shù)據(jù)增強的本質是為了增強模型的泛化能力,那它與其他的一些方法比如dropout,權重衰減有什么區(qū)別?
(1) 權重衰減,dropout,stochastic depth等方法,是專門設計來限制模型的有效容量的,用于減少過擬合,這一類是顯式的正則化方法。 研究表明這一類方法可以提高泛化能力,但并非必要,且能力有限,而且參數(shù)高度依賴于網(wǎng)絡結構等因素。
(2) 數(shù)據(jù)增強則沒有降低網(wǎng)絡的容量,也不增加計算復雜度和調參工程量,是隱式的規(guī)整化方法。 實際應用中更有意義,所以我們常說,數(shù)據(jù)至上。
[ 1] Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of Artificial Intelligence Research, 2002, 16(1):321-357.
[2] Inoue H. Data Augmentation by Pairing Samples for Images Classification[J]. 2018.
[3] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond Empirical Risk Minimization[J]. 2017.
[4] Goodfellow I J, Pouget-Abadie J, Mirza M, et al. Generative Adversarial Networks[J]. Advances in Neural Information Processing Systems, 2014, 3:2672-2680.
[5]?Cubuk E D, Zoph B, Mane D, et al. AutoAugment: Learning Augmentation Policies from Data.[J]. arXiv: Computer Vision and Pattern Recognition, 2018.
歡迎掃碼關注:
小白團隊出品:零基礎精通語義分割↓↓↓
下載1:OpenCV-Contrib擴展模塊中文版教程 在「小白學視覺」公眾號后臺回復:擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學視覺」公眾號后臺回復:Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學校計算機視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學視覺」公眾號后臺回復:OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關微信群。請勿在群內發(fā)送廣告,否則會請出群,謝謝理解~


