From 790e3cae6316b069585ac80e9feb6604235576df Mon Sep 17 00:00:00 2001 From: Hannah DeFazio Date: Thu, 15 Feb 2024 12:53:36 -0500 Subject: [PATCH 1/3] Add BBN and Kitware lab data to dataloader --- angel_system/data/medical/data_paths.py | 61 +++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/angel_system/data/medical/data_paths.py b/angel_system/data/medical/data_paths.py index ba16708e3..169a2c9fb 100644 --- a/angel_system/data/medical/data_paths.py +++ b/angel_system/data/medical/data_paths.py @@ -18,9 +18,7 @@ m2_activity_gt_dir = f"{activity_gt_dir}/m2_labels/" m2_activity_config_fn = f"{activity_config_path}/recipe_m2.yaml" -m2_ros_bags_dir = f"{ros_bags_dir}/m2/m2_extracted/" m2_bbn_data_dir = f"{bbn_data_dir}/Release_v0.5/v0.52/M2_Tourniquet/Data" - m2_training_split = { "train_activity": [ f"{m2_bbn_data_dir}/M2-{x}" @@ -91,20 +89,73 @@ m2_obj_dets_dir = f"{objects_dir}/m2" m2_obj_config = f"{object_config_path}/task_m2.yaml" +# M2 Lab +# ------ +m2_lab_bbn_data_dir = f"{bbn_data_dir}/M2_Lab_data/skills_by_frame" +m2_lab_training_split = { + "train_activity": [], + "val": [], + "test": [ + f"{m2_lab_bbn_data_dir}/tq_{x}" + for x in [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 + ] + ], +} -def grab_data(recipe, machine): + +# M2 Kitware +# ---------- +m2_kitware_data_dir = f"{ros_bags_dir}/M2/M2_extracted/" +m2_kitware_training_split = { + "train_activity": [], + "val": [], + "test": [ + f"{m2_kitware_data_dir}/kitware_m2_video_{x}_extracted" + for x in [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 + ] + ], +} + + +def grab_data(skill, machine="gyges"): if machine == "gyges": - if recipe == "m2": + if skill == "m2": return ( ptg_root, data_dir, m2_activity_config_fn, m2_activity_gt_dir, - m2_ros_bags_dir, + None, m2_training_split, m2_obj_dets_dir, m2_obj_config, ) + elif skill == "m2_lab": + return ( + ptg_root, + data_dir, + None, + None, + m2_kitware_data_dir, + m2_lab_training_split, + None, + None, + ) + elif skill == "m2_kitware": + return ( + ptg_root, + data_dir, + None, + None, + None, + m2_kitware_training_split, + None, + None, + ) else: raise NotImplementedError From e6aba07ac0e7d46593a21f3880a64b892b623a89 Mon Sep 17 00:00:00 2001 From: Hannah DeFazio Date: Thu, 15 Feb 2024 12:54:28 -0500 Subject: [PATCH 2/3] Make filepaths in activity dataloader more generic --- angel_system/data/medical/load_bbn_data.py | 34 +++++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/angel_system/data/medical/load_bbn_data.py b/angel_system/data/medical/load_bbn_data.py index b8c0e76ed..0ab83466a 100644 --- a/angel_system/data/medical/load_bbn_data.py +++ b/angel_system/data/medical/load_bbn_data.py @@ -242,16 +242,35 @@ def activity_label_fixes(activity_label, target): return label, label_id -def bbn_activity_txt_to_csv(root_dir): +def bbn_activity_txt_to_csv(root_dir, output_dir): """ Generate DIVE csv format activity annotations from BBN's text annotations + + :param root_dir: Path to a folder containing video folders + Expected setup: + root_dir/ + {VIDEO_NAME}/ + {action labels by frame}.txt + images/ + {filename}.png + ... + """ - task = "M2_Tourniquet" - print(f"{root_dir}/{task}/Data/*/*_action_labels_by_frame.txt") + print(f"{root_dir}/*/*_action_labels_by_frame.txt") + + action_fns = glob.glob( + f"{root_dir}/*/*.action_labels_by_frame.txt" + ) + if not action_fns: + # Lab videos + action_fns = glob.glob( + f"{root_dir}/*/*_skills_frame.txt" + ) + if not action_fns: + warnings.warn(f"No text annotations found in {root_dir}") + return - for action_txt_fn in glob.glob( - f"{root_dir}/{task}/Data/*/*.action_labels_by_frame.txt" - ): + for action_txt_fn in action_fns: track_id = 0 video_dir = os.path.dirname(action_txt_fn) video_name = os.path.basename(video_dir) @@ -262,8 +281,7 @@ def bbn_activity_txt_to_csv(root_dir): lines = action_f.readlines() # Create output csv - task_dir = "m2_labels" - csv_fn = f"{activity_dir}/{task_dir}/{video_name}_activity_labels_v2.csv" + csv_fn = f"{output_dir}/{video_name}_activity_labels_v2.csv" csv_f = open(csv_fn, "w") csv_f.write( "# 1: Detection or Track-id,2: Video or Image Identifier,3: Unique Frame Identifier,4-7: Img-bbox(TL_x,TL_y,BR_x,BR_y),8: Detection or Length Confidence,9: Target Length (0 or -1 if invalid),10-11+: Repeated Species,Confidence Pairs or Attributes\n" From fc8d40f427cff9db5d8b15c648552cb8bb6342bd Mon Sep 17 00:00:00 2001 From: Hannah DeFazio Date: Thu, 15 Feb 2024 13:10:05 -0500 Subject: [PATCH 3/3] black reformatting --- angel_system/data/medical/data_paths.py | 66 ++++++++++++++++++++-- angel_system/data/medical/load_bbn_data.py | 8 +-- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/angel_system/data/medical/data_paths.py b/angel_system/data/medical/data_paths.py index 169a2c9fb..b9a5854fe 100644 --- a/angel_system/data/medical/data_paths.py +++ b/angel_system/data/medical/data_paths.py @@ -98,8 +98,36 @@ "test": [ f"{m2_lab_bbn_data_dir}/tq_{x}" for x in [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, ] ], } @@ -114,8 +142,38 @@ "test": [ f"{m2_kitware_data_dir}/kitware_m2_video_{x}_extracted" for x in [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, ] ], } diff --git a/angel_system/data/medical/load_bbn_data.py b/angel_system/data/medical/load_bbn_data.py index 0ab83466a..5c08123bb 100644 --- a/angel_system/data/medical/load_bbn_data.py +++ b/angel_system/data/medical/load_bbn_data.py @@ -258,14 +258,10 @@ def bbn_activity_txt_to_csv(root_dir, output_dir): """ print(f"{root_dir}/*/*_action_labels_by_frame.txt") - action_fns = glob.glob( - f"{root_dir}/*/*.action_labels_by_frame.txt" - ) + action_fns = glob.glob(f"{root_dir}/*/*.action_labels_by_frame.txt") if not action_fns: # Lab videos - action_fns = glob.glob( - f"{root_dir}/*/*_skills_frame.txt" - ) + action_fns = glob.glob(f"{root_dir}/*/*_skills_frame.txt") if not action_fns: warnings.warn(f"No text annotations found in {root_dir}") return