BrainTumorDet / dataprepare.py
luismidv's picture
Upload 611 files
551ffcd verified
import pandas as pd
import numpy as np
from torchvision import datasets
import pathlib
import splitfolders
from torchvision.transforms import transforms
import torchvision
import matplotlib.pyplot as plt
import torch
from torch.utils.data import DataLoader
from torch.utils import data
import copy
def load_data(dataset_directory):
dataset_directory = pathlib.Path(dataset_directory)
splitfolders.ratio(dataset_directory, output = 'brain', seed = 20,ratio = (0.9,0.05,0.05))
def make_transformations(dataset_directory):
dataset_directory = pathlib.Path(dataset_directory)
train_formations = transforms.Compose(
[
transforms.Resize((256,256)),
transforms.RandomVerticalFlip(p = 0.5),
transforms.RandomHorizontalFlip(p = 0.5),
transforms.RandomRotation(30),
transforms.ToTensor(),
]
)
train_set = torchvision.datasets.ImageFolder(dataset_directory.joinpath('train'), transform=train_formations)
train_set.transform
test_set = torchvision.datasets.ImageFolder(dataset_directory.joinpath('val'),transform=train_formations)
test_set.transform
datasets = [train_set,test_set]
return train_set, test_set
def luismi_transformations(dataset_directory):
dataset_directory = pathlib.Path(dataset_directory)
train_formations_final = transforms.Compose(
[
transforms.Resize((256,256)),
transforms.RandomVerticalFlip(p = 0.5),
transforms.RandomHorizontalFlip(p = 0.5),
transforms.RandomRotation(30),
transforms.ToTensor(),
transforms.Normalize(mean = [0.2451,0.2453, 0.2454], std =[0.2259,0.2259,0.2260])
]
)
train_set = torchvision.datasets.ImageFolder(dataset_directory.joinpath('train'), transform=train_formations_final)
test_transformations = transforms.Compose([
transforms.Resize((256,256)),
transforms.ToTensor(),
transforms.Normalize(mean = [0.2451,0.2453, 0.2454], std =[0.2259,0.2259,0.2260])
])
test_set = torchvision.datasets.ImageFolder(dataset_directory.joinpath('test'),transform=test_transformations)
dev_set = torchvision.datasets.ImageFolder(dataset_directory.joinpath('val'), transform=test_transformations)
return train_set, test_set, dev_set
def compute_mean_std(train_set):
loader = DataLoader(train_set, batch_size=64, shuffle=False)
mean = 0
std = 0
total_images = 0
for images,_ in loader:
images = images.view(images.size(0), images.size(1), -1)
mean += images.mean(2).sum(0)
std += images.std(2).sum(0)
total_images += images.size(0)
mean /= total_images
std /= total_images
return mean,std
def data_visualization(train_set, test_set, cols,rows):
labels_dict = {
0: 'Brain Tumor',
1: 'Healthy'
}
fig = plt.figure(figsize=(12,8))
for i in range(1,cols*rows + 1):
data_index = torch.randint(0, len(train_set), size=(1,)).item()
img,label = train_set[data_index]
fig.add_subplot(rows,cols, i)
plt.title(labels_dict[label])
img_np = img.numpy().transpose(1,2,0)
img_valid_range = np.clip(img_np,0,1)
plt.imshow(img_valid_range)
plt.suptitle('Brain images' , y = 0.95)
plt.show()
def data_loaders(train_set,test_set,dev_set):
train_load = DataLoader(train_set, batch_size=64, shuffle=True)
test_load = DataLoader(test_set, batch_size=64, shuffle=True)
dev_load = DataLoader(dev_set, batch_size=64, shuffle=True)
return train_load, test_load, dev_load