避免過擬合的基本方法之一是從數據源獲得更多數據,當訓練數據有限時,可以通過數據增強(data augmentation)變換原有的數據生成新的數據來擴大訓練集。即使擁有大量數據,進行數據增強也是有必要的,因為可以防止神經網絡學習到不相干的模式,從根本上提升整體性能。還要注意在使用增強技術的同時,必須確保不增加無關(無意義)的數據。
數據增強的主要方法有:
第一種:圖像處理型(利用一定手段生成樣本空間沒有的樣本)
翻轉flip
將圖片水平或垂直翻轉。
旋轉rotate
旋轉后圖像維度可能不會被保留,如果是正方形圖像,旋轉90度后圖像的尺寸會被保存;
如果圖像是長方形,旋轉180度后圖像的尺寸也會被保存;
但用更小的角度旋轉圖像將會改變最終圖像的尺寸。
縮放re-scale
圖像可以被放大或縮小,放大時大多數圖像處理框架會按原始尺寸對放大后的圖像進行裁剪;縮小時由於圖像尺寸比原來的尺寸小,不得不對圖像邊界之外的內容做出假設。先考慮放大的情況:
裁剪crop
隨機從原始圖像中采樣一部分,然后將這部分圖像調整為原始圖像大小。注意裁剪和縮放的區別。
平移pad
將圖像沿X或Y軸或同時沿2個方向移動,這一數據增強方法非常有用,因為大多數對象有可能分布在圖像的任意位置,這迫使CNN網絡需要看到所有的地方。
插值interpolation
當旋轉、平移或者縮小一個沒有純色背景的圖片,且又需要保持原始圖片的大小時,需要對邊界之外沒有任何信息的區域做出假設。最簡單的假設是令邊界外的部分每一個像素點的值都是常數0(RGB值=0為黑色),這樣在對圖像進行變換后,在圖像沒有覆蓋的地方會得到一塊黑色的區域。
大多數情況下最簡單假設的效果不好,可以采用以下方式填充未知的空間:
常數填充、邊緣填充、反射填充、對稱填充、包裹模式填充
(1)常量填充:適用於在單色背景下拍攝的圖像;
(2)邊緣擴展:用圖像邊緣的值填充邊界以外,適用於輕微平移的圖像;
(3)反射:圖像像素值沿圖像邊界進行反射,適用於包含連續或自然背景的圖像;
(4)對稱:類似反射,除了在反射邊界上進行邊緣像素copy。通常反射和對稱可以交替使用,但在處理非常小的圖像時,差異將是可見的;
(5)包裹:在邊界以外重復填充圖像,相當於平鋪圖像,這種方法不像其他方法那樣普遍被使用,因為它對很多場景都沒有意義。
還可以自定義方法處理未知區域(如近大遠小等),但通常以上方法對大多數分類問題都有很好的效果。
高斯噪聲Gaussian noise
過擬合經常會發生在神經網絡試圖學習高頻特征(即頻繁出現的無意義的模式)時,而學習這些高頻特征對模型提升並沒有什么幫助。采用具有零均值特性的高斯噪聲,在所有頻率上都能產生數據點,可以有效的使高頻特征失真,減弱其對模型的影響。但這也意味着低頻成分(通常是關心的特征)同時會受到影響,由於能夠通過學習來忽略影響,添加適量的噪聲能夠有效提升神經網絡的學習能力。
一個弱化的版本是椒鹽噪聲,以隨機的白色和黑色像素點呈現並鋪滿整個圖片。這種方式對圖像產生的作用和添加高斯噪聲產生的作用是一樣的,只是效果相對較差。
對比度變換contrast
在圖像的HSV(Hue,Saturation,Value)顏色空間,改變飽和度S和亮度V分量,保持色調H不變,對每個像素的S和V分量進行指數運算(指數因子在0.25到4之間),增加光照變化。
Fancy PCA(PCA Jittering)
改變訓練圖像中RGB通道的強度,對所有RGB像素值執行PCA,得到3*3的協方差矩陣;對特征值進行波動,乘以一個服從均值為0、標准差為0.1高斯分布的隨機變量,得到一個新的協方差矩陣,從而實現一種濾鏡的效果。
高級增強技術
條件型生成對抗網絡(conditional GANs)能將圖片從一個領域轉換到另一個領域中,這種方法雖然Robust但是計算密集類型。
第二種:主動學習、半監督學習(使用原樣本空間已有的樣本)
這里的半監督學習包含純半監督學習和直推學習(請移步:https://www.cnblogs.com/CJT-blog/p/10276310.html)。
值得注意的是,主動學習是人工賦予標簽,而此處半監督學習可以用一定的算法為無標簽樣本打上高質量標簽。
個人體驗認為,在一些圖像任務中,性能較好的時候,第一種方法帶來提升不如第二種大,而且需要小心注意生成樣本質量。
上述分類摻雜個人理解,有問題望不吝賜教。