Views
No views yet
![]() Front View Trajectories | ![]() Up View Trajectories |
| Model | File | Parameters | Description |
|---|---|---|---|
| YOLOv11 Segmentation (sim) | 29_05_best__yolo11n-seg_sim_car_bunker__all.pt | 2.84M | Vehicle segmentation for simulator |
| YOLOv11 Segmentation (real) | real-yolo-car-full-segmentation.pt | 2.84M | Vehicle segmentation for real-world |
| Mask Splitter (sim) | mask_splitter-epoch_10-dropout_0-low_x2-and-high_x0_quality_early_stop.pt | 1.94M | Anterior-posterior mask splitting (simulator) |
| Mask Splitter (real) | mask_splitter-epoch_10-dropout_0-_x2_real_early_stop.pt | 1.94M | Anterior-posterior mask splitting (real-world) |
| Model | File | Parameters | Description |
|---|---|---|---|
| Student (sim→real) | student_model_sim_on_real_world_distribution.pth | 1.7M | Trained on sim, normalized for real-world |
| Student (fine-tuned) | student_real_pretrained_augX3_80_runs.pth | 1.7M | Fine-tuned on real-world data |
1git clone --recursive https://github.com/SpaceTime-Vision-Robotics-Laboratory/nser-ibvs-drone.git
2cd nser-ibvs-drone
3
4python3 -m venv ./venv
5source venv/bin/activate
6
7python -m pip install --upgrade pip
8python -m pip install -r requirements.txt
9python -m pip install -e .python -m unittest discover ./tests1from mask_splitter.yolo_model import YoloSegmentation
2
3# Initialize YOLO model
4yolo = YoloSegmentation(
5 model_path="real-yolo-car-full-segmentation.pt",
6 confidence_threshold=0.7
7)
8
9# Segment an image
10annotated_frame, binary_mask = yolo.segment_image(frame)
11
12# Get detection info
13results = yolo.detect(frame)
14target = yolo.find_best_target_box(results)
15print(f"Confidence: {target.confidence}, Center: {target.center}")1import cv2
2from mask_splitter.nn.infer import MaskSplitterInference
3
4# Initialize the model
5splitter = MaskSplitterInference(
6 model_path="mask_splitter-epoch_10-dropout_0-_x2_real_early_stop.pt",
7 device="cuda",
8 image_size=(360, 640),
9 confidence_threshold=0.5
10)
11
12# Load image and mask
13image = cv2.imread("frame-path.png")
14mask = cv2.imread("mask-path.png", cv2.IMREAD_GRAYSCALE)
15
16# Run inference
17front_mask, back_mask = splitter.infer(image, mask)
18
19# Visualize results
20splitter.visualize(image, front_mask, back_mask)1import torch
2from nser_ibvs_drone.distiled_network.drone_command_regressor import DroneCommandRegressor
3
4# Load model
5model = DroneCommandRegressor()
6model.load_model("student_model_sim_on_real_world_distribution.pth")
7model.eval()
8
9# Input: RGB image tensor [B, 3, H, W]
10# Output: velocity commands [vx, vy, vyaw]1import cv2
2from nser_ibvs_drone.distiled_network.distil_engine import StudentEngine
3
4student_model_path = "student_model_sim_on_real_world_distribution.pth"
5model_engine = StudentEngine(student_model_path)
6
7frame = cv2.imread("frame-path.png")
8commands = model_engine.predict(frame)| Metric | Teacher (NSER-IBVS) | Student Network |
|---|---|---|
| Inference Speed | 48.3 FPS | 540.8 FPS |
| Parameters | 4.78M | 1.7M |
| Mean Error (Sim) | 29.76 px | 14.26 px |
| IoU (Sim) | 0.522 | 0.752 |
| Mean Error (Real) | 29.96 px | 33.33 px |
| IoU (Real) | 0.627 | 0.591 |
![]() Real-World Flight - Teacher (IBVS) | ![]() Real-World Flight - Student |
![]() Digital-Twin Flight - Teacher (IBVS) | ![]() Digital-Twin Flight - Student |
1@InProceedings{Mocanu_2025_ICCV,
2 author = {Mocanu, Sebastian and Nae, Sebastian-Ion and Barbu, Mihai-Eugen and Leordeanu, Marius},
3 title = {Efficient Self-Supervised Neuro-Analytic Visual Servoing for Real-time Quadrotor Control},
4 booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV) Workshops},
5 month = {October},
6 year = {2025},
7 pages = {1744-1753}
8}| Resource | Link |
|---|---|
| Paper | ICCV 2025 Open Access |
| arXiv | 2507.19878 |
| Code | GitHub |
| Website | Project Page |
| Poster |