吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

數據擴充(Data augmentation)

大部分的計算機視覺任務使用很多的數據,所以數據擴充是經常使用的一種技巧來提高計算機視覺系統的表現。我認為計算機視覺是一個相當複雜的工作,你需要輸入圖像的像素值,然後弄清楚圖片中有什麼,似乎你需要學習一個複雜方程來做這件事。

在實踐中,更多的數據對大多數計算機視覺任務都有所幫助,不像其他領域,有時候得到充足的數據,但是效果並不怎麼樣。但是,當下在計算機視覺方面,計算機視覺的主要問題是沒有辦法得到充足的數據。

對大多數機器學習應用,這不是問題,但是對計算機視覺,數據就遠遠不夠。所以這就意味著當你訓練計算機視覺模型的時候,數據擴充會有所幫助,這是可行的,無論你是使用遷移學習,使用別人的預訓練模型開始,或者從源代碼開始訓練模型。讓我們來看一下計算機視覺中常見的數據擴充的方法。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

或許最簡單的數據擴充方法就是垂直鏡像對稱,假如,訓練集中有上面這張圖片,然後將其翻轉得到右邊的圖像。對大多數計算機視覺任務,左邊的圖片是貓,然後鏡像對稱仍然是貓,如果鏡像操作保留了圖像中想識別的物體的前提下,這是個很實用的數據擴充技巧。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

另一個經常使用的技巧是隨機裁剪,給定一個數據集,然後開始隨機裁剪,可能修剪這個(編號1),選擇裁剪這個(編號2),這個(編號3),可以得到不同的圖片放在數據集中,你的訓練集中有不同的裁剪。隨機裁剪並不是一個完美的數據擴充的方法,如果你隨機裁剪的那一部分(紅色方框標記部分,編號4),這部分看起來不像貓。但在實踐中,這個方法還是很實用的,隨機裁剪構成了很大一部分的真實圖片。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

鏡像對稱和隨機裁剪是經常被使用的。

當然,理論上,你也可以使用旋轉,剪切(shearing:此處並非裁剪的含義,圖像僅水平或垂直座標發生變化)圖像,可以對圖像進行這樣的扭曲變形,引入很多形式的局部彎曲等等。當然使用這些方法並沒有壞處,儘管在實踐中,因為太複雜了所以使用的很少。

第二種經常使用的方法是彩色轉換,有這樣一張圖片,然後給R、G和B三個通道上加上不同的失真值。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

在這個例子中(編號1),要給紅色、藍色通道加值,給綠色通道減值。紅色和藍色會產生紫色,使整張圖片看起來偏紫,這樣訓練集中就有失真的圖片。為了演示效果,我對圖片的顏色進行改變比較誇張。在實踐中,對R、G和B的變化是基於某些分佈的,這樣的改變也可能很小。

這麼做的目的就是使用不同的R、G和B的值,使用這些值來改變顏色。在第二個例子中(編號2),我們少用了一點紅色,更多的綠色和藍色色調,這就使得圖片偏黃一點。

在這(編號3)使用了更多的藍色,僅僅多了點紅色。在實踐中,R、G和B的值是根據某種概率分佈來決定的。這麼做的理由是,可能陽光會有一點偏黃,或者是燈光照明有一點偏黃,這些可以輕易的改變圖像的顏色,但是對貓的識別,或者是內容的識別,以及標籤y,還是保持不變的。所以介紹這些,顏色失真或者是顏色變換方法,這樣會使得你的學習算法對照片的顏色更改更具魯棒性。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

這是對更高級的學習者的一些注意提醒,你可以不理解我用紅色標出來的內容。

對R、G和B有不同的採樣方式,其中一種影響顏色失真的算法是PCA,即主成分分析,但具體顏色改變的細節在AlexNet的論文中有時候被稱作PCA顏色增強,PCA顏色增強的大概含義是,比如說,如果你的圖片呈現紫色,即主要含有紅色和藍色,綠色很少,然後PCA顏色增強算法就會對紅色和藍色增減很多,綠色變化相對少一點,所以使總體的顏色保持一致。如果這些你都不懂,不需要擔心,可以在網上搜索你想要了解的東西,如果你願意的話可以閱讀AlexNet論文中的細節,你也能找到PCA顏色增強的開源實現方法,然後直接使用它。

你可能有存儲好的數據,你的訓練數據存在硬盤上,然後使用符號,這個圓桶來表示你的硬盤。如果你有一個小的訓練數據,你可以做任何事情,這些數據集就夠了。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

但是你有特別大的訓練數據,接下來這些就是人們經常使用的方法。你可能會使用CPU線程,然後它不停的從硬盤中讀取數據,所以你有一個從硬盤過來的圖片數據流。你可以用CPU線程來實現這些失真變形,可以是隨機裁剪、顏色變化,或者是鏡像。但是對每張圖片得到對應的某一種變形失真形式,看這張圖片(編號1),對其進行鏡像變換,以及使用顏色失真,這張圖最後會顏色變化(編號2),從而得到不同顏色的貓。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

與此同時,CPU線程持續加載數據,然後實現任意失真變形,從而構成批數據或者最小批數據,這些數據持續的傳輸給其他線程或者其他的進程,然後開始訓練,可以在CPU或者GPU上實現訓一個大型網絡的訓練。

吳恩達深度學習筆記(90)-數據擴充(Data augmentation)

常用的實現數據擴充的方法是使用一個線程或者是多線程,這些可以用來加載數據,實現變形失真,然後傳給其他的線程或者其他進程,來訓練這個(編號2)和這個(編號1),可以並行實現。

這就是數據擴充,與訓練深度神經網絡的其他部分類似,在數據擴充過程中也有一些超參數,比如說顏色變化了多少,以及隨機裁剪的時候使用的參數。

與計算機視覺其他部分類似,一個好的開始可能是使用別人的開源實現,瞭解他們如何實現數據擴充。當然如果你想獲得更多的不變特性,而其他人的開源實現並沒有實現這個,你也可以去調整這些參數。因此,我希望你們可以使用數據擴充使你的計算機視覺應用效果更好。


分享到:


相關文章: