Datasets documentation
إنشاء مجموعة بيانات شبكية
إنشاء مجموعة بيانات شبكية
توجد طريقتان لإنشاء مجموعة بيانات شبكية ومشاركتها. سيوضح لك هذا الدليل كيفية:
أنشئ مجموعة بيانات شبكية من ملفات محلية في بايثون باستخدام 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")