From 70e49f2509bf5e9cb0c46b089b64914b9bb238f1 Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Wed, 30 Aug 2023 14:22:50 +0200 Subject: [PATCH 1/7] Add DINO dim param --- .../feature_extractor/feature_extractor.py | 5 ++--- .../config/wild_visual_navigation/default.yaml | 1 + .../scripts/wvn_feature_extractor_node.py | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/wild_visual_navigation/feature_extractor/feature_extractor.py b/wild_visual_navigation/feature_extractor/feature_extractor.py index 8d638a79..702aca38 100644 --- a/wild_visual_navigation/feature_extractor/feature_extractor.py +++ b/wild_visual_navigation/feature_extractor/feature_extractor.py @@ -17,8 +17,7 @@ class FeatureExtractor: def __init__( - self, device: str, segmentation_type: str = "slic", feature_type: str = "dino", input_size: int = 448, **kwargs - ): + self, device: str, segmentation_type: str = "slic", feature_type: str = "dino", input_size: int = 448, **kwargs): """Feature extraction from image Args: @@ -40,7 +39,7 @@ def __init__( elif self._feature_type == "dino": self._feature_dim = 90 - self.extractor = DinoInterface(device=device, input_size=input_size, patch_size=kwargs.get("patch_size", 8)) + self.extractor = DinoInterface(device=device, input_size=input_size, patch_size=kwargs.get("patch_size", 8), dim=kwargs.get("dino_dim", 384)) elif self._feature_type == "sift": self._feature_dim = 128 self.extractor = DenseSIFTDescriptor().to(device) diff --git a/wild_visual_navigation_ros/config/wild_visual_navigation/default.yaml b/wild_visual_navigation_ros/config/wild_visual_navigation/default.yaml index 754b76d8..ad268471 100644 --- a/wild_visual_navigation_ros/config/wild_visual_navigation/default.yaml +++ b/wild_visual_navigation_ros/config/wild_visual_navigation/default.yaml @@ -25,6 +25,7 @@ network_input_image_width: 224 # 448 segmentation_type: "slic" feature_type: "dino" dino_patch_size: 8 # DINO only, 16 +dino_dim: 384 # 90, 384 slic_num_components: 500 confidence_std_factor: 4.0 scale_traversability: False # This parameter needs to be false when using the anomaly detection model diff --git a/wild_visual_navigation_ros/scripts/wvn_feature_extractor_node.py b/wild_visual_navigation_ros/scripts/wvn_feature_extractor_node.py index 44b806bf..13542b19 100644 --- a/wild_visual_navigation_ros/scripts/wvn_feature_extractor_node.py +++ b/wild_visual_navigation_ros/scripts/wvn_feature_extractor_node.py @@ -39,6 +39,7 @@ def __init__(self): feature_type=self.feature_type, input_size=self.network_input_image_height, slic_num_components=self.slic_num_components, + dino_dim=self.dino_dim, ) self.i = 0 self.setup_ros() @@ -116,6 +117,7 @@ def read_params(self): self.segmentation_type = rospy.get_param("~segmentation_type") self.feature_type = rospy.get_param("~feature_type") self.dino_patch_size = rospy.get_param("~dino_patch_size") + self.dino_dim = rospy.get_param("~dino_dim") self.slic_num_components = rospy.get_param("~slic_num_components") self.traversability_threshold = rospy.get_param("~traversability_threshold") self.clip_to_binary = rospy.get_param("~clip_to_binary") From 19ba16686a12f733632c050fa82850ba248c1ac8 Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Wed, 30 Aug 2023 14:23:14 +0200 Subject: [PATCH 2/7] Add DINO dim param --- wild_visual_navigation/feature_extractor/dino_interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wild_visual_navigation/feature_extractor/dino_interface.py b/wild_visual_navigation/feature_extractor/dino_interface.py index 0973af0f..fda40cc7 100644 --- a/wild_visual_navigation/feature_extractor/dino_interface.py +++ b/wild_visual_navigation/feature_extractor/dino_interface.py @@ -21,7 +21,7 @@ def __init__( projection_type: str = None, # nonlinear or None dropout: bool = False, # True or False ): - self.dim = dim # 90 or 384 + self.dim = dim self.cfg = DictConfig( { "dino_patch_size": patch_size, From 89746f68d726662556d2cba176943f2a31ab0b6b Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Wed, 30 Aug 2023 14:28:24 +0200 Subject: [PATCH 3/7] Remove mean kernel, did not help --- wild_visual_navigation/feature_extractor/dino_interface.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wild_visual_navigation/feature_extractor/dino_interface.py b/wild_visual_navigation/feature_extractor/dino_interface.py index fda40cc7..713e06cd 100644 --- a/wild_visual_navigation/feature_extractor/dino_interface.py +++ b/wild_visual_navigation/feature_extractor/dino_interface.py @@ -72,8 +72,6 @@ def __init__( # Just normalization self.norm = T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) - self.mean_kernel = torch.ones((1, 5, 5), device=device) / 25 - def change_device(self, device): """Changes the device of all the class members @@ -142,8 +140,6 @@ def inference(self, img: torch.tensor, interpolate: bool = False): pad = int((W - H) / 2) features = F.interpolate(features, new_size, mode="bilinear", align_corners=True) features = F.pad(features, pad=[pad, pad, 0, 0]) - # Optionally turn on image feature smoothing - # features = filter2d(features, self.mean_kernel, "replicate") return features @property From 2877f286c9caf33d9eec944878abad71602ee464 Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Fri, 1 Sep 2023 15:33:25 +0200 Subject: [PATCH 4/7] Remove unnecessary libraries, added visu for learning trajectory --- .../traversability_estimator.py | 11 -- .../config/rviz/anymal.rviz | 148 +++++++----------- .../scripts/wvn_learning_node.py | 75 +++++++-- 3 files changed, 121 insertions(+), 113 deletions(-) diff --git a/wild_visual_navigation/traversability_estimator/traversability_estimator.py b/wild_visual_navigation/traversability_estimator/traversability_estimator.py index 0417e3ad..e94d55e9 100644 --- a/wild_visual_navigation/traversability_estimator/traversability_estimator.py +++ b/wild_visual_navigation/traversability_estimator/traversability_estimator.py @@ -29,12 +29,7 @@ import torch.nn.functional as F import torchvision.transforms as transforms from torchmetrics import ROC -import numpy as np -import cv2 -import rospy import random -from sensor_msgs.msg import Image -from cv_bridge import CvBridge to_tensor = transforms.ToTensor() @@ -109,12 +104,6 @@ def __init__( # Visualization self._visualizer = LearningVisualizer() - if self._vis_training_samples: - self._last_image_mask_pub = rospy.Publisher( - f"/wild_visual_navigation_node/last_node_image_mask", Image, queue_size=1 - ) - self._bridge = CvBridge() - # Lightning module seed_everything(42) diff --git a/wild_visual_navigation_ros/config/rviz/anymal.rviz b/wild_visual_navigation_ros/config/rviz/anymal.rviz index 2bfde7c3..e029d92c 100644 --- a/wild_visual_navigation_ros/config/rviz/anymal.rviz +++ b/wild_visual_navigation_ros/config/rviz/anymal.rviz @@ -10,7 +10,7 @@ Panels: - /Elevation Map WIFI1/Local Planner (SDF)1 - /Elevation Map RAW1 Splitter Ratio: 0.4659898579120636 - Tree Height: 492 + Tree Height: 825 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties @@ -26,10 +26,9 @@ Panels: Name: Views Splitter Ratio: 0.5 - Class: rviz/Time - Experimental: false Name: Time SyncMode: 0 - SyncSource: F Input Image + SyncSource: velodyne Preferences: PromptSaveOnExit: true Toolbars: @@ -121,21 +120,25 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - LF_HAA: + LF_HAA_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true - LF_HFE: + LF_HFE_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true + LF_HFE_output: + Alpha: 1 + Show Axes: false + Show Trail: false LF_HIP: Alpha: 1 Show Axes: false Show Trail: false - LF_KFE: + LF_KFE_drive: Alpha: 1 Show Axes: false Show Trail: false @@ -168,21 +171,25 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - LH_HAA: + LH_HAA_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true - LH_HFE: + LH_HFE_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true + LH_HFE_output: + Alpha: 1 + Show Axes: false + Show Trail: false LH_HIP: Alpha: 1 Show Axes: false Show Trail: false - LH_KFE: + LH_KFE_drive: Alpha: 1 Show Axes: false Show Trail: false @@ -216,21 +223,25 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - RF_HAA: + RF_HAA_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true - RF_HFE: + RF_HFE_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true + RF_HFE_output: + Alpha: 1 + Show Axes: false + Show Trail: false RF_HIP: Alpha: 1 Show Axes: false Show Trail: false - RF_KFE: + RF_KFE_drive: Alpha: 1 Show Axes: false Show Trail: false @@ -263,21 +274,25 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - RH_HAA: + RH_HAA_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true - RH_HFE: + RH_HFE_drive: Alpha: 1 Show Axes: false Show Trail: false Value: true + RH_HFE_output: + Alpha: 1 + Show Axes: false + Show Trail: false RH_HIP: Alpha: 1 Show Axes: false Show Trail: false - RH_KFE: + RH_KFE_drive: Alpha: 1 Show Axes: false Show Trail: false @@ -305,11 +320,6 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - alphasense_mesh: - Alpha: 1 - Show Axes: false - Show Trail: false - Value: true base: Alpha: 1 Show Axes: false @@ -333,74 +343,43 @@ Visualization Manager: Show Axes: false Show Trail: false Value: true - cam0_sensor_frame: - Alpha: 1 - Show Axes: false - Show Trail: false - cam1_sensor_frame: - Alpha: 1 - Show Axes: false - Show Trail: false - cam2_sensor_frame: - Alpha: 1 - Show Axes: false - Show Trail: false - cam3_sensor_frame: - Alpha: 1 - Show Axes: false - Show Trail: false - cam3_sensor_frame_helper: - Alpha: 1 - Show Axes: false - Show Trail: false - cam4_sensor_frame: + depth_camera_front_lower_camera: Alpha: 1 Show Axes: false Show Trail: false - cam4_sensor_frame_helper: + depth_camera_front_lower_camera_parent: Alpha: 1 Show Axes: false Show Trail: false - cam5_sensor_frame: + depth_camera_front_upper_camera: Alpha: 1 Show Axes: false Show Trail: false - cam5_sensor_frame_helper: + depth_camera_front_upper_camera_parent: Alpha: 1 Show Axes: false Show Trail: false - cam6_sensor_frame: - Alpha: 1 - Show Axes: false - Show Trail: false - cam6_sensor_frame_helper: - Alpha: 1 - Show Axes: false - Show Trail: false - depth_camera_front_camera: + depth_camera_left_camera: Alpha: 1 Show Axes: false Show Trail: false - Value: true - depth_camera_front_camera_parent: + depth_camera_left_camera_parent: Alpha: 1 Show Axes: false Show Trail: false - depth_camera_left_camera: + depth_camera_rear_lower_camera: Alpha: 1 Show Axes: false Show Trail: false - Value: true - depth_camera_left_camera_parent: + depth_camera_rear_lower_camera_parent: Alpha: 1 Show Axes: false Show Trail: false - depth_camera_rear_camera: + depth_camera_rear_upper_camera: Alpha: 1 Show Axes: false Show Trail: false - Value: true - depth_camera_rear_camera_parent: + depth_camera_rear_upper_camera_parent: Alpha: 1 Show Axes: false Show Trail: false @@ -408,68 +387,55 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - Value: true depth_camera_right_camera_parent: Alpha: 1 Show Axes: false Show Trail: false - docking_hatch_cover: + docking_socket: Alpha: 1 Show Axes: false Show Trail: false + Value: true face_front: Alpha: 1 Show Axes: false Show Trail: false - Value: true face_rear: Alpha: 1 Show Axes: false Show Trail: false - Value: true - front_handle: + face_shell_front: Alpha: 1 Show Axes: false Show Trail: false Value: true - handle: + face_shell_rear: Alpha: 1 Show Axes: false Show Trail: false Value: true - hatch: + hatch_shell: Alpha: 1 Show Axes: false Show Trail: false Value: true - imu_link: - Alpha: 1 - Show Axes: false - Show Trail: false - imu_sensor_frame: + hbc_receiver: Alpha: 1 Show Axes: false Show Trail: false - interface_hatch: + imu_link: Alpha: 1 Show Axes: false Show Trail: false - Value: true lidar: Alpha: 1 Show Axes: false Show Trail: false Value: true - perception_head_cage: + lidar_parent: Alpha: 1 Show Axes: false Show Trail: false - Value: true - remote: - Alpha: 1 - Show Axes: false - Show Trail: false - Value: true top_shell: Alpha: 1 Show Axes: false @@ -479,7 +445,6 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - Value: true wide_angle_camera_front_camera_parent: Alpha: 1 Show Axes: false @@ -488,7 +453,6 @@ Visualization Manager: Alpha: 1 Show Axes: false Show Trail: false - Value: true wide_angle_camera_rear_camera_parent: Alpha: 1 Show Axes: false @@ -510,7 +474,7 @@ Visualization Manager: Marker Topic: /wild_visual_navigation_node/graph_footprints Name: Footprint Namespaces: - footprints: true + {} Queue Size: 100 Value: true - Alpha: 1 @@ -864,8 +828,8 @@ Visualization Manager: - Alpha: 1 Autocompute Intensity Bounds: true Autocompute Value Bounds: - Max Value: 11.379964828491211 - Min Value: -1.0356265306472778 + Max Value: 15.248048782348633 + Min Value: -2.6211636066436768 Value: true Axis: Z Channel Name: intensity @@ -1531,7 +1495,7 @@ Window Geometry: collapsed: false F Traversability Raw: collapsed: false - Height: 1043 + Height: 1376 Hide Left Dock: false Hide Right Dock: true L Confidence Raw: @@ -1542,7 +1506,7 @@ Window Geometry: collapsed: false Placeholder: collapsed: false - QMainWindow State: 000000ff00000000fd00000004000000000000020d00000229fc0200000011fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000001cd00000229000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000002ea000000c80000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640000000259000000520000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b000000027e000000b80000000000000000fb0000000a0049006d00610067006500000002eb000001280000000000000000fb000000140043006f006e0066006900640065006e0063006500000003b3000000c60000000000000000fb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c0061007900000002be000000160000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c0061007900000002ea0000001a0000001600fffffffb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c0061007900000002fc0000001e0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c00610079000000033c0000009f0000001600ffffff000000010000010f0000025ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000017c0000025f000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b2000000000000000000000002000007800000018afc010000000bfb0000001c0049006d00610067006500200046006500610074007500720065007300000000bf000003690000000000000000fc0000000000000202000000c200fffffffa000000010200000004fb0000000a0049006d0061006700650000000000ffffffff0000000000000000fb00000026004100420020005700690064006500200041006e0067006c0065002000460072006f006e00740100000000ffffffff0000001600fffffffb0000002400460072006f006e0074002000280063006f006d007000720065007300730065006400290000000000ffffffff0000000000000000fb0000001e00410053002000460072006f006e00740020002800630061006d00340029010000003d0000010c0000001600fffffffc00000208000001ee0000009300fffffffa000000000200000003fb0000001a004600200049006e00700075007400200049006d006100670065010000003d000001ac0000001600fffffffb0000001a005200200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000001a004c00200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000000a0049006d00610067006501000003240000018a0000000000000000fc000003fc000001b6000000bd00fffffffa000000000200000006fb000000160046002000540072006100760020004f0076006500720100000000ffffffff0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000028004600200054007200610076006500720073006100620069006c0069007400790020005200610077010000003d0000012b0000001600fffffffb00000028005200200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000028004c00200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790000000000ffffffff0000000000000000fc000005b8000001c8000000af00fffffffa000000010200000005fb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000020004600200043006f006e0066006900640065006e006300650020005200610077010000003d0000012b0000001600fffffffb00000020005200200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000020004c00200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790000000000ffffffff0000000000000000fb000000160050006c0061006300650068006f006c006400650072000000054b000001ed0000008500fffffffb000000160049006e00700075007400200049006d006100670065010000031e000001790000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640100000659000001af0000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b010000080e000001aa0000000000000000fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000061fc010000000dfb000000200052006500700072006f006a00650063007400650064002000500061007400680000000000000000ab000000ab00fffffffb00000024005300750070006500720076006900730069006f006e0020005300690067006e0061006c00000000b1000004d2000000b000fffffffb0000001c0054007200610076006500720073006100620069006c0069007400790000000589000000f60000009100fffffffb000000160055006e006300650072007400610069006e007400790000000685000000b30000008500fffffffb000000160050006c0061006300650068006f006c0064006500720000000000000007380000008500fffffffb0000001c0054007200610076006500720073006100620069006c006900740079010000031f0000017d0000000000000000fb000000160055006e006300650072007400610069006e0074007901000004a2000002960000000000000000fb000000140043006f006e0066006900640065006e006300650000000000000003d40000000000000000fb0000001c0054007200610076006500720073006100620069006c0069007400790000000231000001f20000000000000000fb0000001c004100530020004c0065006600740020002800630061006d003300290000000000000007380000009700fffffffb0000001e004100530020005200690067006800740020002800630061006d0035002900000003f000000348000000a000fffffffb0000000800540069006d0065000000000000000780000004f300fffffffb0000000800540069006d006501000000000000045000000000000000000000056d0000022900000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd00000004000000000000020d00000376fc0200000011fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000001cd00000376000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000002ea000000c80000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640000000259000000520000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b000000027e000000b80000000000000000fb0000000a0049006d00610067006500000002eb000001280000000000000000fb000000140043006f006e0066006900640065006e0063006500000003b3000000c60000000000000000fb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c0061007900000002be000000160000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c0061007900000002ea0000001a0000001600fffffffb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c0061007900000002fc0000001e0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c00610079000000033c0000009f0000001600ffffff000000010000010f0000025ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000017c0000025f000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b2000000000000000000000002000009b80000018afc010000000bfb0000001c0049006d00610067006500200046006500610074007500720065007300000000bf000003690000000000000000fc000000000000029b000000c200fffffffa000000010200000004fb0000000a0049006d0061006700650000000000ffffffff0000000000000000fb00000026004100420020005700690064006500200041006e0067006c0065002000460072006f006e00740100000000ffffffff0000001600fffffffb0000002400460072006f006e0074002000280063006f006d007000720065007300730065006400290000000000ffffffff0000000000000000fb0000001e00410053002000460072006f006e00740020002800630061006d00340029010000003d0000010c0000001600fffffffc000002a1000002820000009300fffffffa000000000200000003fb0000001a004600200049006e00700075007400200049006d006100670065010000003d000001ac0000001600fffffffb0000001a005200200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000001a004c00200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000000a0049006d00610067006501000003240000018a0000000000000000fc0000052900000239000000bd00fffffffa000000000200000006fb000000160046002000540072006100760020004f0076006500720100000000ffffffff0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000028004600200054007200610076006500720073006100620069006c0069007400790020005200610077010000003d0000012b0000001600fffffffb00000028005200200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000028004c00200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790000000000ffffffff0000000000000000fc0000076800000250000000af00fffffffa000000010200000005fb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000020004600200043006f006e0066006900640065006e006300650020005200610077010000003d0000012b0000001600fffffffb00000020005200200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000020004c00200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790000000000ffffffff0000000000000000fb000000160050006c0061006300650068006f006c006400650072000000054b000001ed0000008500fffffffb000000160049006e00700075007400200049006d006100670065010000031e000001790000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640100000659000001af0000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b010000080e000001aa0000000000000000fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000061fc010000000dfb000000200052006500700072006f006a00650063007400650064002000500061007400680000000000000000ab000000ab00fffffffb00000024005300750070006500720076006900730069006f006e0020005300690067006e0061006c00000000b1000004d2000000b000fffffffb0000001c0054007200610076006500720073006100620069006c0069007400790000000589000000f60000009100fffffffb000000160055006e006300650072007400610069006e007400790000000685000000b30000008500fffffffb000000160050006c0061006300650068006f006c0064006500720000000000000007380000008500fffffffb0000001c0054007200610076006500720073006100620069006c006900740079010000031f0000017d0000000000000000fb000000160055006e006300650072007400610069006e0074007901000004a2000002960000000000000000fb000000140043006f006e0066006900640065006e006300650000000000000003d40000000000000000fb0000001c0054007200610076006500720073006100620069006c0069007400790000000231000001f20000000000000000fb0000001c004100530020004c0065006600740020002800630061006d003300290000000000000007380000009700fffffffb0000001e004100530020005200690067006800740020002800630061006d0035002900000003f000000348000000a000fffffffb0000000800540069006d00650000000000000007800000041800fffffffb0000000800540069006d00650100000000000004500000000000000000000007a50000037600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 R Confidence Raw: collapsed: false R Input Image: @@ -1565,6 +1529,6 @@ Window Geometry: collapsed: false Views: collapsed: true - Width: 1920 - X: 299 - Y: 122 + Width: 2488 + X: 72 + Y: 27 diff --git a/wild_visual_navigation_ros/scripts/wvn_learning_node.py b/wild_visual_navigation_ros/scripts/wvn_learning_node.py index f05368c9..90bece6e 100644 --- a/wild_visual_navigation_ros/scripts/wvn_learning_node.py +++ b/wild_visual_navigation_ros/scripts/wvn_learning_node.py @@ -5,6 +5,7 @@ from wild_visual_navigation.traversability_estimator import MissionNode, ProprioceptionNode import wild_visual_navigation_ros.ros_converter as rc from wild_visual_navigation_msgs.msg import RobotState, SystemState, ImageFeatures +from wild_visual_navigation.visu import LearningVisualizer from wild_visual_navigation_msgs.srv import ( LoadCheckpoint, SaveCheckpoint, @@ -370,14 +371,31 @@ def setup_ros(self, setup_fully=True): self.camera_topics[cam]["name"] = cam # Set subscribers - imagefeat_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/feat", ImageFeatures) - info_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/camera_info", CameraInfo) - sync = message_filters.ApproximateTimeSynchronizer([imagefeat_sub, info_sub], queue_size=4, slop=0.5) - sync.registerCallback(self.imagefeat_callback, self.camera_topics[cam]) + if self.mode == WVNMode.DEBUG: + # In debug mode additionally send the image to the callback function + self._visualizer = LearningVisualizer() + + imagefeat_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/feat", + ImageFeatures) + info_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/camera_info", CameraInfo) + image_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/image_input", + Image) + sync = message_filters.ApproximateTimeSynchronizer([imagefeat_sub, info_sub, image_sub], queue_size=4, + slop=0.5) + sync.registerCallback(self.imagefeat_callback, self.camera_topics[cam]) + + last_image_overlay_pub = rospy.Publisher( + f"/wild_visual_navigation_node/{cam}/debug/last_node_image_overlay", Image, queue_size=10 + ) + + self.camera_handler[cam]["debug"] = {} + self.camera_handler[cam]["debug"]["image_overlay"] = last_image_overlay_pub - self.camera_handler[cam]["image_sub"] = imagefeat_sub - self.camera_handler[cam]["info_sub"] = info_sub - self.camera_handler[cam]["sync"] = sync + else: + imagefeat_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/feat", ImageFeatures) + info_sub = message_filters.Subscriber(f"/wild_visual_navigation_node/{cam}/camera_info", CameraInfo) + sync = message_filters.ApproximateTimeSynchronizer([imagefeat_sub, info_sub], queue_size=4, slop=0.5) + sync.registerCallback(self.imagefeat_callback, self.camera_topics[cam]) # 3D outputs self.pub_debug_proprio_graph = rospy.Publisher( @@ -593,13 +611,20 @@ def robot_state_callback(self, state_msg, desired_twist_msg: TwistStamped): raise Exception("Error in robot state callback") @accumulate_time - def imagefeat_callback(self, imagefeat_msg: ImageFeatures, info_msg: CameraInfo, camera_options: dict): + def imagefeat_callback(self, *args): """Main callback to process incoming images Args: imagefeat_msg (wild_visual_navigation_msg/ImageFeatures): Incoming imagefeatures info_msg (sensor_msgs/CameraInfo): Camera info message associated to the image """ + if self.mode == WVNMode.DEBUG: + assert len(args) == 4 + imagefeat_msg, info_msg, image_msg, camera_options = tuple(args) + else: + assert len(args) == 3 + imagefeat_msg, info_msg, camera_options = tuple(args) + self.system_events["image_callback_received"] = {"time": rospy.get_time(), "value": "message received"} if self.verbose: print(f"\nImage callback: {camera_options['name']}... ", end="") @@ -649,12 +674,21 @@ def imagefeat_callback(self, imagefeat_msg: ImageFeatures, info_msg: CameraInfo, imagefeat_msg.feature_segments, desired_encoding="passthrough", device=self.device ).clone() h_small, w_small = feature_segments.shape[1:3] + + torch_image = torch.zeros((3, h_small, w_small), device=self.device, dtype=torch.float32) + + # convert image message to torch image + if self.mode == WVNMode.DEBUG: + torch_image = rc.ros_image_to_torch( + image_msg, desired_encoding="passthrough", device=self.device + ).clone() + # Create mission node for the graph mission_node = MissionNode( timestamp=ts, pose_base_in_world=pose_base_in_world, pose_cam_in_base=pose_cam_in_base, - image=torch.zeros((3, h_small, w_small), device=self.device, dtype=torch.float32), + image=torch_image, image_projector=image_projector, camera_name=camera_options["name"], use_for_training=camera_options["use_for_training"], @@ -673,7 +707,10 @@ def imagefeat_callback(self, imagefeat_msg: ImageFeatures, info_msg: CameraInfo, # Publish current predictions self.visualize_mission_graph() # Publish supervision data depending on the mode - self.visualize_debug() + self.visualize_image_overlay() + + if added_new_node: + self.traversability_estimator.update_visualization_node() # Print callback time if required if self.print_image_callback_time: @@ -811,6 +848,24 @@ def visualize_mission_graph(self): self.pub_mission_graph.publish(mission_graph_msg) + @accumulate_time + def visualize_image_overlay(self): + """Publishes all the debugging, slow visualizations""" + + # Get visualization node + vis_node = self.traversability_estimator.get_mission_node_for_visualization() + + # Publish reprojections of last node in graph + if vis_node is not None: + cam = vis_node.camera_name + torch_image = vis_node._image + torch_mask = vis_node._supervision_mask + torch_mask = torch.nan_to_num(torch_mask.nanmean(axis=0)) != 0 + torch_mask = torch_mask.float() + + image_out = self._visualizer.plot_detectron_classification(torch_image, torch_mask) + self.camera_handler[cam]["debug"]["image_overlay"].publish(rc.numpy_to_ros_image(image_out)) + if __name__ == "__main__": node_name = "wvn_learning_node" From df1116f0290af98b95e39df37ab22cb461d48bf0 Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Mon, 4 Sep 2023 13:33:47 +0200 Subject: [PATCH 5/7] Added replay function for wide angle camera --- .../launch/replay_launch.launch | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/wild_visual_navigation_ros/launch/replay_launch.launch b/wild_visual_navigation_ros/launch/replay_launch.launch index a39a9b87..ac7e522a 100644 --- a/wild_visual_navigation_ros/launch/replay_launch.launch +++ b/wild_visual_navigation_ros/launch/replay_launch.launch @@ -3,17 +3,18 @@ - + - - + + - + - - - + + + + @@ -26,7 +27,7 @@ - + @@ -73,5 +74,7 @@ + + \ No newline at end of file From d1a40448ddbc97aa9b3d3baa0f36ef1173dff85a Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Mon, 4 Sep 2023 13:57:28 +0200 Subject: [PATCH 6/7] Change visu color of overlay --- wild_visual_navigation/visu/visualizer.py | 9 ++++++--- wild_visual_navigation_ros/scripts/wvn_learning_node.py | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/wild_visual_navigation/visu/visualizer.py b/wild_visual_navigation/visu/visualizer.py index e6bb6499..4c136098 100644 --- a/wild_visual_navigation/visu/visualizer.py +++ b/wild_visual_navigation/visu/visualizer.py @@ -355,9 +355,12 @@ def plot_detectron_classification( overlay_mask=None, **kwargs, ): - cmap = cm.get_cmap("RdYlBu", 256) - cmap = np.concatenate([cmap(np.linspace(0, 0.3, 128)), cmap(np.linspace(0.7, 1.0, 128))]) - cmap = torch.from_numpy(cmap).to(seg)[:, :3] + if kwargs.get("cmap", None): + cmap = kwargs["cmap"] + else: + cmap = cm.get_cmap("RdYlBu", 256) + cmap = np.concatenate([cmap(np.linspace(0, 0.3, 128)), cmap(np.linspace(0.7, 1.0, 128))]) + cmap = torch.from_numpy(cmap).to(seg)[:, :3] img = self.plot_image(img, not_log=True) seg_img = self.plot_segmentation( diff --git a/wild_visual_navigation_ros/scripts/wvn_learning_node.py b/wild_visual_navigation_ros/scripts/wvn_learning_node.py index 8613f7fa..ad9dfa95 100644 --- a/wild_visual_navigation_ros/scripts/wvn_learning_node.py +++ b/wild_visual_navigation_ros/scripts/wvn_learning_node.py @@ -863,7 +863,7 @@ def visualize_image_overlay(self): torch_mask = torch.nan_to_num(torch_mask.nanmean(axis=0)) != 0 torch_mask = torch_mask.float() - image_out = self._visualizer.plot_detectron_classification(torch_image, torch_mask) + image_out = self._visualizer.plot_detectron_classification(torch_image, torch_mask, cmap="Greens") self.camera_handler[cam]["debug"]["image_overlay"].publish(rc.numpy_to_ros_image(image_out)) From cf7e0d76193b16036280578ab7c96bd8be3a16c1 Mon Sep 17 00:00:00 2001 From: RobinSchmid7 Date: Mon, 4 Sep 2023 14:02:20 +0200 Subject: [PATCH 7/7] Update rviz layout --- .../config/rviz/anymal.rviz | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/wild_visual_navigation_ros/config/rviz/anymal.rviz b/wild_visual_navigation_ros/config/rviz/anymal.rviz index e029d92c..9c20e665 100644 --- a/wild_visual_navigation_ros/config/rviz/anymal.rviz +++ b/wild_visual_navigation_ros/config/rviz/anymal.rviz @@ -7,10 +7,16 @@ Panels: - /Global Options1 - /TF1/Tree1 - /Wild Visual Navigation1 + - /Wild Visual Navigation1/Cameras1 + - /Wild Visual Navigation1/Prediction1 + - /Wild Visual Navigation1/Prediction1/F Traversability Raw1 + - /Wild Visual Navigation1/Prediction1/F Learning Mask1 + - /Wild Visual Navigation1/Prediction1/F Confidence Overlay1 + - /Wild Visual Navigation1/LR Prediction1 - /Elevation Map WIFI1/Local Planner (SDF)1 - /Elevation Map RAW1 Splitter Ratio: 0.4659898579120636 - Tree Height: 825 + Tree Height: 698 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties @@ -474,7 +480,7 @@ Visualization Manager: Marker Topic: /wild_visual_navigation_node/graph_footprints Name: Footprint Namespaces: - {} + footprints: true Queue Size: 100 Value: true - Alpha: 1 @@ -828,8 +834,8 @@ Visualization Manager: - Alpha: 1 Autocompute Intensity Bounds: true Autocompute Value Bounds: - Max Value: 15.248048782348633 - Min Value: -2.6211636066436768 + Max Value: 15.389507293701172 + Min Value: -1.5122853517532349 Value: true Axis: Z Channel Name: intensity @@ -883,11 +889,11 @@ Visualization Manager: Value: false - Class: rviz/Image Enabled: true - Image Topic: /wild_visual_navigation_node/front/confidence + Image Topic: /wild_visual_navigation_node/front/debug/last_node_image_overlay Max Value: 1 Median window: 5 Min Value: 0 - Name: F Confidence Raw + Name: F Learning Mask Normalize Range: true Queue Size: 2 Transport Hint: raw @@ -1084,7 +1090,7 @@ Visualization Manager: Transport Hint: raw Unreliable: false Value: false - Enabled: true + Enabled: false Name: LR Prediction Enabled: true Name: Wild Visual Navigation @@ -1448,7 +1454,7 @@ Visualization Manager: Views: Current: Class: rviz/ThirdPersonFollower - Distance: 15.707101821899414 + Distance: 18.592376708984375 Enable Stereo Rendering: Stereo Eye Separation: 0.05999999865889549 Stereo Focal Distance: 1 @@ -1464,9 +1470,9 @@ Visualization Manager: Invert Z Axis: false Name: Current View Near Clip Distance: 0.009999999776482582 - Pitch: 0.8647973537445068 + Pitch: 0.6897974610328674 Target Frame: base - Yaw: 5.881691932678223 + Yaw: 5.176687240600586 Saved: ~ Window Geometry: AB Wide Angle Front: @@ -1483,10 +1489,10 @@ Window Geometry: collapsed: false F Confidence Overlay Replay: collapsed: false - F Confidence Raw: - collapsed: false F Input Image: collapsed: false + F Learning Mask: + collapsed: false F Trav Over: collapsed: false F Traversability Overlay: @@ -1506,7 +1512,7 @@ Window Geometry: collapsed: false Placeholder: collapsed: false - QMainWindow State: 000000ff00000000fd00000004000000000000020d00000376fc0200000011fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000001cd00000376000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000002ea000000c80000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640000000259000000520000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b000000027e000000b80000000000000000fb0000000a0049006d00610067006500000002eb000001280000000000000000fb000000140043006f006e0066006900640065006e0063006500000003b3000000c60000000000000000fb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c0061007900000002be000000160000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c0061007900000002ea0000001a0000001600fffffffb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c0061007900000002fc0000001e0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c00610079000000033c0000009f0000001600ffffff000000010000010f0000025ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000017c0000025f000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b2000000000000000000000002000009b80000018afc010000000bfb0000001c0049006d00610067006500200046006500610074007500720065007300000000bf000003690000000000000000fc000000000000029b000000c200fffffffa000000010200000004fb0000000a0049006d0061006700650000000000ffffffff0000000000000000fb00000026004100420020005700690064006500200041006e0067006c0065002000460072006f006e00740100000000ffffffff0000001600fffffffb0000002400460072006f006e0074002000280063006f006d007000720065007300730065006400290000000000ffffffff0000000000000000fb0000001e00410053002000460072006f006e00740020002800630061006d00340029010000003d0000010c0000001600fffffffc000002a1000002820000009300fffffffa000000000200000003fb0000001a004600200049006e00700075007400200049006d006100670065010000003d000001ac0000001600fffffffb0000001a005200200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000001a004c00200049006e00700075007400200049006d0061006700650100000000ffffffff0000001600fffffffb0000000a0049006d00610067006501000003240000018a0000000000000000fc0000052900000239000000bd00fffffffa000000000200000006fb000000160046002000540072006100760020004f0076006500720100000000ffffffff0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000028004600200054007200610076006500720073006100620069006c0069007400790020005200610077010000003d0000012b0000001600fffffffb00000028005200200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000028004c00200054007200610076006500720073006100620069006c00690074007900200052006100770100000000ffffffff0000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790000000000ffffffff0000000000000000fc0000076800000250000000af00fffffffa000000010200000005fb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000020004600200043006f006e0066006900640065006e006300650020005200610077010000003d0000012b0000001600fffffffb00000020005200200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000020004c00200043006f006e0066006900640065006e0063006500200052006100770100000000ffffffff0000001600fffffffb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790000000000ffffffff0000000000000000fb000000160050006c0061006300650068006f006c006400650072000000054b000001ed0000008500fffffffb000000160049006e00700075007400200049006d006100670065010000031e000001790000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640100000659000001af0000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b010000080e000001aa0000000000000000fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000061fc010000000dfb000000200052006500700072006f006a00650063007400650064002000500061007400680000000000000000ab000000ab00fffffffb00000024005300750070006500720076006900730069006f006e0020005300690067006e0061006c00000000b1000004d2000000b000fffffffb0000001c0054007200610076006500720073006100620069006c0069007400790000000589000000f60000009100fffffffb000000160055006e006300650072007400610069006e007400790000000685000000b30000008500fffffffb000000160050006c0061006300650068006f006c0064006500720000000000000007380000008500fffffffb0000001c0054007200610076006500720073006100620069006c006900740079010000031f0000017d0000000000000000fb000000160055006e006300650072007400610069006e0074007901000004a2000002960000000000000000fb000000140043006f006e0066006900640065006e006300650000000000000003d40000000000000000fb0000001c0054007200610076006500720073006100620069006c0069007400790000000231000001f20000000000000000fb0000001c004100530020004c0065006600740020002800630061006d003300290000000000000007380000009700fffffffb0000001e004100530020005200690067006800740020002800630061006d0035002900000003f000000348000000a000fffffffb0000000800540069006d00650000000000000007800000041800fffffffb0000000800540069006d00650100000000000004500000000000000000000007a50000037600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd0000000400000000000001dd000002f7fc0200000011fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000005fb000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000024c000002f7000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d00650072006100000002ea000000c80000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640000000259000000520000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b000000027e000000b80000000000000000fb0000000a0049006d00610067006500000002eb000001280000000000000000fb000000140043006f006e0066006900640065006e0063006500000003b3000000c60000000000000000fb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c0061007900000002be000000160000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c0061007900000002ea0000001a0000001600fffffffb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c0061007900000002fc0000001e0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c00610079000000033c0000009f0000001600ffffff000000010000010f0000025ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000017c0000025f000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b2000000000000000000000002000009b800000209fc010000000bfb0000001c0049006d00610067006500200046006500610074007500720065007300000000bf000003690000000000000000fc000000000000029b000000c200fffffffa000000010200000004fb0000000a0049006d0061006700650000000000ffffffff0000000000000000fb00000026004100420020005700690064006500200041006e0067006c0065002000460072006f006e00740100000000ffffffff0000001600fffffffb0000002400460072006f006e0074002000280063006f006d007000720065007300730065006400290000000000ffffffff0000000000000000fb0000001e00410053002000460072006f006e00740020002800630061006d00340029000000003d0000010c0000001600fffffffc000002a1000002820000009100fffffffa000000000200000003fb0000001a004600200049006e00700075007400200049006d006100670065010000003d000001ac0000001600fffffffb0000001a005200200049006e00700075007400200049006d0061006700650000000000ffffffff0000001600fffffffb0000001a004c00200049006e00700075007400200049006d0061006700650000000000ffffffff0000001600fffffffb0000000a0049006d00610067006501000003240000018a0000000000000000fc00000529000002390000008100fffffffa000000000200000006fb000000160046002000540072006100760020004f0076006500720100000000ffffffff0000001600fffffffb0000003e004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb00000028004600200054007200610076006500720073006100620069006c0069007400790020005200610077000000003d0000012b0000001600fffffffb00000028005200200054007200610076006500720073006100620069006c00690074007900200052006100770000000000ffffffff0000001600fffffffb00000028004c00200054007200610076006500720073006100620069006c00690074007900200052006100770000000000ffffffff0000001600fffffffb00000030004600200054007200610076006500720073006100620069006c0069007400790020004f007600650072006c006100790000000000ffffffff0000000000000000fc0000076800000250000000a200fffffffa000000010200000005fb00000036004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790020005200650070006c006100790100000000ffffffff0000000000000000fb0000001e00460020004c006500610072006e0069006e00670020004d00610073006b010000003d0000012b0000001600fffffffb00000020005200200043006f006e0066006900640065006e0063006500200052006100770000000000ffffffff0000001600fffffffb00000020004c00200043006f006e0066006900640065006e0063006500200052006100770000000000ffffffff0000001600fffffffb00000028004600200043006f006e0066006900640065006e006300650020004f007600650072006c006100790000000000ffffffff0000000000000000fb000000160050006c0061006300650068006f006c006400650072000000054b000001ed0000008500fffffffb000000160049006e00700075007400200049006d006100670065010000031e000001790000000000000000fb00000036005300750070006500720076006900730069006f006e0020002d00200049006d0061006700650020004c006100620065006c006500640100000659000001af0000000000000000fb00000024005300750070006500720076006900730069006f006e0020002d0020004d00610073006b010000080e000001aa0000000000000000fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000061fc010000000dfb000000200052006500700072006f006a00650063007400650064002000500061007400680000000000000000ab000000ab00fffffffb00000024005300750070006500720076006900730069006f006e0020005300690067006e0061006c00000000b1000004d2000000b000fffffffb0000001c0054007200610076006500720073006100620069006c0069007400790000000589000000f60000009100fffffffb000000160055006e006300650072007400610069006e007400790000000685000000b30000008500fffffffb000000160050006c0061006300650068006f006c0064006500720000000000000007380000008500fffffffb0000001c0054007200610076006500720073006100620069006c006900740079010000031f0000017d0000000000000000fb000000160055006e006300650072007400610069006e0074007901000004a2000002960000000000000000fb000000140043006f006e0066006900640065006e006300650000000000000003d40000000000000000fb0000001c0054007200610076006500720073006100620069006c0069007400790000000231000001f20000000000000000fb0000001c004100530020004c0065006600740020002800630061006d003300290000000000000007380000009700fffffffb0000001e004100530020005200690067006800740020002800630061006d0035002900000003f000000348000000a000fffffffb0000000800540069006d00650000000000000007800000041800fffffffb0000000800540069006d00650100000000000004500000000000000000000007d5000002f700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 R Confidence Raw: collapsed: false R Input Image: