1.下载数据集
!wget -N https://raw.githubusercontent.com/eebowen/Transfer-Learning-and-Deep-Neural-Network-Acceleration-for-Image-Classification/master/nntools.py
!wget -N https://www2.eecs.berkeley.edu/Research/Projects/CS/vision/bsds/BSDS300-images.tgz
!tar -zxvf BSDS300-images.tgz
dataset_root_dir = './BSDS300/images/'
%matplotlib inline
%matplotlib inline
import os
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.data as td
import torchvision as tv
from PIL import Image
import matplotlib.pyplot as plt
import time
2.训练集加噪
标准差为30的高斯噪声180*180彩铅(左上角或者随机位置)
class NoisyBSDSDataset(td.Dataset):
def __init__(self, root_dir, mode='train', image_size=(180, 180), sigma=30):
super(NoisyBSDSDataset, self).__init__()
self.mode = mode
self.image_size = image_size
self.sigma = sigma
self.images_dir = os.path.join(root_dir, mode)
self.files = os.listdir(self.images_dir)
def __len__(self):
return len(self.files)
def __repr__(self):
return "NoisyBSDSDataset(mode={}, image_size={}, sigma={})". \
format(self.mode, self.image_size, self.sigma)
def __getitem__(self, idx):
img_path = os.path.join(self.images_dir, self.files[idx])
clean = Image.open(img_path).convert('RGB')
# 随机裁剪
#i = np.random.randint(clean.size[0] - self.image_size[0])
#j = np.random.randint(clean.size[1] - self.image_size[1])
i=0
j=0
clean = clean.crop([i, j, i+self.image_size[0], j+self.image_size[1]])
transform = tv.transforms.Compose([
# 转换张量
tv.transforms.ToTensor(),
# [−1, 1]
tv.transforms.Normalize((.5, .5, .5), (.5, .5, .5))
])
clean = transform(clean)
noisy = clean + 2 / 255 * self.sigma * torch.randn(clean.shape)
return noisy, clean
def myimshow(image,ax = plt):
image = image.to('cpu').numpy()
image = np.moveaxis(image,[0,1,2],[2,0,1])
image = (image + 1) / 2
image[image < 0] = 0
image[image > 1] = 1
h = ax.imshow(image)
ax.axis('off')
return h
导入训练集和测试集进入
train_set= NoisyBSDSDataset(dataset_root_dir)
test_set = NoisyBSDSDataset(dataset_root_d

最低0.47元/天 解锁文章
527

被折叠的 条评论
为什么被折叠?



