나는 문제에 대한 훈련 Pytorch 모델입니다. 저는 훈련을 위해 노력하고 내 Pytorch 모델을 사용하여 dicom 데이터 및 nifti GT 그러나 크기의 무게 파일의 터무니없이 작기 때문에 모델을 훈련 정상적으로 수행되지 않.
내가 사용하는 네트워크 모델 Unet++
나는 생각한 문제가 있으로 데이터 loader. 하지만 그럴 수 없에는 책상,무료 신문,전화 등이 그것...
나는 그것을 감사하겠는 경우에 당신은 나를 도울 수 없습니다.
Raw 이미지 파일의 형식은 dicom 및 GT 이미지 형식은 nifti
내 dataloder
def __getitem__(self, index):
image_path = self.image_paths[index]
image_GT_path = image_path[:8]+'_'+image_path[8:12]+'.nii'
GT_path = self.GT_paths + image_GT_path
ds = dcmread(self.root+image_path)
image = ds.pixel_array.astype(np.float32)
image = torch.from_numpy(image.transpose(0,1)/255)
image = image.unsqueeze(0)
GT = nib.load(GT_path)
GT = GT.get_fdata(dtype=np.float32)
print(GT.shape)
GT = torch.from_numpy(GT.transpose(0,1))
GT = GT.unsqueeze(0)
return image, GT, image_path
과 코드를 기차
for epoch in range(self.num_epochs):
self.unet.train(True)
epoch_loss = 0
for i, (images, GT,empty) in enumerate(tqdm(self.train_loader)):
# GT : Ground Truth
images = images.to(self.device)
GT = GT.to(self.device)
# SR : Segmentation Result
SR = self.unet(images)
SR_probs = torch.sigmoid(SR)
SR_flat = SR_probs.view(SR_probs.size(0),-1)
GT_flat = GT.view(GT.size(0),-1)
loss =self.criterion(SR_flat,GT_flat)
# self.criterion=DiceLoss() #BCE not use
# loss = self.criterion(GT,SR_probs)
epoch_loss += loss.item()
train_losses.append(loss.item())
# Backprop + optimize
self.reset_grad()
loss.backward()
self.optimizer.step()