Szkolenie danych Dicom nie udało się z pomocą pytorch

0

Pytanie

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()
dataloader medical-imaging nifti pytorch
2021-11-24 06:40:12
1

Najlepsza odpowiedź

1

W zależności od tego, jaki modalność twoje zdjęcia, to może być związane z tym, że dane obrazu nie są prawidłowe, klinicznie istotne, niezależne od maszyny/dostawcy jednostki do każdej normalizacji ML-szkolenia 0-1.

Zazwyczaj w plikach dicom rzeczywiste wartości danych surowych nie są one potrzebują traktowanie...

Na przykład, jeśli próbujesz trenować na danych tomografii komputerowej, to jednostki, na których trzeba próbować trenować swój model, są liczby Хаундсфилда (HU). (Co ukrywasz o tym, CT i dicom, aby uzyskać pewne informacje).

Jednak surowe dane CT dicom mogą być małe lub duże końcowymi, prawdopodobnie trzeba będzie zastosować korekcję nachylenia/przechwytywania, a także, być może trzeba będzie zastosować tabele wyszukiwania dla przekształcenia ich w liczby HU. ...ie może stać się skomplikowane i kłopotliwe. (znowu trochę co ukrywasz ...masz przynajmniej powinno być trochę informacji o tym, jeśli próbujesz coś zrobić z formatami obrazów medycznych).

Nie jestem pewien, jak przetwarzać dane nifti, jednak, na szczęście dla plików dicom, korzystających z pydicom, to konwersja może być spełniony dla ciebie biblioteką, korzystając z (zazwyczaj) wyzwanie pydicom.pixel_data_handlers.util.apply_modality_lut:


dcm = pydicom.dcmread(my_ct_dicom_file)
data_in_HU = pydicom.pixel_data_handlers.util.apply_voi_lut(
    dcm.pixel_array,
    dcm
)
2021-11-26 19:55:55

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................