Datasets documentation
NIfTI veri seti oluşturun
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_hubile 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=FalseNifti ö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.niiEtiketler 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_xNifti ö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.niiPyTorch 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()