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

إنشاء مجموعة بيانات شبكية

توجد طريقتان لإنشاء مجموعة بيانات شبكية ومشاركتها. سيوضح لك هذا الدليل كيفية:

  • أنشئ مجموعة بيانات شبكية من ملفات محلية في بايثون باستخدام Dataset.push_to_hub(). هذه طريقة سهلة تتطلب بضع خطوات فقط في بايثون.

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

يمكنك التحكم في الوصول إلى مجموعة بياناتك من خلال اشتراط مشاركة المستخدمين لمعلومات التواصل الخاصة بهم أولاً. اطّلع على دليل مجموعات البيانات المُقيَّدة لمزيد من المعلومات حول كيفية تفعيل هذه الميزة على Hub.

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

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

>>> from datasets import Dataset, Mesh

>>> 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())
>>> mesh_dataset[0]["mesh"]
<trimesh.Scene(len(geometry)=33)>

ثم ارفع مجموعة البيانات إلى Hugging Face Hub باستخدام Dataset.push_to_hub():

mesh_dataset.push_to_hub("<username>/my_dataset")

سيؤدي هذا إلى إنشاء مستودع مجموعة بيانات يحتوي على مجموعة بياناتك للشبكة:

my_dataset/README.md
my_dataset/data/train-00000-of-00001.parquet

MeshFolder

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("path/to/folder")

يعادل هذا تمرير meshfolder يدويًا في load_dataset() والمجلد في data_dir:

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

يمكنك أيضًا استخدام meshfolder لتحميل مجموعات بيانات تتضمن تقسيمات متعددة. للقيام بذلك، يجب أن يكون لمجلد مجموعة البيانات البنية التالية:

folder/train/diya/brass_diya.glb
folder/train/kalash/copper_kalash.glb
folder/test/diya/clay_diya.ply
folder/test/kalash/temple_kalash.stl

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

إذا كانت هناك معلومات إضافية ترغب في تضمينها حول مجموعة البيانات الخاصة بك، مثل التسميات النصية أو بيانات وصفية للأصول ثلاثية الأبعاد، أضفها كملف metadata.csv في مجلدك. يمكنك أيضًا استخدام ملف JSONL metadata.jsonl أو ملف Parquet metadata.parquet.

folder/train/metadata.csv
folder/train/0001.glb
folder/train/0002.ply
folder/train/0003.stl

يمكنك أيضًا ضغط ملفات الشبكة الخاصة بك، وفي هذه الحالة يجب أن يحتوي كل ملف مضغوط على ملفات الشبكة وبيانات الوصف.

folder/train.zip
folder/test.zip
folder/validation.zip

يجب أن يحتوي ملف metadata.csv الخاص بك على حقل file_name أو *_file_name يربط ملفات الشبكة ببياناتها الوصفية:

file_name,caption
0001.glb,A brass diya with a small bowl and raised wick holder
0002.ply,A copper kalash with a rounded body and narrow neck
0003.stl,A carved jharokha window with an arched frame

أو باستخدام metadata.jsonl:

{"file_name": "0001.glb", "caption": "A brass diya with a small bowl and raised wick holder"}
{"file_name": "0002.ply", "caption": "A copper kalash with a rounded body and narrow neck"}
{"file_name": "0003.stl", "caption": "A carved jharokha window with an arched frame"}

هنا يجب أن يكون file_name هو اسم ملف الشبكة المجاور لملف البيانات الوصفية. وبشكل أكثر عمومية، يجب أن يكون المسار النسبي من المجلد الذي يحتوي على البيانات الوصفية إلى ملف الشبكة.

من الممكن الإشارة إلى أكثر من شبكة في كل صف في مجموعة البيانات الخاصة بك، على سبيل المثال إذا كان كلٌّ من مدخلاتك ومخرجاتك ملفات شبكات:

{"input_file_name": "0001.glb", "output_file_name": "0001_output.glb"}
{"input_file_name": "0002.ply", "output_file_name": "0002_output.ply"}
{"input_file_name": "0003.stl", "output_file_name": "0003_output.stl"}

يمكنك أيضًا تعريف قوائم من الشبكات. في هذه الحالة، يجب عليك تسمية الحقل file_names أو *_file_names. إليك مثال:

{"parts_file_names": ["0001_bowl.glb", "0001_wick_holder.glb"], "label": "diya"}
{"parts_file_names": ["0002_body.ply", "0002_neck.ply"], "label": "kalash"}
{"parts_file_names": ["0003_frame.stl", "0003_arch.stl"], "label": "jharokha"}

وصف الشبكات

تحتوي مجموعات بيانات وصفات الشبكات (Mesh) على نصوص تصف شبكة ثلاثية الأبعاد. قد يبدو مثال metadata.csv على النحو التالي:

file_name,text
0001.glb,A brass diya with a small bowl and raised wick holder
0002.ply,A copper kalash with a rounded body and narrow neck
0003.stl,A carved jharokha window with an arched frame

حمّل مجموعة البيانات باستخدام MeshFolder، وسيتم إنشاء عمود text لوصفات الشبكات:

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"A brass diya with a small bowl and raised wick holder"

رفع مجموعة البيانات إلى Hub

بمجرد إنشاء مجموعة بيانات، يمكنك مشاركتها على Hub باستخدام طريقة push_to_hub(). تأكد من تثبيت مكتبة huggingface_hub وتسجيل الدخول إلى حسابك على Hugging Face (راجع دليل رفع الملفات باستخدام Python لمزيد من التفاصيل).

ارفع مجموعة بياناتك باستخدام push_to_hub():

>>> from datasets import load_dataset

>>> dataset = load_dataset("meshfolder", data_dir="/path/to/folder", split="train")
>>> dataset.push_to_hub("username/my-mesh-captioning-dataset")
Update on GitHub