乾貨 | 影像資料增強實戰

磐創AI發表於2018-11-21

乾貨 | 影像資料增強實戰

譯者 | 小韓

編輯 | 安可

【磐創AI導讀】:本文講解了影像資料增強實戰。想要獲取更多的機器學習、深度學習資源,歡迎大家點選上方藍字關注我們的公眾號:磐創AI。

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

需要列出所有可以想到的影像增強的方法,並將這些方法進行組合,嘗試和改善影像分類模型的效能。一些較簡單的增強方法有翻轉,平移,旋轉,縮放,分離rgb顏色通道和新增噪聲。更好一些的增強方法是生成對抗網路模型,有時交替使用遺傳演算法和生成對抗網路。 還有一些創造性的方法,比如將 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資料集生成的一些影像。

乾貨 | 影像資料增強實戰


正如上圖看到的那樣,它們看起來確實像379 我想擴充套件網路結構來支援的300x300x3尺寸的輸出,而不是28x28x1 MNIST的數字,但是遇到了一些麻煩。 但是,我對這項研究感到非常興奮,並期待繼續這項研究!

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

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555081/viewspace-2220970/,如需轉載,請註明出處,否則將追究法律責任。

相關文章