Dicom dados de treinamento falhou, por pytorch

0

Pergunta

Eu tenho um problema sobre a formação do Pytorch modelos. Eu estou tentando treinar o meu Pytorch modelo usando dicom de dados nifti e GT no Entanto, o tamanho do peso do arquivo é ridiculamente pequeno, porque o modelo de formação não é realizada normalmente.

Eu utilizados o modelo de rede Unet++

Eu acho que há um problema com o carregador de dados. Mas eu não posso fixe-lo...

Eu gostaria que se você pudesse me ajudar.

Imagem Raw é um formato de ficheiro dicom e GT de imagem de formato nifti

na minha 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 Treinar o Código é

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

Melhor resposta

1

Dependendo de qual modalidade suas imagens são, este poderá, eventualmente, ser devido a não conversão de dados de imagem para o correto, clinicamente relevantes, máquina de fornecedor independente, unidades antes de qualquer ML de formação 0-1 normalização.

Normalmente em dicom arquivos, dados brutos reais valores não são que eles precisam de processamento...

Por exemplo, se você está tentando treinar no CT de dados e, em seguida, as unidades que você deve estar tentando treinar o seu modelo em são Houndsfield do (HU) de números. (Fazer um google em que, CT e dicom para obter algum plano de fundo).

No entanto matérias de CT dicom dados podem ser pouco ou big-endian, provavelmente precisa de uma inclinação/interceptar a correção aplicada e também poderia precisa ter olhar de tabelas aplicadas para convertê-lo em HU números. ...ou seja, pode ficar complicado e confuso. (novamente, fazer um pouco de pesquisa no google ...você pelo menos deve ter um pouco de fundo sobre isso, se você está tentando fazer qualquer coisa com o médico formatos de imagem).

Eu não tenho certeza de como processo nifti de dados, no entanto, felizmente para arquivos dicom usando pydicom esta conversão pode ser feito pela biblioteca, usando (normalmente) uma chamada para 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

Em outros idiomas

Esta página está em outros idiomas

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