Datasets documentation

NIfTI veri seti oluşturun

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

NIfTI veri seti oluşturun

Bu sayfa, datasets kütüphanesini kullanarak NIfTI formatında (.nii / .nii.gz) tıbbi görüntülerden oluşan bir veri seti oluşturma ve paylaşma yöntemini gösterir.

Bir veri setini ekibinizle veya toplulukta herkesle paylaşmak için Hugging Face Hub üzerinde bir veri seti deposu oluşturabilirsiniz:

from datasets import load_dataset

dataset = load_dataset("<username>/my_nifti_dataset")

NIfTI veri seti oluşturmanın iki yaygın yolu vardır:

  • Python'da yerel NIfTI dosyalarından bir veri seti oluşturun ve Dataset.push_to_hub ile yükleyin.
  • Klasör tabanlı bir sözleşme (örnek başına bir dosya) kullanın ve bunu bir Dataset'e dönüştürmek için küçük bir yardımcı işlev kullanın.

Veri setinize erişimi, kullanıcıların önce iletişim bilgilerini paylaşmasını gerektirerek kontrol edebilirsiniz. Daha fazla bilgi için Gated datasets kılavuzuna göz atın.

Yerel dosyalar

Elinizde NIfTI dosyalarına ait dosya yollarının bir listesi varsa, en kolay iş akışı, bu listeden bir Dataset oluşturmak ve sütunu Nifti özelliğine dönüştürmektir.

from datasets import Dataset
from datasets import Nifti

# simple example: create a dataset from file paths
files = ["/path/to/scan_001.nii.gz", "/path/to/scan_002.nii.gz"]
ds = Dataset.from_dict({"nifti": files}).cast_column("nifti", Nifti())

# access a decoded nibabel image (if decode=True)
# ds[0]["nifti"] will be a nibabel.Nifti1Image object when decode=True
# or a dict {'bytes': None, 'path': '...'} when decode=False

Nifti özelliği decode parametresini destekler. decode=True (varsayılan) olduğunda, NIfTI dosyası bir nibabel.nifti1.Nifti1Image nesnesine yüklenir. Görüntü verilerine img.get_fdata() ile numpy dizisi olarak erişebilirsiniz. decode=False olduğunda, dosya yolu ve baytları içeren bir sözlük döndürülür.

from datasets import Dataset, Nifti

ds = Dataset.from_dict({"nifti": ["/path/to/scan.nii.gz"]}).cast_column("nifti", Nifti(decode=True))
img = ds[0]["nifti"]  # instance of: nibabel.nifti1.Nifti1Image
arr = img.get_fdata()

Veri setini hazırladıktan sonra Hub'a yükleyebilirsiniz:

ds.push_to_hub("<username>/my_nifti_dataset")

Bu işlem, data/ klasöründe parquet parçaları içeren NIfTI veri setinizi barındıran bir veri seti deposu oluşturur.

Klasör kuralları ve meta veriler

Veri setinizi klasörlerde düzenlerseniz, aşağıdaki gibi bir yapıyı takip ederek bölümleri (eğitim/test/doğrulama) otomatik olarak oluşturabilirsiniz:

dataset/train/scan_0001.nii
dataset/train/scan_0002.nii
dataset/validation/scan_1001.nii
dataset/test/scan_2001.nii

Etiketler veya diğer meta veriler varsa, dosyaların meta veri satırlarına bağlanabilmesi için klasöre metadata.csv, metadata.jsonl veya metadata.parquet dosyası ekleyin. Meta veriler, meta veri dosyasının yanındaki NIfTI dosyasına göre göreli yolu içeren bir file_name (veya *_file_name) alanı içermelidir.

Örnek metadata.csv:

file_name,patient_id,age,diagnosis
scan_0001.nii.gz,P001,45,healthy
scan_0002.nii.gz,P002,59,disease_x

Nifti özelliği, sıkıştırılmış veri setleriyle de çalışır — her zip dosyası NIfTI dosyaları ve bir meta veri dosyası içerebilir. Bu, büyük veri setlerini arşiv olarak yüklerken faydalıdır. Bu, veri seti yapınızın aşağıdaki gibi görünebileceği anlamına gelir (karışık sıkıştırılmış ve sıkıştırılmamış dosyalar):

dataset/train/scan_0001.nii.gz
dataset/train/scan_0002.nii
dataset/validation/scan_1001.nii.gz
dataset/test/scan_2001.nii

PyTorch tensörlerine dönüştürme

set_transform() işlevini kullanarak dönüştürmeyi veri setinin topluluklarına anlık olarak uygulayın:

import torch 
import nibabel
import numpy as np

def transform_to_pytorch(example):
    example["nifti_torch"] = [torch.tensor(ex.get_fdata()) for ex in example["nifti"]]
    return example

ds.set_transform(transform_to_pytorch)

Şimdi elemanlara erişim (ör. ds[0]) "nifti_torch" anahtarı altında torch tensörleri döndürür.

NifTI1Image kullanımı

NifTI, 3 (hatta 4) boyutlu beyin taramalarının sonucunu depolamak için kullanılan bir biçimdir. Bu, 3 uzamsal boyutu (x,y,z) ve isteğe bağlı olarak bir zaman boyutunu (t) içerir. Ayrıca, burada verilen konumlar yalnızca tarayıcıya göre göreli olduğundan, bu konumları gerçek dünya koordinatlarına dönüştürmek için (4, 5, 6) boyutları kullanılır.

Örneğin matplotlib kullanarak nifti dosyalarını aşağıdaki gibi görselleştirebilirsiniz:

import matplotlib.pyplot as plt
from datasets import load_dataset

def show_slices(slices):
   """ Function to display row of image slices """
   fig, axes = plt.subplots(1, len(slices))
   for i, slice in enumerate(slices):
       axes[i].imshow(slice.T, cmap="gray", origin="lower")

nifti_ds = load_dataset("<username>/my_nifti_dataset")
for epi_img in nifti_ds:
    nifti_img = epi_img["nifti"].get_fdata()
    show_slices([nifti_img[:, :, 16], nifti_img[26, :, :], nifti_img[:, 30, :]])
    plt.show()

Daha fazla okuma için nibabel dokümantasyonuna ve özellikle bu nibabel eğitimine başvurmanızı öneririz

Update on GitHub