هذا هو تنفيذ مشروع "الفهم الدلالي للبيئات الخارجية للملاحة" الذي تم الانتهاء منه في مختبر الأنظمة الروبوتية في ETH زيوريخ في فصل الربيع 2023.
كان الهدف من المشروع هو استكشاف كيفية استخدام نموذج التجزئة الدلالي غير الخاضع للرقابة STEGO (هاميلتون وآخرون، 2022) في خط أنابيب الملاحة الخارجي لروبوت متنقل أرضي، مع التركيز بشكل رئيسي على سياق الملاحة البصرية البرية النظام (فري وماتامالا وآخرون).
تم إنشاء هذه الحزمة على نسخة مُعاد تشكيلها من STEGO: التجزئة الدلالية غير الخاضعة للرقابة عن طريق تقطير مراسلات الميزات بواسطة Hamilton et al.
SLIC (طريقة تجزئة WVN)، وSTEGO القياسي، وSTEGO مع ميزة تجميع المشاهد الطبيعية لكل صورة.
يثبت
تثبيت
تحميل مجموعة البيانات
المعالجة المسبقة للبيانات
تحميل الموديل
المعالجة المسبقة لـ KNN
تجزئة العرض التوضيحي
تقييم التجزئة
تجزئة القطار
تقييم لWVN
توليد المؤامرات
رخصة
استنساخ المستودع:
git clone https://github.com/leggedrobotics/self_supervised_segmentation.git cd self_supervised_segmentation
تثبيت البيئة:
conda env create -f environment.yml conda activate stego pip install -e .
قم بتنزيل مجموعات البيانات العامة التي يستخدمها هاملتون وآخرون:
python scripts/download_stego_datasets.py
ملاحظة: wget
، الذي يتم استخدامه في البرامج النصية للتنزيل، قد لا يعمل دائمًا بشكل جيد مع هذه التنزيلات الكبيرة. في حالة فشل التنزيل، حاول تنزيل مجموعات البيانات المحددة باستخدام azcopy. على سبيل المثال، لتنزيل مجموعة بيانات cocostuff:
azcopy copy https://marhamilresearch4.blob.core.windows.net/stego-public/pytorch_data/cocostuff.zip ./cocostuff.zip
في حالة مجموعة بيانات كوكوستوف، هاملتون وآخرون. استخدم مجموعات فرعية من عينات التدريب والتحقق من الصحة للتجارب، والتي تم استخدامها أيضًا في هذا المشروع. يمكن الحصول على قوائم العينات عن طريق تنزيل مجموعة البيانات من الرابط أعلاه. بعد ذلك، يمكن إنشاء مجموعة بيانات منسقة وفقًا لقائمة محددة باستخدام scripts/create_curated_dataset.py
.
تنزيل مجموعات البيانات ذات المشاهد الطبيعية:
# Download RUGD wget http://rugd.vision/data/RUGD_frames-with-annotations.zip wget http://rugd.vision/data/RUGD_annotations.zip unzip RUGD_frames-with-annotations.zip -d RUGD unzip RUGD_annotations.zip -d RUGD rm RUGD_annotations.zip RUGD_frames-with-annotations.zip # Download Freiburg Forest wget http://deepscene.cs.uni-freiburg.de/static/datasets/download_freiburg_forest_annotated.sh bash download_freiburg_forest_annotated.sh tar -xzf freiburg_forest_annotated.tar.gz rm freiburg_forest_annotated.tar.gz*
لتسهيل استخدام مجموعات البيانات المختلفة مع الحزمة، تمت إضافة البرامج النصية للمعالجة المسبقة إلى scripts/data_preprocessing
. قبل التشغيل، قم بضبط المسارات في كل برنامج نصي للمعالجة المسبقة.
المعالجة المسبقة لحبوب جوز الهند:
# Preprocess full Cocostuff python scripts/data_preprocessing/preprocess_cocostuff.py # Create the curated dataset python scripts/data_preprocessing/create_curated_dataset.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
المعالجة المسبقة RUGD:
# Preprocess RUGD python scripts/data_preprocessing/preprocess_RUGD.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
المعالجة المسبقة لغابة فرايبورغ:
# Preprocess Freiburg Forest python scripts/data_preprocessing/preprocess_freiburg_forest.py # Crop the dataset (only for training) python scripts/data_preprocessing/crop_dataset.py
لاستخدام البيانات المخصصة مع هذه الحزمة، قم بمعالجتها مسبقًا للحصول على البنية التالية:
YOUR_DATASET |-- imgs |-- train |-- val |-- labels |-- train |-- val
مع صور RGB في دليل imgs
، و(اختياريًا) التعليقات التوضيحية في دليل labels
.
إذا تم توفير دليل labels
، فيجب أن يحتوي على تصنيف لجميع الصور في imgs
، مع تسمية كل تصنيف بنفس اسم الصورة المقابلة له (باستثناء امتداد الملف). ينبغي تقديم التعليقات التوضيحية كأقنعة أحادية القناة بنفس حجم الصور المقابلة لها.
تنزيل نقاط التفتيش النموذجية STEGO:
python scripts/download_stego_models.py
تحويل نقاط التفتيش المحددة إلى هيكل النموذج الذي تستخدمه هذه الحزمة. قم بتعيين مسارات الإدخال والإخراج في scripts/cfg/convert_checkpoint_config.yaml
وقم بتشغيل:
python scripts/convert_original_stego_checkpoint.py
لاستخدام مجموعة بيانات تمت معالجتها مسبقًا مع نموذج محدد وبدقة محددة، يجب تشغيل البرنامج النصي precompute_knns.py
باستخدام المعلمات والنموذج المحددين. سيؤدي هذا إلى إنشاء أقرب ملف جيران في nns
فرعي منفصل لمجموعة البيانات المحددة. اضبط المعلمات في scripts/cfg/knn_config.yaml
وقم بتشغيل:
python scripts/precompute_knns.py
لإنشاء تنبؤات التجزئة لمجلد محدد من الصور:
ضبط مسارات الإدخال والإخراج في scripts/cfg/demo_config.yaml
يجري:
python scripts/demo_segmentation.py
سيؤدي هذا إلى إنشاء تصورات للتجزئة غير الخاضعة للرقابة في output_dir/experiment_name/cluster
ومرئيات لتجزئة المسبار الخطي في output_dir/experiment_name/linear
.
لتقييم STEGO على مجموعة بيانات محددة بمقاييس غير خاضعة للرقابة:
اضبط المسارات والمعلمات في scripts/cfg/eval_config.yaml
يجري:
python scripts/eval_segmentation.py
سيقوم البرنامج النصي بحساب وطباعة نتائج التقييم على البيانات المقدمة.
بعد تنفيذ خطوات المعالجة المسبقة الموضحة في الإعداد، يمكنك تدريب STEGO على البيانات المحددة.
قبل التدريب، حدد العمود الفقري واضبط معلمات النموذج والتدريب.
تم تصميم STEGO بناءً على DINO ViT، ولكن يمكن استخدامه مع أي محول رؤية. يمكن العثور على جميع العناصر الأساسية المتاحة في stego/backbones/backbone.py
. لإضافة عمود فقري جديد، أضف كل التعليمات البرمجية اللازمة للعمود الفقري إلى مجلد stego/backbones
وقم بتعديل stego/backbone/backbones.py
:
أضف تطبيقًا لفئة Backbone
لعمودك الفقري،
أضف التنفيذ الخاص بك إلى وظيفة get_backbone
بالاسم المطلوب.
تم تحديد معلمات STEGO في stego/cfg/model_config.yaml
. في هذا الملف يمكنك:
حدد العمود الفقري،
تحديد معلمات النموذج الأخرى،
تحديد معايير التدريب: معدلات التعلم ومعايير فقدان المراسلات الخاصة بـ STEGO.
يمكن تعيين معلمات أخرى للتدريب في scripts/cfg/train_config.yaml
.
بعد ضبط المعلمات، قم بتشغيل التدريب باستخدام:
python scripts/train.py
يتم تنفيذ STEGO باستخدام Pytorch Lightning، الذي يتولى حفظ نقاط التفتيش أثناء التدريب، في دليل يمكن تحديده في scripts/cfg/train_config.yaml
.
يتم تنفيذ التسجيل باستخدام الأوزان والتحيزات. لاستخدام W&B عبر السحابة، قم بتسجيل الدخول إلى Wandb:
wandb login
أثناء التدريب، وبصرف النظر عن المقاييس غير الخاضعة للرقابة وقيم الخسارة والمعلمات الأخرى، يتم تسجيل تصورات تجزئة العينة ومؤامرة توزيع تشابه الميزات المستفادة.
لتشغيل التجربة التي تقارن طرق التجزئة في سياق خط أنابيب التنقل الخارجي:
قم بإنشاء تسميات ثنائية لقابلية العبور لمجموعة بيانات محددة. حاليًا، تتوفر فقط المعالجة المسبقة لغابة فرايبورغ. ومع ذلك، يمكنك أيضًا المعالجة المسبقة لمجموعات بيانات مختلفة لهذه التجربة باستخدام هذا البرنامج النصي بشرط أن تقوم بتغيير TRAVERSABLE_IDS
إلى معرفات الفئات القابلة للعبور في مجموعة البيانات الخاصة بك. يجري:
# Adjust paths in the script before running python scripts/data_preprocessing/generate_traversability_labels_freiburg_forest.py
ضبط المعلمات في scripts/cfg/eval_clusters_wvn.yaml
يجري:
python scripts/eval_clusters_wvn.py
سيقوم البرنامج النصي بحساب وطباعة نتائج التقييم على البيانات المقدمة، وحفظ المرئيات المحددة.
يتيح البرنامج النصي scripts/plot.py
إنشاء منحنيات الاسترجاع الدقيق التي توضح أداء الميزات في التنبؤ بتكرار التسمية. كما يوفر أيضًا مخططًا تفاعليًا لتصور أوجه التشابه في الصور المحددة.
لتوليد المؤامرات:
ضبط المسارات والمعلمات في scripts/cfg/plot_config.yaml
يجري:
python scripts/plot.py
Copyright (c) 2022-2024, ETH Zurich, Piotr Libera, Jonas Frey, Matias Mattamala. All rights reserved. Licensed under the MIT license.
يعتمد هذا المشروع على العمل السابق لمارك هاميلتون.
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
الملفات الموجودة في stego/backbones/dino
مرخصة بموجب ترخيص Apache 2.0 من قبل شركة Facebook, Inc. والشركات التابعة لها. راجع رؤوس الملفات للحصول على التفاصيل.