Dati Dicom formazione fallito da pytorch

0

Domanda

Ho un problema sulla formazione il Pytorch modelli. Sto cercando di addestrare il mio Pytorch modello utilizzando i dati dicom e nifti GT Tuttavia, la dimensione, il peso del file è ridicolmente piccolo, perché il modello di formazione non viene eseguita normalmente.

Ho usato il modello di rete Unet++

Penso che ci sia un problema con il caricatore di dati. Ma io non riesco a prezzo fisso è...

Sarei grato se poteste aiutarmi.

Un file di immagine Raw in formato dicom e GT formato immagine è nifti

nel mio 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

e Ferroviaria di Codice

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

Migliore risposta

1

A seconda che modalità le immagini, questo potrebbe essere a causa di non convertire i dati di immagine corretta, clinicamente rilevante, macchina/produttore indipendente, unità prima di qualsiasi ML di formazione 0-1 normalizzazione.

In genere nel file dicom, i dati raw effettivi valori non sono che hanno bisogno di trattamento...

Per esempio, se si sta cercando di formare sul CT di dati, quindi le unità si dovrebbe essere cercando di addestrare il vostro modello sono Houndsfield s (HU) numeri. (Fare un google che, CT e dicom per ottenere un po ' di sfondo).

Tuttavia raw CT di dati dicom potrebbe essere poco o big endian, probabilmente ha bisogno di un pendio/intercettare la correzione applicata e potrebbe anche bisogno di avere look-up table applicati per la conversione in HU numeri. ...vale a dire può ottenere complicato e confuso. (di nuovo fare un po 'di googling ...almeno si dovrebbe avere un po' di background su questo, se stiamo cercando di fare qualcosa con i medici formati di immagine).

Io non sono sicuro di come processo nifti dati, tuttavia, fortunatamente per i file dicom utilizzando pydicom questa conversione può essere fatta per voi da parte della biblioteca, utilizzando (in genere) una chiamata a 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

In altre lingue

Questa pagina è in altre lingue

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