『計算機視覺_轉載』深度學習中的數據加強

連接:https://zhuanlan.zhihu.com/p/61759947

最近被人問到SSD中的數據加強手段,因爲我是由《tensorflow實戰google深度學習框架》這本書入門的,其在介紹圖像數據加強的章節中使用的流程和SSD的預處理過程及其類似,這致使我在學習SSD的時候以爲SSD的預處理很常規,徹底沒有出乎我預料的地方(哭死),因此特意找一些數據加強的科普性文章轉載學習一下,系統的瞭解不一樣的深度學習任務中經常使用的加強手段有哪些。python

1 什麼是數據加強?

數據加強也叫數據擴增,意思是在不實質性的增長數據的狀況下,讓有限的數據產生等價於更多數據的價值。git

好比上圖,第1列是原圖,後面3列是對第1列做一些隨機的裁剪、旋轉操做得來。github

每張圖對於網絡來講都是不一樣的輸入,加上原圖就將數據擴充到原來的10倍。假如咱們輸入網絡的圖片的分辨率大小是256×256,若採用隨機裁剪成224×224的方式,那麼一張圖最多能夠產生32×32張不一樣的圖,數據量擴充將近1000倍。雖然許多的圖類似度過高,實際的效果並不等價,但僅僅是這樣簡單的一個操做,效果已經非凡了。算法

若是再輔助其餘的數據加強方法,將得到更好的多樣性,這就是數據加強的本質。網絡

數據加強能夠分爲,有監督的數據加強和無監督的數據加強方法。其中有監督的數據加強又能夠分爲單樣本數據加強和多樣本數據加強方法,無監督的數據加強分爲生成新的數據和學習加強策略兩個方向。框架

2 有監督的數據加強

有監督數據加強,即採用預設的數據變換規則,在已有數據的基礎上進行數據的擴增,包含單樣本數據加強和多樣本數據加強,其中單樣本又包括幾何操做類,顏色變換類。性能

2.1. 單樣本數據加強學習

所謂單樣本數據加強,即加強一個樣本的時候,所有圍繞着該樣本自己進行操做,包括幾何變換類,顏色變換類等。測試

(1) 幾何變換類優化

幾何變換類即對圖像進行幾何變換,包括翻轉,旋轉,裁剪,變形,縮放等各種操做,下面展現其中的若干個操做。

水平翻轉和垂直翻轉

隨機旋轉

隨機裁剪

變形縮放

翻轉操做和旋轉操做,對於那些對方向不敏感的任務,好比圖像分類,都是很常見的操做,在caffe等框架中翻轉對應的就是mirror操做。

翻轉和旋轉不改變圖像的大小,而裁剪會改變圖像的大小。一般在訓練的時候會採用隨機裁剪的方法,在測試的時候選擇裁剪中間部分或者不裁剪。值得注意的是,在一些競賽中進行模型測試時,通常都是裁剪輸入的多個版本而後將結果進行融合,對預測的改進效果很是明顯。

以上操做都不會產生失真,而縮放變形則是失真的。

不少的時候,網絡的訓練輸入大小是固定的,可是數據集中的圖像卻大小不一,此時就能夠選擇上面的裁剪成固定大小輸入或者縮放到網絡的輸入大小的方案,後者就會產生失真,一般效果比前者差。

(2) 顏色變換類

上面的幾何變換類操做,沒有改變圖像自己的內容,它多是選擇了圖像的一部分或者對像素進行了重分佈。若是要改變圖像自己的內容,就屬於顏色變換類的數據加強了,常見的包括噪聲、模糊、顏色變換、擦除、填充等等。

基於噪聲的數據加強就是在原來的圖片的基礎上,隨機疊加一些噪聲,最多見的作法就是高斯噪聲。更復雜一點的就是在面積大小可選定、位置隨機的矩形區域上丟棄像素產生黑色矩形塊,從而產生一些彩色噪聲,以Coarse Dropout方法爲表明,甚至還能夠對圖片上隨機選取一塊區域並擦除圖像信息。

添加Coarse Dropout噪聲

顏色變換的另外一個重要變換是顏色擾動,就是在某一個顏色空間經過增長或減小某些顏色份量,或者更改顏色通道的順序。

顏色擾動

還有一些顏色變換,本文就再也不詳述。

幾何變換類,顏色變換類的數據加強方法細緻數來還有很是多,推薦給你們一個git項目:

https://github.com/aleju/imgaug

預覽一下它能完成的數據加強操做吧。

2.2. 多樣本數據加強

不一樣於單樣本數據加強,多樣本數據加強方法利用多個樣原本產生新的樣本,下面介紹幾種方法。

(1) SMOTE[1]

SMOTE即Synthetic Minority Over-sampling Technique方法,它是經過人工合成新樣原本處理樣本不平衡問題,從而提高分類器性能。

類不平衡現象是很常見的,它指的是數據集中各種別數量不近似相等。若是樣本類別之間相差很大,會影響分類器的分類效果。假設小樣本數據數量極少,如僅佔整體的1%,則即便小樣本被錯誤地所有識別爲大樣本,在經驗風險最小化策略下的分類器識別準確率仍能達到99%,但因爲沒有學習到小樣本的特徵,實際分類效果就會不好。

SMOTE方法是基於插值的方法,它能夠爲小樣本類合成新的樣本,主要流程爲:

第一步,定義好特徵空間,將每一個樣本對應到特徵空間中的某一點,根據樣本不平衡比例肯定好一個採樣倍率N;

