Mam problem z nauką modeli Pytorch. Staram się trenować swój model Pytorch, wykorzystując dane dicom i nifti GT, Jednak rozmiar pliku wagi śmiesznie mała, bo model szkolenia nie odbywa się normalnie.
Użyłem sieciowy model Unet++
Myślę, że jest problem z bootloader danych. Ale ja nie mogę to naprawić...
Byłbym wdzięczny, gdybyście mogli mi pomóc.
Format pliku nieobsługiwany obrazu dicom, a format obrazu GT-nifti
w moim даталодере
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
i Kod pociągi-to
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()