影象資料增強實戰
by 小韓 (翻譯自:https://towardsdatascience.com/image-augmentation-examples-in-python-d552c26f2873)
我目前正在做影象資料增強的深度和有效性的研究。 這項研究的目的是學習怎樣增加只有有限或少量資料的資料集大小,增強訓練的卷積網路模型的魯棒性。需要列出所有可以想到的影象增強的方法,並將這些方法進行組合,嘗試和改善影象分類模型的效能。 一些較簡單的增強方法有翻轉,平移,旋轉,縮放,分離r,g,b顏色通道和新增噪聲。 更好一些的增強方法是生成對抗網路模型,有時交替使用遺傳演算法和生成對抗網路。 還有一些創造性的方法,比如將 Instagram 樣式的高亮濾鏡應用於影象,應用隨機區域銳化濾鏡,以及基於聚類技術新增平均影象。 本文將介紹怎樣使用 NumPy 對影象進行擴充。
下面列出了一些擴充技術的說明,如果你能想到任何其他方法來增強影象,提高影象分類器的質量,請留言一起討論。
增強
所有的程式碼都沒有使用 OpenCV 庫,只使用了 Numpy。
載入影象
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img = Image.open(’./NIKE.png’)
img = np.array(img)
plt.imshow(img)
plt.show()
翻轉(Flipping
翻轉影象是最流行的影象資料增強方法之一。 這主要是由於翻轉影象的程式碼比較簡單,而且對於大多數問題而言,翻轉影象會增強模型的效能。 下面的模型可以被認為是看到左鞋而不是右鞋,因此通過這種資料增加,模型對於看到鞋的潛在變化變得更加有魯棒性。
用 Numpy 翻轉
flipped_img = np.fliplr(img)
plt.imshow(flipped_img)
plt.show()
平移(Translations)
很容易想象使用目標檢測的分類器進行平移可以增加它的效能。 好像這個分類模型試圖檢測鞋子何時在影象中而不是是否在影象中。 平移操作將有助於它看不到整個鞋子的情況下檢測出鞋子。
向左平移
for i in range(HEIGHT, 1, -1):
for j in range(WIDTH):
if (i < HEIGHT-20):
img[j][i] = img[j][i-20]
elif (i < HEIGHT-1):
img[j][i] = 0
plt.imshow(img)
plt.show()
向右平移
for j in range(WIDTH):
for i in range(HEIGHT):
if (i < HEIGHT-20):
img[j][i] = img[j][i+20]
plt.imshow(img)
plt.show()
向上平移
for j in range(WIDTH):
for i in range(HEIGHT):
if (j < WIDTH - 20 and j > 20):
img[j][i] = img[j+20][i]
else:
img[j][i] = 0
plt.imshow(img)
plt.show()
向下平移
for j in range(WIDTH, 1, -1):
for i in range(278):
if (j < 144 and j > 20):
img[j][i] = img[j-20][i]
plt.imshow(img)
plt.show()
噪聲(Noise)
噪聲是一種有趣的增強技術,我開始對這類操作變得更加熟悉。 我已經看過很多有趣的關於對抗網路訓練的論文,將一些噪聲加入到影象中,模型便無法正確分類。 我仍然在尋找能產生比下圖更好的新增噪聲的方法。 新增噪聲可能使畸變更明顯,並使模型更加穩健。
新增噪聲
noise = np.random.randint(5, size = (164, 278, 4), dtype = ‘uint8’)
for i in range(WIDTH):
for j in range(HEIGHT):
for k in range(DEPTH):
if (img[i][j][k] != 255):
img[i][j][k] += noise[i][j][k]
plt.imshow(img)
plt.show()
生成對抗網路(GAN)
我閱讀過很多將生成對抗網路用於資料增強的文獻,下面是我使用MNIST資料集生成的一些影象。
正如上圖看到的那樣,它們看起來確實像3,7和9。 我想擴充套件網路結構來支援的300x300x3尺寸的輸出,而不是28x28x1 MNIST的數字,但是遇到了一些麻煩。 但是,我對這項研究感到非常興奮,並期待繼續這項研究!
感謝您閱讀本文,希望您現在知道如何實現基本的資料擴充以改進您的分類模型!