深度學習之影象的資料增強方法彙總
參考:https://www.jianshu.com/p/99450dbdadcf
在深度學習專案中,尋找資料花費了相當多的時間。但在很多實際的專案中,我們難以找到充足的資料來完成任務。為了要保證完美地完成專案,有兩件事情需要做好:1、尋找更多的資料;2、資料增強。本篇主要描述資料增強。
有很多現成的可以做資料增強的庫,比如可以用OpenCV、PIL、TensorFlow、Augmentor等等,下面介紹的第一第二大類方法都是通過呼叫imgaug庫操作實現的,這個庫功能全面,且有豐富的文件支援,能滿足我們大多數的資料增強的需求。
git地址:https://github.com/aleju/imgaug
官方文件:http://imgaug.readthedocs.io/en/latest/index.html
0 含義
什麼是資料增強呢?data augmentation,它的意思是讓有限的資料產生更多的等價資料。
下面舉個實際的例子:
上面的左側大圖為原圖,右側小圖是對左圖做了一些隨機的裁剪、旋轉操作得來的。右邊的每張圖對於網路來說都是不同的輸入,這樣就將資料擴充到10倍。
假如我們輸入網路的圖片的解析度大小是256*256,若採用隨機裁剪成224*224的方式,那麼一張圖最多可以產生32*32張圖,資料量擴充將近1000倍。
但因許多圖相似度太高,實際的效果並不等價。
如果再輔助其他的資料增強方法,將獲得更多的資料集,這就是資料增強的本質。
1 空間幾何變換類
1.1 翻轉
翻轉包括水平翻轉和垂直翻轉。
1.2 crop
裁剪圖片的感興趣區域(ROI),通常在訓練的時候,會採用隨機裁剪的方法,下圖為隨機裁剪4次的效果。
1.3 旋轉
對影象做一定角度對旋轉操作,看看效果。
1.4.縮放變形
隨機選取影象的一部分,然後將其縮放到原影象尺度。
1.5 仿射類
1.5.1 仿射變換
同時對圖片做裁剪、旋轉、轉換、模式調整等多重操作。
1.5.2 視覺變換
對影象應用一個隨機的四點透視變換。
1.5.3 分段仿射(PiecewiseAffine)
分段仿射在影象上放置一個規則的點網格,根據正態分佈的樣本數量移動這些點及周圍的影象區域。
2 畫素顏色變換類
2.1 噪聲類
隨機噪聲是在原來的圖片的基礎上,隨機疊加一些噪聲。
2.1.1 高斯噪聲
2.1.2 CoarseDropout
在面積大小可選定、位置隨機的矩形區域上丟失資訊實現轉換,所有通道的資訊丟失產生黑色矩形塊,部分通道的資訊丟失產生彩色噪聲。
2.1.3 SimplexNoiseAlpha
產生連續單一噪聲的掩模後,將掩模與原影象混合。
2.1.4 FrequencyNoiseAlpha
在頻域中用隨機指數對噪聲對映進行加權,再轉換到空間域。在不同影象中,隨著指數值逐漸增大,依次出現平滑的大斑點、多雲模式、重複出現的小斑塊。
2.2 模糊類
減少各畫素點值的差異實現圖片模糊,實現畫素的平滑化。
2.2.1 高斯模糊
2.2.2 ElasticTransformation
根據扭曲場的平滑度與強度逐一地移動區域性畫素點實現模糊效果。
2.3 HSV對比度變換
通過向HSV空間中的每個畫素新增或減少V值,修改色調和飽和度實現對比度轉換。
2.4 RGB顏色擾動
將圖片從RGB顏色空間轉換到另一顏色空間,增加或減少顏色引數後返回RGB顏色空間。
2.5 隨機擦除法
對圖片上隨機選取一塊區域,隨機地擦除影象資訊。
2.6超畫素法(Superpixels)
在最大解析度處生成影象的若干個超畫素,並將其調整到原始大小,再將原始影象中所有超畫素區域按一定比例替換為超畫素,其他區域不改變。
2.7 轉換法(invert)
按給定的概率值將部分或全部通道的畫素值從v設定為255-v。
2.8邊界檢測(EdgeDetect)
檢測影象中的所有邊緣,將它們標記為黑白影象,再將結果與原始影象疊加。
2.9 GrayScale
將影象從RGB顏色空間轉換為灰度空間,通過某一通道與原影象混合。
2.10 銳化(sharpen)與浮雕(emboss)
對影象執行某一程度的銳化或浮雕操作,通過某一通道將結果與影象融合。
下圖分別是銳化與浮雕效果圖。
3 多樣本合成類
3.1 SMOTE
SMOTE,Synthetic Minority Over-sampling Technique,通過人工合成新樣本來處理樣本不平衡問題,提升分類器效能。
類不平衡現象是資料集中各類別數量不近似相等。如果樣本類別之間相差很大,會影響分類器的分類效果。假設小樣本資料數量極少,僅佔總體的1%,所能提取的相應特徵也極少,即使小樣本被錯誤地全部識別為大樣本,在經驗風險最小化策略下的分類器識別準確率仍能達到99%,但在驗證環節分類效果不佳。
基於插值的SMOTE方法為小樣本類合成新的樣本,主要思路為:
(1)定義好特徵空間,將每個樣本對應到特徵空間中的某一點,根據樣本不平衡比例確定取樣倍率N;
(2)對每一個小樣本類樣本(x,y),按歐氏距離找K個最近鄰樣本,從中隨機選取一個樣本點,假設選擇的近鄰點為(xn,yn)。在特徵空間中樣本點與最近鄰樣本點的連線段上隨機選取一點作為新樣本點,滿足以下公式:
(3)重複選取取樣,直到大、小樣本數量平衡。
在python中,SMOTE演算法已經封裝到了imbalanced-learn庫中,如下圖為演算法實現的資料增強的例項,左圖為原始資料特徵空間圖,右圖為SMOTE演算法處理後的特徵空間圖。
3.2 SamplePairing
SamplePairing方法的處理流程如下圖所示,從訓練集中隨機抽取兩張圖片分別經過基礎資料增強操作(如隨機翻轉等)處理後經畫素取平均值的形式疊加合成一個新的樣本,標籤為原樣本標籤中的一種。
經SamplePairing處理後可使訓練集的規模從N擴增到N*N,在CPU上也能完成處理。
訓練過程是交替禁用與使用SamplePairing處理操作的結合:
(1)使用傳統的資料增強訓練網路,不使用SamplePairing 資料增強訓練。
(2)在ILSVRC資料集上完成一個epoch或在其他資料集上完成100個epoch後,加入SamplePairing 資料增強訓練。
(3)間歇性禁用 SamplePairing。對於 ILSVRC 資料集,為其中的300000 個影象啟用SamplePairing,然後在接下來的100000個影象中禁用它。對於其他資料集,在開始的8個epoch中啟用,在接下來的2個epoch中禁止。
(4)在訓練損失函式和精度穩定後進行微調,禁用SamplePairing。
實驗結果表明,因SamplePairing資料增強操作可能引入不同標籤的訓練樣本,導致在各資料集上使用SamplePairing訓練的誤差明顯增加,而在檢測誤差方面使用SamplePairing訓練的驗證誤差有較大幅度降低。
儘管SamplePairing思路簡單,效能上提升效果可觀,符合奧卡姆剃刀原理,遺憾的是的可解釋性不強,目前尚缺理論支撐。目前僅有圖片資料的實驗,還需下一步的實驗與解讀。
3.3 mixup
mixup是基於鄰域風險最小化(VRM)原則的資料增強方法,使用線性插值得到新樣本資料。
在鄰域風險最小化原則下,根據特徵向量線性插值將導致相關目標線性插值的先驗知識,可得出簡單且與資料無關的mixup公式:
其中(xn,yn)是插值生成的新資料,(xi,yi) 和 (xj,yj)是訓練集中隨機選取的兩個資料,λ的取值滿足貝塔分佈,取值範圍介於0到1,超引數α控制特徵目標之間的插值強度。
mixup的實驗豐富,實驗結果表明可以改進深度學習模型在ImageNet資料集、CIFAR資料集、語音資料集和表格資料集中的泛化誤差,降低模型對已損壞標籤的記憶,增強模型對對抗樣本的魯棒性和訓練對抗生成網路的穩定性。
mixup處理實現了邊界模糊化,提供平滑的預測效果,增強模型在訓練資料範圍之外的預測能力。
隨著超引數α增大,實際資料的訓練誤差就會增加,而泛化誤差會減少。說明mixup隱式地控制著模型的複雜性。隨著模型容量與超引數的增加,訓練誤差隨之降低。
儘管有著可觀的效果改進,但mixup在偏差—方差平衡方面尚未有較好的解釋。在其他型別的有監督學習、無監督、半監督和強化學習中,mixup還有很大的發展空間。
小結:mixup、SMOTE、SamplePairing三者思路上有相同之處,都是試圖將離散樣本點連續化來擬合真實樣本分佈,但所增加的樣本點在特徵空間中仍位於已知小樣本點所圍成的區域內。但在特徵空間中,小樣本資料的真實分佈可能並不限於該區域中,在給定範圍之外適當插值,也許能實現更好的資料增強效果。