Datasets documentation

تحميل بيانات الشبكة

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

تحميل بيانات الشبكة

تحتوي مجموعات البيانات من نوع الشبكة على أعمدة من نوع Mesh، والتي تتضمن كائنات trimesh.Trimesh أو trimesh.Scene.

للتعامل مع مجموعات بيانات الشبكات (mesh datasets)، يجب أن يكون لديك اعتمادية mesh مثبّتة. اطّلع على دليل التثبيت لمعرفة كيفية تثبيتها.

عند تحميل مجموعة بيانات شبكية واستدعاء العمود الشبكي، يتم فك ترميز الشبكات باستخدام trimesh:

>>> from datasets import load_dataset, Mesh

>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train")
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

اعتمادًا على محتوى الملف، قد يُرجع trimesh كائنًا من نوع trimesh.Trimesh أو كائنًا من نوع trimesh.Scene.

استخدم فهرس الصف أولاً ثم عمود mesh للوصول إلى مجموعة بيانات الشبكة - dataset[0]["mesh"] - لتجنب فك ترميز جميع ملفات الشبكة في مجموعة البيانات. وإلا، فقد يكون هذا الأمر بطيئاً ومستهلكاً للوقت إذا كانت لديك مجموعة بيانات كبيرة.

للاطلاع على دليل حول كيفية تحميل أي نوع من مجموعات البيانات، راجع دليل التحميل العام.

الملفات المحلية

يمكنك تحميل مجموعة بيانات من مسارات شبكات. استخدم دالة cast_column() لقبول عمود من مسارات ملفات الشبكات، وفكّ ترميزه إلى كائن trimesh باستخدام ميزة Mesh:

>>> from datasets import Dataset, Mesh

>>> dataset = Dataset.from_dict({"mesh": ["path/to/model_1.glb", "path/to/model_2.ply", "path/to/model_3.stl"]}).cast_column("mesh", Mesh())
>>> dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

إذا كنت ترغب فقط في تحميل المسار الأساسي أو البايتات الخاصة بمجموعة بيانات الشبكة دون فك ترميز كائن الشبكة، فقم بتعيين decode=False في ميزة Mesh:

>>> dataset = load_dataset("VINAY-UMRETHE/My-Mesh-Dataset", split="train").cast_column("mesh", Mesh(decode=False))
>>> dataset[0]["mesh"]
{'bytes': b'...',
 'path': '00001.glb'}

تدعم ميزة Mesh ملفات .glb و.ply و.stl. اعتماداً على محتوى الملف، قد يعيد trimesh كائن trimesh.Trimesh أو كائن trimesh.Scene.

MeshFolder

يمكنك أيضًا تحميل مجموعة بيانات باستخدام منشئ مجموعات البيانات MeshFolder الذي لا يتطلب كتابة مُحمِّل بيانات مخصص. وهذا يجعل MeshFolder مفيدًا لإنشاء وتحميل مجموعات بيانات شبكية بسرعة تحتوي على عدة آلاف من الملفات ثلاثية الأبعاد. يجب أن يبدو هيكل مجموعة البيانات الشبكية لديك على النحو التالي:

folder/train/diya/brass_diya.glb
folder/train/diya/clay_diya.ply
folder/train/diya/festival_diya.stl

folder/train/kalash/copper_kalash.glb
folder/train/kalash/pooja_kalash.ply
folder/train/kalash/temple_kalash.stl

إذا اتبع مجموعة البيانات بنية MeshFolder، فيمكنك تحميلها مباشرةً باستخدام load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")

بالنسبة إلى مجموعات البيانات المحلية، يعادل هذا تمرير meshfolder يدويًا في load_dataset() والمجلد في data_dir:

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder")

ثم يمكنك الوصول إلى الشبكات ككائنات trimesh:

>>> dataset["train"][0]
{"mesh": <trimesh.Scene(len(geometry)=33)>, "label": 0}

لتجاهل المعلومات في ملف البيانات الوصفية، اضبط drop_metadata=True في load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)

إذا لم يكن لديك ملف بيانات وصفية، يستنتج MeshFolder تلقائيًا اسم التسمية من اسم المجلد. إذا كنت ترغب في إسقاط التسميات المُنشأة تلقائيًا، اضبط drop_labels=True. في هذه الحالة، لن يحتوي مجموعة بياناتك إلا على عمود للشبكة:

>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)

وأخيرًا، يتيح لك الحجة filters تحميل مجموعة فرعية فقط من مجموعة البيانات، بناءً على شرط يتعلق بالتسمية أو البيانات الوصفية. وهذا مفيد بشكل خاص إذا كانت البيانات الوصفية بصيغة Parquet، لأن هذه الصيغة تتيح التصفية السريعة. كما يُنصح باستخدام هذه الحجة مع streaming=True، لأن مجموعة البيانات تُحمَّل بالكامل قبل التصفية افتراضيًا.

>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)

لمزيد من المعلومات حول إنشاء مجموعة بيانات MeshFolder خاصة بك، راجع دليل إنشاء مجموعة بيانات شبكية.

فك ترميز الشبكة

بشكل افتراضي، يتم فك ترميز الشبكات (meshes) بشكل تسلسلي ككائنات trimesh.Trimesh أو trimesh.Scene عند تكرار مجموعة البيانات.

إذا لم تكن مهتمًا بالشبكات المُفكَّكة ككائنات trimesh وأردت الوصول إلى المسار أو البايتات بدلاً من ذلك، يمكنك تعطيل فك الترميز:

>>> dataset = dataset.decode(False)

ملاحظة: IterableDataset.decode() متاح حاليًا فقط لمجموعات البيانات التي يتم بثها.

Update on GitHub