Datasets documentation
Buat dataset NIfTI
Buat dataset NIfTI
Halaman ini menunjukkan cara membuat dan membagikan dataset gambar medis dalam format NIfTI (.nii / .nii.gz) menggunakan pustaka datasets.
Anda dapat membagikan dataset dengan tim Anda atau dengan siapa pun di komunitas dengan membuat repositori dataset di Hugging Face Hub:
from datasets import load_dataset
dataset = load_dataset("<username>/my_nifti_dataset")Ada dua cara umum untuk membuat dataset NIfTI:
- Buat dataset dari file NIfTI lokal di Python dan unggah dengan
Dataset.push_to_hub. - Gunakan konvensi berbasis folder (satu file per contoh) dan helper kecil untuk mengubahnya menjadi
Dataset.
Anda dapat mengontrol akses ke dataset Anda dengan meminta pengguna untuk membagikan informasi kontak mereka terlebih dahulu. Lihat panduan Gated datasets untuk informasi lebih lanjut.
File lokal
Jika Anda sudah memiliki daftar jalur file ke file NIfTI, alur kerja termudah adalah membuat Dataset dari daftar tersebut dan mengubah tipe kolom menjadi fitur Nifti.
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=FalseFitur Nifti mendukung parameter decode. Ketika decode=True (default), file NIfTI dimuat ke dalam objek nibabel.nifti1.Nifti1Image. Anda dapat mengakses data gambar sebagai array numpy dengan img.get_fdata(). Ketika decode=False, fungsi ini mengembalikan dict yang berisi path file dan bytes.
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()Setelah menyiapkan dataset, Anda dapat mengirimkannya ke Hub:
ds.push_to_hub("<username>/my_nifti_dataset")Hal ini akan membuat repositori dataset yang berisi dataset NIfTI Anda dengan folder data/ berisi shard parquet.
Konvensi folder dan metadata
Jika Anda mengorganisasi dataset dalam folder, Anda dapat membuat split secara otomatis (train/test/validation) dengan mengikuti struktur seperti:
dataset/train/scan_0001.nii
dataset/train/scan_0002.nii
dataset/validation/scan_1001.nii
dataset/test/scan_2001.niiJika Anda memiliki label atau metadata lain, sediakan metadata.csv, metadata.jsonl, atau metadata.parquet di folder agar file dapat ditautkan ke baris metadata. Metadata harus berisi field file_name (atau *_file_name) dengan path relatif ke file NIfTI di samping file metadata.
Contoh metadata.csv:
file_name,patient_id,age,diagnosis
scan_0001.nii.gz,P001,45,healthy
scan_0002.nii.gz,P002,59,disease_xFitur Nifti juga berfungsi dengan dataset berformat zip — setiap zip dapat berisi file NIfTI dan file metadata. Hal ini berguna saat mengunggah dataset besar sebagai arsip.
Artinya, struktur dataset Anda bisa terlihat seperti ini (file terkompresi dan tidak terkompresi dicampur):
dataset/train/scan_0001.nii.gz
dataset/train/scan_0002.nii
dataset/validation/scan_1001.nii.gz
dataset/test/scan_2001.niiMengonversi ke tensor PyTorch
Gunakan fungsi set_transform() untuk menerapkan transformasi secara langsung pada batch dataset:
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)
Mengakses elemen sekarang (misalnya ds[0]) akan menghasilkan tensor torch di kunci "nifti_torch".
Penggunaan NifTI1Image
NifTI adalah format untuk menyimpan hasil pemindaian otak 3 (atau bahkan 4) dimensi. Ini mencakup 3 dimensi spasial (x,y,z) dan secara opsional dimensi waktu (t). Selain itu, posisi yang diberikan di sini hanya relatif terhadap pemindai, oleh karena itu dimensi (4, 5, 6) digunakan untuk mengubahnya menjadi koordinat dunia nyata.
Anda dapat memvisualisasikan file nifti, misalnya dengan memanfaatkan matplotlib sebagai berikut:
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()