代码目录
数据集
https://www.kaggle.com/datasets/mateuszbuda/lgg-mri-segmentation
dataset.py
在这里插入代码片import os
import numpy as np
import glob
from PIL import Image
import cv2
import torchvision
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
import torch
import matplotlib.pyplot as plt
kaggle_3m='./kaggle_3m/'
dirs=glob.glob(kaggle_3m+'*')
#print(dirs)
#os.listdir('./kaggle_3m\\TCGA_HT_A61B_19991127')
data_img=[]
data_label=[]
for subdir in dirs:
dirname=subdir.split('\\')[-1]
for filename in os.listdir(subdir):
img_path=subdir+'/'+filename #图片的绝对路径
if 'mask' in img_path:
data_label.append(img_path)
else:
data_img.append(img_path)
#data_img[:5] #前几张图 和标签是否对应
#data_label[:5]
data_imgx=[]
for i in range(len(data_label)):#图片和标签对应
img_mask=data_label[i]
img=img_mask[:-9]+'.tif'
data_imgx.append(img)
#data_imgx
data_newimg=[]
data_newlabel=[]
for i in data_label:#获取只有病灶的数据
value=np.max(cv2.imread(i))
try:
if value>0:
data_newlabel.append(i)
i_img=i[:-9]+'.tif'
data_newimg.append(i_img)
except:
pass
#查看结果
#data_newimg[:5]
#data_newlabel[:5]
im=data_newimg[20]
im=Image.open(im)
#im.show(im)
im=data_newlabel[20]
im=Image.open(im)
#im.show(im)
#print("可用数据:")
#print(len(data_newlabel))
#print(len(data_newimg))
#数据转换
train_transformer=transforms.Compose([
transforms.Resize((256,256)),
transforms.ToTensor(),
])
test_transformer=transforms.Compose([
transforms.Resize((256,256)),
transforms.ToTensor()
])
class BrainMRIdataset(Dataset):
def __init__(self, img, mask, transformer):
self.img = img
self.mask = mask
self.transformer = transformer
def __getitem__(self, index):
img = self.img[index]
mask = self.mask[index]
img_open = Image.open(img)
img_tensor = self.transformer(img_open)
mask_open = Image.open(mask)
mask_tensor = self.transformer(mask_open)
mask_tensor = torch.squeeze(mask_tensor).type(torch.long)
return img_tensor, mask_tensor
def __len__(self):
return len(self.img)
s=1000#划分训练集和测试集
train_img=data_newimg[:s]
train_label=data_newlabel[:s]
test_img=data_newimg[s:]
test_label=data_newlabel[s:]
#加载数据
train_data=BrainMRIdataset(train_img,tr