圖像數據增強實戰

圖像數據增強實戰

譯者 | 小韓

我目前正在做圖像數據增強的深度和有效性的研究。這項研究的目的是學習怎樣增加只有有限或少量數據的數據集大小,增強訓練的卷積網絡模型的魯棒性。

需要列出所有可以想到的圖像增強的方法,並將這些方法進行組合,嘗試和改善圖像分類模型的性能。一些較簡單的增強方法有翻轉,平移,旋轉,縮放,分離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的數字,但是遇到了一些麻煩。 但是,我對這項研究感到非常興奮,並期待繼續這項研究!

感謝您閱讀本文,希望您現在知道如何實現基本的數據擴充以改進您的分類模型!

翻譯自:https://towardsdatascience.com/image-augmentation-examples-in-python-d552c26f2873

對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站http://www.panchuang.net 我們的公眾號:磐創AI。


分享到:


相關文章: