Datasets documentation

Buat dataset NIfTI

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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=False

Fitur 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.nii

Jika 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_x

Fitur 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.nii

Mengonversi 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()

Untuk bacaan lebih lanjut, kami merujuk ke dokumentasi nibabel dan khususnya tutorial nibabel ini

Update on GitHub