使用Pytorch進(jìn)行圖像增強(qiáng)的綜合教程
最近,在研究項(xiàng)目中,開(kāi)始了解圖像增強(qiáng)技術(shù)的重要性。該項(xiàng)目的目標(biāo)是訓(xùn)練一個(gè)能夠重建原始圖像的魯棒生成模型。所解決的問(wèn)題是異常檢測(cè),這是一個(gè)相當(dāng)具有挑戰(zhàn)性的問(wèn)題,因?yàn)閿?shù)據(jù)量很小,而且模型不足以單獨(dú)完成所有工作。
常見(jiàn)的場(chǎng)景是使用可用于訓(xùn)練的正常圖像訓(xùn)練網(wǎng)絡(luò)模型,并在包含正常圖像和異常圖像的測(cè)試集上評(píng)估其性能。
最初的假設(shè)是,生成模型應(yīng)該很好地捕捉正態(tài)分布,但同時(shí),它應(yīng)該無(wú)法重建異常樣本。如何驗(yàn)證這一假設(shè)?我們可以看到重建誤差,異常圖像的重建誤差應(yīng)該較高,而正常樣本的重建誤差應(yīng)該較低。
在這篇文章中,將列出最好的數(shù)據(jù)增強(qiáng)技術(shù),以增加數(shù)據(jù)集中圖像的大小和多樣性。其主要目的是提高模型的性能和泛化能力。
我們將探索簡(jiǎn)單的變換,如旋轉(zhuǎn)、裁剪和高斯模糊,以及更復(fù)雜的技術(shù),如高斯噪聲和隨機(jī)塊。
圖像增強(qiáng)技術(shù):
1、簡(jiǎn)單變換
· 調(diào)整大小
· 灰度
· 規(guī)范化
· 隨機(jī)旋轉(zhuǎn)
· 中心裁剪
· 隨機(jī)裁剪
· 高斯模糊
2、更先進(jìn)的技術(shù)
· 高斯噪聲
· 隨機(jī)塊
· 中心區(qū)域
1、表面裂紋數(shù)據(jù)集簡(jiǎn)介
在本教程中,我們將使用表面裂紋檢測(cè)數(shù)據(jù)集。你可以在此處或Kaggle上下載數(shù)據(jù)集:
從名稱(chēng)可以推斷,它提供了有裂紋和無(wú)裂紋曲面的圖像。因此,它可以作為異常檢測(cè)任務(wù)的數(shù)據(jù)集,其中異常類(lèi)由有裂紋的圖像表示,而正常類(lèi)由無(wú)裂紋的表面表示。
該數(shù)據(jù)集包含4000幅有缺陷和無(wú)缺陷表面的彩色圖像。這兩個(gè)類(lèi)都有訓(xùn)練和測(cè)試集。此外,以227×227像素的分辨率獲取每個(gè)數(shù)據(jù)集圖像。
2、簡(jiǎn)單變換
本節(jié)包括torchvision中可用的不同轉(zhuǎn)換模塊。在深入研究之前,我們從訓(xùn)練數(shù)據(jù)集中導(dǎo)入模塊和一個(gè)沒(méi)有缺陷的圖像。
from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as T
plt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('../input/surface-crack-detection/Negative/00026.jpg'))
torch.manual_seed(0)
data_path = '../input/surface-crack-detection/'
diz_class = {'Positive':'Crack','Negative':'No crack'}
讓我們顯示圖像的尺寸:
np.a(chǎn)sarray(orig_img).shape #(227, 227, 3)
這意味著我們有一個(gè)227x227的圖像,有3個(gè)通道。
調(diào)整大小
由于圖像具有很高的高度和寬度,因此在將其傳遞給神經(jīng)網(wǎng)絡(luò)之前,需要降低維數(shù)。例如,我們可以將227x227圖像調(diào)整為32x32和128x128圖像。
resized_imgs = [T.Resize(size=size)(orig_img) for size in [32,128]]
plot(resized_imgs,col_title=["32x32","128x128"])
值得注意的是,當(dāng)我們獲得一幅32x32的圖像時(shí),我們會(huì)失去分辨率,而128x128的尺寸似乎可以保持樣品的高分辨率。
灰度等級(jí)
RGB圖像可能很難管理。因此,將圖像轉(zhuǎn)換為灰度可能很有用:
gray_img = T.Grayscale()(orig_img)
plot([gray_img], cmap='gray', col_title=["Gray"])
規(guī)范化
規(guī)范化是一種有效的方法,可以加快基于神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的模型的計(jì)算速度,加快學(xué)習(xí)速度。規(guī)范化圖像有兩個(gè)步驟:
· 我們從每個(gè)輸入通道中減去通道平均值
· 稍后,我們將其除以通道標(biāo)準(zhǔn)差。
我們可以顯示原始圖像及其規(guī)范化版本:
normalized_img = T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))(T.ToTensor()(orig_img))
normalized_img = [T.ToPILImage()(normalized_img)]
plot(normalized_img, col_title=["Standard normalize"])
隨機(jī)旋轉(zhuǎn)
隨機(jī)旋轉(zhuǎn)方法以隨機(jī)角度旋轉(zhuǎn)圖像。
rotated_imgs = [T.RandomRotation(degrees=d)(orig_img) for d in range(50,151,50)]
plot(rotated_imgs, col_title=["Rotation 50","Rotation 100","Rotation 150"])
中心裁剪
我們使用T.CenterCrop方法裁剪圖像的中心部分,其中需要指定裁剪大小。
center_crops = [T.CenterCrop(size=size)(orig_img) for size in (128,64, 32)]
plot(center_crops,col_title=['128x128','64x64','32x32'])
當(dāng)圖像的邊界中有一個(gè)大背景,而分類(lèi)任務(wù)根本不需要這個(gè)背景時(shí),這種轉(zhuǎn)換非常有用。
隨機(jī)裁剪
我們沒(méi)有裁剪圖像的中心部分,而是通過(guò)T.RandomCrop方法隨機(jī)裁剪圖像的一部分,該方法將裁剪的輸出大小作為參數(shù)。
random_crops = [T.RandomCrop(size=size)(orig_img) for size in (832,704, 256)]
plot(random_crops,col_title=['832x832','704x704','256x256'])
高斯模糊
我們使用高斯核對(duì)圖像進(jìn)行高斯模糊變換。這種方法有助于降低圖像的清晰度和清晰度,然后將生成的圖像輸入到神經(jīng)網(wǎng)絡(luò)中,神經(jīng)網(wǎng)絡(luò)在樣本的學(xué)習(xí)模式方面變得更加穩(wěn)健。
blurred_imgs = [T.GaussianBlur(kernel_size=(51, 91), sigma=sigma)(orig_img) for sigma in (3,7)]
plot(blurred_imgs)
3、更先進(jìn)的技術(shù)
前面展示了PyTorch提供的簡(jiǎn)單轉(zhuǎn)換示例,F(xiàn)在,我們將重點(diǎn)討論從零開(kāi)始實(shí)現(xiàn)的更復(fù)雜的技術(shù)。
高斯噪聲
高斯噪聲是一種常用的向整個(gè)數(shù)據(jù)集添加噪聲的方法,它迫使模型學(xué)習(xí)數(shù)據(jù)中包含的最重要信息。
它包括注入高斯噪聲矩陣,高斯噪聲矩陣是從高斯分布中提取的隨機(jī)值矩陣。稍后,我們將在0和1之間剪裁樣本。噪聲因子越高,圖像的噪聲越大。
def add_noise(inputs,noise_factor=0.3):
noisy = inputs+torch.randn_like(inputs) * noise_factor
noisy = torch.clip(noisy,0.,1.)
return noisy
noise_imgs = [add_noise(T.ToTensor()(orig_img),noise_factor) for noise_factor in (0.3,0.6,0.9)]
noise_imgs = [T.ToPILImage()(noise_img) for noise_img in noise_imgs]
plot(noise_imgs, col_title=["noise_factor=0.3","noise_factor=0.6","noise_factor=0.9"])
隨機(jī)塊
正方形補(bǔ)丁隨機(jī)應(yīng)用在圖像中。這些補(bǔ)丁的數(shù)量越多,神經(jīng)網(wǎng)絡(luò)解決問(wèn)題的難度就越大。
def add_random_boxes(img,n_k,size=32):
h,w = size,size
img = np.a(chǎn)sarray(img)
img_size = img.shape[1]
boxes = []
for k in range(n_k):
y,x = np.random.randint(0,img_size-w,(2,))
img[y:y+h,x:x+w] = 0
boxes.a(chǎn)ppend((x,y,h,w))
img = Image.fromarray(img.a(chǎn)stype('uint8'), 'RGB')
return img
blocks_imgs = [add_random_boxes(orig_img,n_k=i) for i in (10,20)]
plot(blocks_imgs,col_title=["10 black boxes","20 black boxes"])
中心區(qū)域
這是一種非常簡(jiǎn)單的方法,可以使模型更一般化。它包括在圖像的中心區(qū)域添加一個(gè)補(bǔ)丁塊。
def add_central_region(img,size=32):
h,w = size,size
img = np.a(chǎn)sarray(img)
img_size = img.shape[1]
img[int(img_size/2-h(huán)):int(img_size/2+h),int(img_size/2-w):int(img_size/2+w)] = 0
img = Image.fromarray(img.a(chǎn)stype('uint8'), 'RGB')
return img
central_imgs = [add_central_region(orig_img,size=s) for s in (32,64)]
plot(central_imgs,col_title=["32","64"])
最后的想法:
希望你發(fā)現(xiàn)本教程很有用。目的是對(duì)基于神經(jīng)網(wǎng)絡(luò)的圖像增強(qiáng)方法進(jìn)行概述,以解決模型的泛化問(wèn)題。代碼位于GitHub上:
感謝閱讀!
原文標(biāo)題 : 使用Pytorch進(jìn)行圖像增強(qiáng)的綜合教程

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書(shū)】精準(zhǔn)測(cè)量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 大廠紛紛入局,百度、阿里、字節(jié)搶奪Agent話(huà)語(yǔ)權(quán)
- 3 深度報(bào)告|中國(guó)AI產(chǎn)業(yè)正在崛起成全球力量,市場(chǎng)潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國(guó)家數(shù)據(jù)局局長(zhǎng)劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷(xiāo)中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰(shuí)在領(lǐng)跑?
- 9 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過(guò)于簡(jiǎn)單
- 10 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用