Pytorch tarafından Dıcom veri eğitimi başarısız oldu

0

Soru

Pytorch modellerini eğitmekle ilgili bir sorunum var. Pytorch modelimi dıcom verilerini ve nıftı gt'yi kullanarak eğitmeye çalışıyorum, ancak ağırlık dosyasının boyutu gülünç derecede küçük çünkü model eğitimi normal şekilde yapılmıyor.

Ağ modeli Unet++kullandım

Veri yükleyiciyle ilgili bir sorun olduğunu düşünüyorum. Ama tamir edemiyorum...

Bana yardım ederseniz memnun olurum.

Raw görüntü dosyası formatı dıcom ve GT görüntü formatı nıftı'dir

veri kodlayıcımda

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

ve Tren Kodu

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

En iyi cevabı

1

Görüntülerinizin hangi modaliteye bağlı olduğuna bağlı olarak, bunun nedeni görüntü verilerinin herhangi bir ML eğitimi 0-1 normalizasyonundan önce doğru, klinik olarak alakalı, makine/satıcıdan bağımsız birimlere dönüştürülmemesinden kaynaklanıyor olabilir.

Genellikle dıcom dosyalarında gerçek ham veri değerleri öyle değildir-işlenmesi gerekir...

Örneğin, eğer sen çalışırken trende CT veri, daha sonra birimleri olmalı çalışırken, senin tren model üzerinde Houndsfield var (HU) numaraları. (Biraz arka plan almak için bu konuda bir google, CT ve dıcom yapın).

Bununla birlikte, ham CT dıcom verileri çok az veya büyük endian olabilir, muhtemelen bir eğim/kesişme düzeltmesi uygulanması gerekir ve ayrıca HU numaralarına dönüştürmek için arama tablolarının uygulanması gerekebilir. ...yani karmaşık ve dağınık olabilir. (yine biraz googling yapın ...tıbbi görüntü formatlarıyla herhangi bir şey yapmaya çalışıyorsanız, en azından bu konuda biraz arka plana sahip olmalısınız).

Nıftı verilerinin nasıl işleneceğinden emin değilim, ancak neyse ki pydicom kullanan dıcom dosyaları için bu dönüşüm sizin için kütüphane tarafından (genellikle) bir çağrı kullanılarak yapılabilir 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

Diğer dillerde

Bu sayfa diğer dillerde

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