天天看點

少資料量情況下的深度學習模型訓練效果提升技巧

背景

在進行目辨別别的過程中,擷取大量的資料是一件比較困難的事,但好的模型往往是基于大的資料集訓練而來的。資料量較少時,模型性能難以達到理想的狀态。尤其是在做項目的過程中,使用者上傳的測試資料與我們用于訓練的資料之間的差異難以把控,可能會因為一些不相幹的因素(角度不同,模糊度不同,目标大小不同等)的幹擾而導緻識别的效果不夠理想。是以,需要進一步的豐富訓練資料的表現,進而提高模型的魯棒性,達到更好的識别目标的目的。

少資料量情況下的深度學習模型訓練效果提升技巧

核心技術與架構圖

少資料量情況下的深度學習模型訓練效果提升技巧

針對不同的資料,應根據資料和待識别目标的特點對資料集進行擴充,目前大多數目辨別别架構都做了相關的資料擴充,但這些資料擴充的方式不一定适合自己的訓練資料,是以要結合自己資料,避免重複和無意義的操作。

少資料量情況下的深度學習模型訓練效果提升技巧
少資料量情況下的深度學習模型訓練效果提升技巧

技術優勢

少資料量情況下的深度學習模型訓練效果提升技巧

相較于原始資料,擴充後的資料在形态和細節上更加豐富,重要特征更加明顯,可避免不相幹特征對重要特征的幹擾。尤其是當待識别的目标較小,模糊不清時,通過相關的擴充技術,可讓訓練出的模型參數更優。即使待識别的圖像存在一些缺陷,也能夠準确的識别出目标。

少資料量情況下的深度學習模型訓練效果提升技巧

技術實作

少資料量情況下的深度學習模型訓練效果提升技巧

以識别手機中的固定标志為例:

下圖為一張手機圖檔,上邊有四個固定的标志,我們的目的是識别出這四個标志。由于根據原始資料訓練出的模型的識别效果較差,是以對原始資料進行多種變換,将資料集進行擴充。

少資料量情況下的深度學習模型訓練效果提升技巧

1

旋轉

random_angle = np.random.randint(1, 360)
img_rote      
少資料量情況下的深度學習模型訓練效果提升技巧

2

翻轉(水準/垂直)

image = image.transpose(Image.FLIP_LEFT_RIGHT)      

3

随機裁剪

crop_win_size = np.random.randint(250, 360)
random_region = ((image_width - crop_win_size) >>1, (image_height - crop_win_size) >>1, (image_width + crop_win_size) >>1, (image_height + crop_win_size) >>1)      
少資料量情況下的深度學習模型訓練效果提升技巧

4

縮放

image = image.resize((nw, nh), Image.BICUBIC)
new_image = Image.new('RGB', target_size, (128, 128, 128))
new_image.paste(image, ((w - nw) // 2, (h - nh) // 2))      
少資料量情況下的深度學習模型訓練效果提升技巧

5

随機色彩抖動

random_factor = np.random.randint(0, 31) / 10.
img_color = ImageEnhance.Color(image).enhance(random_factor) # 調整圖像的飽和度
img_brightness = ImageEnhance.Brightness(color_image).enhance(random_factor)# 調整圖像的亮度
img_contrast = ImageEnhance.Contrast(brightness_image).enhance(random_factor)# 調整圖像的對比度
img_sharpness = ImageEnhance.Sharpness(contrast_image).enhance(random_factor)# 調整圖像銳化度      
少資料量情況下的深度學習模型訓練效果提升技巧

6

模糊化

img_blur      
少資料量情況下的深度學習模型訓練效果提升技巧

7

透明化

b_channel, g_channel, r_channel = cv2.split(image)
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 255
alpha_channel[:, :int(b_channel.shape[0])] = 180
img_BGRA      
少資料量情況下的深度學習模型訓練效果提升技巧

8

分塊

img_block = image[int(h*1 / 9):int(h*1 / 2), :int(w *9/ 24), :]      
少資料量情況下的深度學習模型訓練效果提升技巧

效果展示

少資料量情況下的深度學習模型訓練效果提升技巧

下圖分别展示了未經資料擴充和資料擴充後訓練出模型對兩張新的圖像的測試效果,可看出,後者對目标的識别精準度明顯得到了提升,尤其是在模糊的小目标的識别上表現更好。

少資料量情況下的深度學習模型訓練效果提升技巧

1

少資料量情況下的深度學習模型訓練效果提升技巧

2

3

少資料量情況下的深度學習模型訓練效果提升技巧

4

少資料量情況下的深度學習模型訓練效果提升技巧
少資料量情況下的深度學習模型訓練效果提升技巧

總結

少資料量情況下的深度學習模型訓練效果提升技巧

資料擴充已被證明是一種有效的提高模型魯棒性的方法,擴充的方法也有很多,但需要結合自己的資料和目标的特征進行具體分析,選擇合适的方法,才能有效的提升模型的性能。

少資料量情況下的深度學習模型訓練效果提升技巧