นี่คือการดำเนินการตามโครงการ "ความเข้าใจความหมายของสภาพแวดล้อมกลางแจ้งเพื่อการนำทาง" ซึ่งเสร็จสิ้นที่ Robotic Systems Lab ที่ ETH Zurich ในภาคเรียนฤดูใบไม้ผลิปี 2023
เป้าหมายของโครงการคือการตรวจสอบว่าโมเดลการแบ่งส่วนความหมายแบบไม่ได้รับการดูแลล่าสุด STEGO (Hamilton et al., 2022) สามารถใช้ในไปป์ไลน์การนำทางกลางแจ้งสำหรับหุ่นยนต์เคลื่อนที่ภาคพื้นดินได้อย่างไร โดยเน้นไปที่บริบทของ Wild Visual Navigation ระบบ (Frey & Mattamala และคณะ)
แพ็คเกจนี้สร้างขึ้นจาก STEGO เวอร์ชันที่ได้รับการปรับปรุงใหม่: การแบ่งส่วนความหมายแบบไม่มีผู้ดูแลโดยการกลั่นคุณสมบัติที่สอดคล้องกันโดย Hamilton และคณะ
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 .
ดาวน์โหลดชุดข้อมูลทั่วไปที่ใช้โดย Hamilton และคณะ:
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
ในกรณีของชุดข้อมูล cocostuff แฮมิลตัน และคณะ ใช้ชุดย่อยของตัวอย่างการฝึกอบรมและการตรวจสอบความถูกต้องสำหรับการทดลอง ซึ่งใช้ในโปรเจ็กต์นี้ด้วย สามารถรับรายการตัวอย่างได้โดยการดาวน์โหลดชุดข้อมูลจากลิงก์ด้านบน จากนั้น ชุดข้อมูลที่ดูแลจัดการตามรายการที่เลือกจะสามารถสร้างได้ด้วย 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
ก่อนที่จะรัน ให้ปรับเส้นทางในสคริปต์การประมวลผลล่วงหน้าแต่ละรายการ
การประมวลผลล่วงหน้าของ Cocostuff:
# 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
การประมวลผลล่วงหน้าของ Freiburg Forest:
# 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 แต่สามารถใช้ได้กับ Vision Transformer รุ่นใดก็ได้ แบ็คโบนที่มีอยู่ทั้งหมดสามารถพบได้ใน 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
การบันทึกจะดำเนินการโดยใช้ Weights & Biases หากต้องการใช้ W&B บนคลาวด์ ให้เข้าสู่ระบบ wandb:
wandb login
ในระหว่างการฝึกอบรม นอกเหนือจากหน่วยเมตริกที่ไม่ได้รับการดูแล ค่าการสูญเสีย และพารามิเตอร์อื่นๆ แล้ว การแสดงภาพการแบ่งกลุ่มตัวอย่างและแผนการกระจายความคล้ายคลึงของคุณลักษณะที่เรียนรู้จะถูกบันทึกไว้
หากต้องการทำการทดสอบที่เปรียบเทียบวิธีการแบ่งกลุ่มในบริบทของไปป์ไลน์การนำทางกลางแจ้ง ให้ทำดังนี้
สร้างป้ายกำกับความสามารถในการข้ามผ่านแบบไบนารีสำหรับชุดข้อมูลที่เลือก ขณะนี้ มีเพียงการประมวลผลล่วงหน้าสำหรับ Freiburg Forest เท่านั้น อย่างไรก็ตาม คุณยังสามารถประมวลผลชุดข้อมูลต่างๆ ล่วงหน้าสำหรับการทดสอบนี้ด้วยสคริปต์นี้ได้ โดยมีเงื่อนไขว่าคุณต้องเปลี่ยน TRAVERSABLE_IDS
เป็น ID ของคลาสที่สามารถข้ามผ่านได้ในชุดข้อมูลของคุณ วิ่ง:
# 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.
โครงการนี้อิงจากงานก่อนหน้าของ Mark Hamilton
Copyright (c) Mark Hamilton. All rights reserved. Licensed under the MIT license.
ไฟล์ใน stego/backbones/dino
ได้รับอนุญาตภายใต้ลิขสิทธิ์ Apache 2.0 โดย Facebook, Inc. และบริษัทในเครือ ดูส่วนหัวของไฟล์สำหรับรายละเอียด