第二步,對每個小樣本類樣本(x,y),按歐氏距離找出K個最近鄰樣本,從中隨機選取一個樣本點,假設選擇的近鄰點爲(xn,yn)。在特徵空間中樣本點與最近鄰樣本點的連線段上隨機選取一點做爲新樣本點,知足如下公式:

第三步,重複以上的步驟,直到大、小樣本數量平衡。

該方法的示意圖以下。

在python中,SMOTE算法已經封裝到了imbalanced-learn庫中,以下圖爲算法實現的數據加強的實例,左圖爲原始數據特徵空間圖,右圖爲SMOTE算法處理後的特徵空間圖。

(2) SamplePairing[2]

SamplePairing方法的原理很是簡單,從訓練集中隨機抽取兩張圖片分別通過基礎數據加強操做(如隨機翻轉等)處理後經像素以取平均值的形式疊加合成一個新的樣本,標籤爲原樣本標籤中的一種。這兩張圖片甚至不限制爲同一類別,這種方法對於醫學圖像比較有效。

經SamplePairing處理後可以使訓練集的規模從N擴增到N×N。實驗結果代表,因SamplePairing數據加強操做可能引入不一樣標籤的訓練樣本,致使在各數據集上使用SamplePairing訓練的偏差明顯增長,而在驗證集上偏差則有較大幅度下降。

儘管SamplePairing思路簡單,性能上提高效果可觀,符合奧卡姆剃刀原理,但遺憾的是可解釋性不強。

(3) mixup[3]

mixup是Facebook人工智能研究院和MIT在「Beyond Empirical Risk Minimization」中提出的基於鄰域風險最小化原則的數據加強方法,它使用線性插值獲得新樣本數據。

令(xn,yn)是插值生成的新數據,(xi,yi)和(xj,yj)是訓練集隨機選取的兩個數據,則數據生成方式以下

λ的取指範圍介於0到1。提出mixup方法的做者們作了豐富的實驗,實驗結果代表能夠改進深度學習模型在ImageNet數據集、CIFAR數據集、語音數據集和表格數據集中的泛化偏差,下降模型對已損壞標籤的記憶,加強模型對對抗樣本的魯棒性和訓練生成對抗網絡的穩定性。

SMOTE,SamplePairing,mixup三者思路上有相同之處,都是試圖將離散樣本點連續化來擬合真實樣本分佈,不過所增長的樣本點在特徵空間中仍位於已知小樣本點所圍成的區域內。若是可以在給定範圍以外適當插值,也許能實現更好的數據加強效果。

3 無監督的數據加強

無監督的數據加強方法包括兩類:

(1) 經過模型學習數據的分佈,隨機生成與訓練數據集分佈一致的圖片,表明方法GAN[4]。

(2) 經過模型,學習出適合當前任務的數據加強方法,表明方法AutoAugment[5]。

3.1 GAN

關於GAN(generative adversarial networks),咱們已經說的太多了。它包含兩個網絡,一個是生成網絡,一個是對抗網絡,基本原理以下:

(1) G是一個生成圖片的網絡,它接收隨機的噪聲z,經過噪聲生成圖片,記作G(z) 。

(2) D是一個判別網絡,判別一張圖片是否是「真實的」,便是真實的圖片,仍是由G生成的圖片。

GAN的以假亂真能力就很少說了。

3.2 Autoaugmentation[5]

AutoAugment是Google提出的自動選擇最優數據加強方案的研究,這是無監督數據加強的重要研究方向。它的基本思路是使用加強學習從數據自己尋找最佳圖像變換策略,對於不一樣的任務學習不一樣的加強方法,流程以下:

(1) 準備16個經常使用的數據加強操做。

(2) 從16箇中選擇5個操做,隨機產生使用該操做的機率和相應的幅度,將其稱爲一個sub-policy,一共產生5個sub-polices。

(3) 對訓練過程當中每個batch的圖片,隨機採用5個sub-polices操做中的一種。

(4) 經過模型在驗證集上的泛化能力來反饋,使用的優化方法是加強學習方法。

(5) 通過80~100個epoch後網絡開始學習到有效的sub-policies。

(6) 以後串接這5個sub-policies,而後再進行最後的訓練。

總的來講,就是學習已有數據加強的組合策略,對於門牌數字識別等任務,研究代表剪切和平移等幾何變換可以得到最佳效果。

而對於ImageNet中的圖像分類任務,AutoAugment學習到了不使用剪切,也不徹底反轉顏色,由於這些變換會致使圖像失真。AutoAugment學習到的是側重於微調顏色和色相分佈。

除此以外還有一些數據加強方法,篇幅有限不作過多解讀,請持續關注。

4 思考

數據加強的本質是爲了加強模型的泛化能力,那它與其餘的一些方法好比dropout,權重衰減有什麼區別?

(1) 權重衰減,dropout,stochastic depth等方法,是專門設計來限制模型的有效容量的,用於減小過擬合,這一類是顯式的正則化方法。研究代表這一類方法能夠提升泛化能力,但並不是必要,且能力有限,並且參數高度依賴於網絡結構等因素。

(2) 數據加強則沒有下降網絡的容量,也不增長計算複雜度和調參工程量,是隱式的規整化方法。實際應用中更有意義,因此咱們常說,數據至上。

咱們老是在使用有限的數據來進行模型的訓練,所以數據加強操做是不可缺乏的一環。從研究人員手工定義數據加強操做,到基於無監督的方法生成數據和學習加強操做的組合,這仍然是一個開放的研究領域,感興趣的同窗能夠自行了解更多。

相關文章
相關標籤/搜索