基于pytorch實現(xiàn)對圖片進行數(shù)據(jù)增強
背景
在進行機器學習的任務中,我們的訓練數(shù)據(jù)往往是有限的,在有限的數(shù)據(jù)集上獲得較好的模型訓練結(jié)果,我們不僅要在模型結(jié)構(gòu)上下功夫,另一方面也需要對數(shù)據(jù)集進行數(shù)據(jù)增強
圖片數(shù)據(jù)增強
圖像數(shù)據(jù)增強是一種在訓練機器學習和深度學習模型時常用的策略,尤其是在計算機視覺領域。具體而言,它通過創(chuàng)建和原始圖像稍有不同的新圖像來擴大訓練集。 數(shù)據(jù)增強的主要目標有以下幾點:
- 解決過擬合:過擬合是指模型在訓練集上表現(xiàn)得過于優(yōu)秀,但是在測試集(即未見過的新數(shù)據(jù))上表現(xiàn)差的現(xiàn)象。一個常見的解決過擬合的策略是增加訓練數(shù)據(jù)。數(shù)據(jù)增強通過在原有訓練數(shù)據(jù)的基礎上增加各種變化的數(shù)據(jù),有效地增大了訓練集。
- 提高模型的泛化能力:一些數(shù)據(jù)增強手段(如旋轉(zhuǎn)、縮放、平移等)可以模擬一些真實場景中會產(chǎn)生的視覺變化,有助于訓練模型對這些場景變化更具有魯棒性,從而提高模型的泛化能力。
- 引入可控制的噪聲:一些數(shù)據(jù)增強方法,如隨機裁剪、像素值噪聲、顏色偏移等,可以在一定程度上模擬真實環(huán)境中的噪聲。以這樣的方式引入的噪聲可以使模型更健壯,并且增強模型的噪聲容忍力。
- 視覺不變性:通過像翻轉(zhuǎn)、旋轉(zhuǎn)這樣的變換,數(shù)據(jù)增強可以幫助模型在任何視覺角度下都能正確地識別出相同的對象,輸入圖像進行各種方式的扭曲后仍能被模型準確識別出來,增強了模型的視覺不變性。 總的來說,圖片數(shù)據(jù)增強可以讓模型學習到更多樣性的數(shù)據(jù),可以在一定程度上提升模型的識別準確率,更好的適應實際環(huán)境中樣本的多樣性,從而提高模型的泛化能力。
代碼實現(xiàn)
我們使用torchvision的transforms庫對圖片數(shù)據(jù)進行數(shù)據(jù)增強,使用一張卡比巴拉的圖片
首先讀取圖片數(shù)據(jù),以下是準備工作
from PIL import Image import numpy as np import torchvision.transforms as tfs import matplotlib.pyplot as plt img_path = r"D:\CSDN_point\1_4\kabibala.jpg" img = Image.open(img_path) print("the shape of img is {}".format(np.array(img).shape))
圖片伸縮
img_re = tfs.Resize((500,1000))(img) plt.imshow(img_re) plt.show()
tfs.Reszie((500,1000))把圖像的高和寬分別拉伸到500像素和1000像素
圖片裁剪
img_crop = tfs.RandomCrop(500)(img) plt.imshow(img_crop) plt.show()
tfs.RandomCrop(500)隨機截取圖片大小的區(qū)域
中心裁剪
img_crop_cen = tfs.CenterCrop(700)(img) plt.imshow(img_crop_cen) plt.show()
tfs.CenterCrop(700)裁剪圖片中心位置大小的區(qū)域
隨機水平翻轉(zhuǎn)
# 隨機水平翻轉(zhuǎn),概率是0.5 img_hori = tfs.RandomHorizontalFlip()(img) # 隨機垂直翻轉(zhuǎn),概率是0.5 img_ver = tfs.RandomVerticalFlip()(img) plt.subplot(1,2,1) plt.imshow(img_hori) plt.title("RandomHorizontalFlip") plt.subplot(1,2,2) plt.imshow(img_ver) plt.title("RandomVerticalFlip") plt.show()
隨機改變圖片亮度、對比度和色相
img_j = tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)(img) plt.imshow(img_j) plt.show()
tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)中參數(shù)的含義:
brightness=0.5
:亮度的浮點數(shù)系數(shù),brightness系數(shù)在 [max(0, 1 - brightness), 1 + brightness] 的范圍內(nèi)隨機選擇。例如,brightness=0.5,就表明亮度在 [0.5, 1.5] 的范圍內(nèi)隨機選擇。contrast=0.5
:對比度的浮點數(shù)系數(shù)。對比度系數(shù)在 [max(0, 1 - contrast), 1 + contrast] 的范圍內(nèi)隨機選擇。例如,contrast=0.5,就表明對比度在 [0.5, 1.5] 的范圍內(nèi)隨機選擇。hue=0.5
:色相的浮點數(shù)系數(shù)。色相系數(shù)在 [-hue, hue] 的范圍內(nèi)隨機選擇。例如,hue=0.5,就表明色相在 [-0.5, 0.5] 的范圍內(nèi)隨機選擇。
多變換整合
可以使用Compose模塊將多個變換進行整合
# 將多個變換整合到my_trans my_trans = tfs.Compose([tfs.Resize(800),tfs.RandomHorizontalFlip(),tfs.RandomCrop(500),tfs.RandomVerticalFlip(),tfs.ColorJitter(brightness=0.5,contrast=0.5,hue=0.5)]) _,fig = plt.subplots(3,3) for i in range(3): for j in range(3): fig[i][j].imshow(my_trans(img)) plt.axis('off') plt.show()
以上就是基于pytorch實現(xiàn)對圖片進行數(shù)據(jù)增強的詳細內(nèi)容,更多關于pytorch圖片數(shù)據(jù)增強的資料請關注腳本之家其它相關文章!
相關文章
python3編寫ThinkPHP命令執(zhí)行Getshell的方法
這篇文章主要介紹了python3編寫ThinkPHP命令執(zhí)行Getshell的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02總結(jié)分析python數(shù)據(jù)化運營關聯(lián)規(guī)則
本文內(nèi)容主要介紹了python數(shù)據(jù)化運營中關聯(lián)規(guī)則的一般應用場景,以及關聯(lián)規(guī)則的實現(xiàn),并例舉了適應的應用示例,方便大家更直觀的理解應用2021-08-08關于adfuller函數(shù)返回值的參數(shù)說明與記錄
這篇文章主要介紹了關于adfuller函數(shù)返回值的參數(shù)說明與記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11