1 什么是數據增強?
來自 <https://www.infoq.cn/article/kyXx3sRKNsdFgqapv2Gw?utm_source=rss&utm_medium=article>
數據增強也叫數據擴增,意思是在不實質性的增加數據的情況下,讓有限的數據產生等價於更多數據的價值。

比如上圖,第1列是原圖,后面3列是對第1列作一些隨機的裁剪、旋轉操作得來。
每張圖對於網絡來說都是不同的輸入,加上原圖就將數據擴充到原來的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
預覽一下它能完成的數據增強操作吧。

4 思考
數據增強的本質是為了增強模型的泛化能力,那它與其他的一些方法比如 dropout,權重衰減有什么區別?
(1) 權重衰減,dropout,stochastic depth 等方法,是專門設計來限制模型的有效容量的,用於減少過擬合,
這一類是顯式的正則化方法。研究表明這一類方法可以提高泛化能力,但並非必要,且能力有限,而且參數高度依賴於網絡結構等因素。
(2) 數據增強則沒有降低網絡的容量,也不增加計算復雜度和調參工程量,是隱式的規整化方法。實際應用中更有意義,所以我們常說,數據至上。
