Обучение данным Dicom не удалось с помощью pytorch

0

Вопрос

У меня проблема с обучением моделей Pytorch. Я пытаюсь обучить свою модель Pytorch, используя данные dicom и nifti GT, Однако размер файла веса смехотворно мал, потому что обучение модели не выполняется нормально.

Я использовал сетевую модель Unet++

Я думаю, что есть проблема с загрузчиком данных. Но я не могу это исправить...

Я был бы признателен, если бы вы могли мне помочь.

Формат файла необработанного изображения-dicom, а формат изображения GT-nifti

в моем даталодере

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

и Код поезда-это

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

Лучший ответ

1

В зависимости от того, какой модальности ваши изображения, это может быть связано с тем, что данные изображения не преобразуются в правильные, клинически значимые, независимые от машины/поставщика единицы измерения до любой нормализации ML-обучения 0-1.

Как правило, в файлах dicom фактические значения необработанных данных не таковы - они нуждаются в обработке...

Например, если вы пытаетесь тренироваться на данных компьютерной томографии, то единицами измерения, на которых вы должны пытаться тренировать свою модель, являются числа Хаундсфилда (HU). (Погуглите об этом, CT и dicom, чтобы получить некоторую информацию).

Однако необработанные данные CT dicom могут быть небольшими или большими конечными, вероятно, потребуется применить коррекцию наклона/перехвата, а также, возможно, потребуется применить таблицы поиска для преобразования их в числа HU. ...ie может стать сложным и запутанным. (снова немного погуглите ...у вас, по крайней мере, должно быть немного информации об этом, если вы пытаетесь что-то сделать с форматами медицинских изображений).

Я не уверен, как обрабатывать данные nifti, однако, к счастью, для файлов dicom, использующих pydicom, это преобразование может быть выполнено для вас библиотекой, используя (обычно) вызов 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

На других языках

Эта страница на других языках

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