From 1005a70c1bb4f65f39c093bf1f3406e866c7c4d0 Mon Sep 17 00:00:00 2001 From: rq <2192635975@qq.com> Date: Wed, 19 Feb 2025 18:51:45 +0800 Subject: [PATCH 1/2] run on robi dataset --- .gitignore | 3 +- adapter.py | 9 ++- configs/data/bop.yaml | 8 ++- configs/model/segmentor_model/sam.yaml | 2 +- configs/run_vis.yaml | 2 +- configs/user/default.yaml | 3 +- get_object_features_via_FFA.py | 4 +- obj_adapter.py | 38 ++++++------ run_inference.py | 1 + src/dataloader/bop_pbr.py | 4 +- src/model/detector.py | 7 ++- src/scripts/visualize_detectron2.py | 8 ++- test_gdino_sam.py | 12 +++- trans_robi_dataset.py | 56 ++++++++++++++++++ transform_adapted_feats.py | 19 +++--- utils/__pycache__/__init__.cpython-39.pyc | Bin 141 -> 135 bytes .../adapter_dataset.cpython-39.pyc | Bin 3927 -> 3921 bytes utils/__pycache__/data_utils.cpython-39.pyc | Bin 5250 -> 5233 bytes utils/__pycache__/img_utils.cpython-39.pyc | Bin 1494 -> 1488 bytes .../inference_utils.cpython-39.pyc | Bin 17929 -> 18242 bytes .../instance_det_dataset.cpython-39.pyc | Bin 18793 -> 18787 bytes 21 files changed, 129 insertions(+), 47 deletions(-) create mode 100644 trans_robi_dataset.py diff --git a/.gitignore b/.gitignore index 89d0803..0c9b2e9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ results/ ckpts/ imgs_dev/ hf_gdino.py - +data_robi/ # Byte-compiled / optimized / DLL files __pycache__/ **/__pycache__/ @@ -170,3 +170,4 @@ cython_debug/ /dinov2/ /robokit/RoboKit.egg-info/ /robokit/RoboKit.egg-info/ +/datasets/bop_challenge/datasets/* \ No newline at end of file diff --git a/adapter.py b/adapter.py index 4cca527..4f2d172 100644 --- a/adapter.py +++ b/adapter.py @@ -115,16 +115,16 @@ def forward(self, features, labels): dataset_name = f'insDet_{adapter_type}_0523' temperature = 0.05 ratio = 0.6 - feature_dataset = FeatureDataset(data_json='./obj_FFA/object_features_vitl14_reg.json', num_object=100) # 100 objects in total + #feature_dataset = FeatureDataset(data_json='./obj_FFA/object_features_vitl14_reg.json', num_object=100) # 100 objects in total # Assuming 'features' is your (N, 1024) tensor batch_size = 1024 # robo_feature_dataset = FeatureDataset(data_json='./RoboTools_obj_feat/object_features.json', num_object=20) # 20 objects in total - # ycbv_feature_dataset = FeatureDataset(data_json='./BOP_obj_feat/ycbv_object_features.json', num_object=21) # 21 objects in total + ycbv_feature_dataset = FeatureDataset(data_json='./BOP_obj_feat/ycbv_object_features.json', num_object=21) # 21 objects in total # lmo_feature_dataset = FeatureDataset(data_json='./BOP_obj_feat/lmo_object_features.json', num_object=8) - cur_feature_dataset = feature_dataset + cur_feature_dataset = ycbv_feature_dataset # Example training loop input_features = 1024 # Size of the input feature vector, 1024 for large, 768 for base, 384 for small @@ -145,6 +145,7 @@ def forward(self, features, labels): for epoch in range(epochs): for inputs, labels in dataloader: # in dataloader: tqdm(dataloader) + inputs = inputs.to(device) labels = labels.to(device) optimizer.zero_grad() @@ -175,6 +176,7 @@ def forward(self, features, labels): test_dataloader = DataLoader(cur_feature_dataset, batch_size=batch_size, shuffle=False) adatped_features = [] + for inputs, labels in test_dataloader: inputs = inputs.to(device) # labels = labels.to(device) @@ -183,6 +185,7 @@ def forward(self, features, labels): # Perform inference using the model # Your inference code here adatped_features.append(outputs) + adatped_features = torch.cat(adatped_features, dim=0) print(adatped_features.size()) feat_dict = dict() diff --git a/configs/data/bop.yaml b/configs/data/bop.yaml index 7e73816..5687db0 100644 --- a/configs/data/bop.yaml +++ b/configs/data/bop.yaml @@ -18,7 +18,7 @@ reference_dataloader: query_dataloader: _target_: src.dataloader.bop.BaseBOPTest - root_dir: ${machine.root_dir}/datasets/ + root_dir: /home/panda/repos/SAM-6D/SAM-6D/Data/BOP/ split: reset_metaData: True processing_config: @@ -92,4 +92,8 @@ datasets: tyol: cad: tyol_models.zip test: tyol_test_bop19.zip - obj_names: [001_obj, 002_obj, 003_obj, 004_obj, 005_obj, 006_obj, 007_obj, 008_obj, 009_obj, 010_obj, 011_obj, 012_obj, 013_obj, 014_obj, 015_obj, 016_obj, 017_obj, 018_obj, 019_obj, 020_obj, 021_obj] \ No newline at end of file + obj_names: [001_obj, 002_obj, 003_obj, 004_obj, 005_obj, 006_obj, 007_obj, 008_obj, 009_obj, 010_obj, 011_obj, 012_obj, 013_obj, 014_obj, 015_obj, 016_obj, 017_obj, 018_obj, 019_obj, 020_obj, 021_obj] + robi: + cad: robi_models.zip + test: robi_test_bop19.zip + obj_names: [001_obj, 002_obj, 003_obj, 004_obj, 005_obj, 006_obj, 007_obj] \ No newline at end of file diff --git a/configs/model/segmentor_model/sam.yaml b/configs/model/segmentor_model/sam.yaml index 5fd1dd6..ee62b67 100644 --- a/configs/model/segmentor_model/sam.yaml +++ b/configs/model/segmentor_model/sam.yaml @@ -8,4 +8,4 @@ segmentor_width_size: ${model.segmentor_width_size} sam: _target_: src.model.sam.load_sam model_type: vit_h - checkpoint_dir: ${machine.root_dir}/pretrained/segment-anything/ \ No newline at end of file + checkpoint_dir: ckpts/sam_weights/ \ No newline at end of file diff --git a/configs/run_vis.yaml b/configs/run_vis.yaml index 626d6e4..955c503 100644 --- a/configs/run_vis.yaml +++ b/configs/run_vis.yaml @@ -14,4 +14,4 @@ root_dir: ${machine.root_dir}/datasets/ dataset_name: input_file: output_dir: -conf_threshold: 0.7 \ No newline at end of file +conf_threshold: 0.2 \ No newline at end of file diff --git a/configs/user/default.yaml b/configs/user/default.yaml index 17f0655..2fb8b01 100644 --- a/configs/user/default.yaml +++ b/configs/user/default.yaml @@ -1,2 +1,3 @@ local_root_dir: ./datasets/bop23_challenge -slurm_root_dir: ./datasets/bop23_challenge \ No newline at end of file +slurm_root_dir: ./datasets/bop23_challenge +project_root_dir: \ No newline at end of file diff --git a/get_object_features_via_FFA.py b/get_object_features_via_FFA.py index 92a9216..03cab93 100644 --- a/get_object_features_via_FFA.py +++ b/get_object_features_via_FFA.py @@ -189,4 +189,6 @@ def get_object_features_via_dataloader(output_dir, json_filename, object_dataset #obj_features = get_object_masked_FFA_features('./obj_FFA', 'object_features_l_reg_class.json', object_dataset, encoder, img_size=img_size) # obj_features = get_object_features_via_dataloader('./obj_FFA', 'object_features_small.json', object_dataset, encoder, img_size=img_size) -# print(obj_features.shape) \ No newline at end of file +# print(obj_features.shape) + + diff --git a/obj_adapter.py b/obj_adapter.py index 7c3b1f5..7013a23 100644 --- a/obj_adapter.py +++ b/obj_adapter.py @@ -1,4 +1,4 @@ -from adapter_dataset import ObjectFeatureDataset +from utils.adapter_dataset import ObjectFeatureDataset import torch from torch.utils.data import DataLoader, ConcatDataset @@ -23,22 +23,24 @@ def main(cfg : DictConfig): ### bop challenge datasets print(os.getcwd()) - lmo_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/lmo/descriptors_pbr.pth', - num_object=8) - tless_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/tless/descriptors_pbr.pth', - num_object=30, label_offset=8) - tudl_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/tudl/descriptors_pbr.pth', - num_object=3, label_offset=38) - icbin_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/icbin/descriptors_pbr.pth', - num_object=2, label_offset=41) - itodd_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/itodd/descriptors_pbr.pth', - num_object=28, label_offset=43) - hb_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/hb/descriptors_pbr.pth', - num_object=33, label_offset=71) - ycbv_bo23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/ycbv/descriptors_pbr.pth', - num_object=21, label_offset=104) + # lmo_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/lmo/descriptors_pbr.pth', + # num_object=8) + # tless_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/tless/descriptors_pbr.pth', + # num_object=30, label_offset=8) + # tudl_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/tudl/descriptors_pbr.pth', + # num_object=3, label_offset=38) + # icbin_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/icbin/descriptors_pbr.pth', + # num_object=2, label_offset=41) + # itodd_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/itodd/descriptors_pbr.pth', + # num_object=28, label_offset=43) + # hb_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/hb/descriptors_pbr.pth', + # num_object=33, label_offset=71) + # ycbv_bo23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/ycbv/descriptors_pbr.pth', + # num_object=21, label_offset=104) + robi_bop23_feature_dataset = ObjectFeatureDataset(data_json=f'{original_cwd}/datasets/bop23_challenge/datasets/templates_pyrender/robi/descriptors_pbr.pth', + num_object=7) - cur_feature_dataset = hb_bop23_feature_dataset + cur_feature_dataset = robi_bop23_feature_dataset # Example training loop input_features = cfg.params.input_features # Size of the input feature vector @@ -54,9 +56,7 @@ def main(cfg : DictConfig): epochs = cfg.params.epochs if combine_dataset: combined_dataset = ConcatDataset( - [lmo_bop23_feature_dataset, tless_bop23_feature_dataset, tudl_bop23_feature_dataset, - icbin_bop23_feature_dataset, itodd_bop23_feature_dataset, hb_bop23_feature_dataset, - ycbv_bo23_feature_dataset]) + [robi_bop23_feature_dataset]) dataloader = DataLoader(combined_dataset, batch_size=batch_size, shuffle=shuffle) else: dataloader = DataLoader(cur_feature_dataset, batch_size=batch_size, shuffle=shuffle) diff --git a/run_inference.py b/run_inference.py index e870225..1201170 100644 --- a/run_inference.py +++ b/run_inference.py @@ -58,6 +58,7 @@ def run_inference(cfg: DictConfig): ref_dataloader_config._target_ = "src.dataloader.bop_pbr.BOPTemplatePBR" ref_dataloader_config.root_dir = f"{query_dataloader_config.root_dir}" ref_dataloader_config.template_dir += f"templates_pyrender/{cfg.dataset_name}" + ref_dataset = instantiate(ref_dataloader_config) ref_dataset.load_processed_metaData(reset_metaData=True) else: diff --git a/src/dataloader/bop_pbr.py b/src/dataloader/bop_pbr.py index b28ab6b..87f8817 100644 --- a/src/dataloader/bop_pbr.py +++ b/src/dataloader/bop_pbr.py @@ -297,8 +297,8 @@ def __getitem__(self, idx): ] ) dataset = BOPTemplatePBR( - root_dir="/gpfsscratch/rech/tvi/uyb58rn/datasets/bop23_challenge/datasets/lmo", - template_dir="/gpfsscratch/rech/tvi/uyb58rn/datasets/bop23_challenge/datasets/templates_pyrender/lmo", + root_dir="../../../data_robi", + template_dir="../../../data_robi/robi_pyrender", obj_ids=None, level_templates=1, pose_distribution="all", diff --git a/src/model/detector.py b/src/model/detector.py index e02b893..7984423 100644 --- a/src/model/detector.py +++ b/src/model/detector.py @@ -185,7 +185,7 @@ def __init__( self.gdino = GroundingDINOObjectPredictor() self.SAM = SegmentAnythingPredictor(vit_model="vit_h") logging.info("Initialize GDINO and SAM done!") - self.use_adapter = False + self.use_adapter = True if self.use_adapter: self.adapter_type = 'weight' if self.adapter_type == 'clip': @@ -193,7 +193,7 @@ def __init__( model_path = os.path.join("./adapter_weights/bop23", weight_name) self.adapter = ModifiedClipAdapter(1024, reduction=4, ratio=0.6).to('cuda') else: - weight_name = f"bop_obj_shuffle_weight_0430_temp_0.05_epoch_500_lr_0.001_bs_32_weights.pth" + weight_name = f"bop_obj_shuffle_0529_weight_temp_0.05_epoch_500_lr_0.001_bs_32_weights.pth" model_path = os.path.join("./adapter_weights/bop23", weight_name) self.adapter = WeightAdapter(1024, reduction=4).to('cuda') self.adapter.load_state_dict(torch.load(model_path)) @@ -208,6 +208,8 @@ def set_reference_objects(self): start_time = time.time() self.ref_data = {"descriptors": BatchedData(None), "cls_descriptors": BatchedData(None), "appe_descriptors": BatchedData(None)} descriptors_path = osp.join(self.ref_dataset.template_dir, "descriptors.pth") + print("-=-=-=-=-=-=-=-") + print(descriptors_path) # cls_descriptors_path = osp.join(self.ref_dataset.template_dir, "descriptors_cls.pth") # for cls token if self.onboarding_config.rendering_type == "pbr": descriptors_path = descriptors_path.replace(".pth", "_pbr.pth") @@ -225,6 +227,7 @@ def set_reference_objects(self): # object_features = torch.Tensor(feat_dict['features']).cuda() # self.ref_data["descriptors"] = object_features.view(-1, 42, 1024) # print("using adapted object features") + else: for idx in tqdm( range(len(self.ref_dataset)), diff --git a/src/scripts/visualize_detectron2.py b/src/scripts/visualize_detectron2.py index 81a5496..570421e 100644 --- a/src/scripts/visualize_detectron2.py +++ b/src/scripts/visualize_detectron2.py @@ -28,22 +28,26 @@ def visualize(cfg: DictConfig) -> None: with open(cfg.input_file, 'r') as f: dets = json.load(f) logging.info(f'Loaded {len(dets)} detections') + dets = [det for det in dets if det['score'] > cfg.conf_threshold] logging.info(f'Keeping only {len(dets)} detections having score > {cfg.conf_threshold}') lmo_transform_id = {1:0, 5:1, 6:2, 8:3, 9:4,10:5,11:6,12:7} - # sort by (scene_id, frame_id) dets = sorted(dets, key=lambda x: (x['scene_id'], x['image_id'])) + + list_scene_id_and_frame_id = [(det['scene_id'], det['image_id']) for det in dets] + os.makedirs(cfg.output_dir, exist_ok=True) for idx, (scene_id, image_id) in tqdm(enumerate(list_scene_id_and_frame_id)): + if cfg.dataset_name == 'itodd': img = Image.open(f'{cfg.root_dir}/{cfg.dataset_name}/{split}/{scene_id:06d}/gray/{image_id:06d}.tif') img = img.convert('L') else: - img = Image.open(f'{cfg.root_dir}/{cfg.dataset_name}/{split}/{scene_id:06d}/rgb/{image_id:06d}.png') + img = Image.open(f'{"/home/panda/repos/SAM-6D/SAM-6D/Data/BOP"}/{cfg.dataset_name}/{split}/{scene_id:06d}/rgb/{image_id:06d}.png') rgb = img.copy() img = np.array(img) visualizer = CNOSVisualizer(object_names, img_size=img.shape[:2]) diff --git a/test_gdino_sam.py b/test_gdino_sam.py index b2a3196..b92d624 100644 --- a/test_gdino_sam.py +++ b/test_gdino_sam.py @@ -21,11 +21,14 @@ def main(argv): logging.info("GDINO: Predict bounding boxes, phrases, and confidence scores") bboxes, phrases, gdino_conf = gdino.predict(image_pil, text_prompt) + print(bboxes) + logging.info("GDINO post processing") w, h = image_pil.size # Get image width and height # Scale bounding boxes to match the original image size image_pil_bboxes = gdino.bbox_to_scaled_xyxy(bboxes, w, h) + logging.info("SAM prediction") image_pil_bboxes, masks = SAM.predict(image_pil, image_pil_bboxes) print(image_pil_bboxes) @@ -33,7 +36,10 @@ def main(argv): logging.info("Annotate the scaled image with bounding boxes, confidence scores, and labels, and display") bbox_annotated_pil = annotate(overlay_masks(image_pil, masks), image_pil_bboxes, gdino_conf, phrases) - bbox_annotated_pil.show() + + + + bbox_annotated_pil.save("./imgs/annotedImg.jpg") except Exception as e: # Handle unexpected errors @@ -44,5 +50,5 @@ def main(argv): # Run the main function with the input image path # app.run(main, ['imgs/color-000078.png']) # app.run(main, ['imgs/color-000019.png']) - app.run(main, ['imgs/clutter-test.png']) - #app.run(main, ["/home/yangxiao/Documents/datasets/some_objects/data_fetch/object1/color-000007.jpg"]) \ No newline at end of file + app.run(main, ['imgs/rgb_0.png']) + # app.run(main, ["/home/yangxiao/Documents/datasets/some_objects/data_fetch/object1/color-000007.jpg"]) \ No newline at end of file diff --git a/trans_robi_dataset.py b/trans_robi_dataset.py new file mode 100644 index 0000000..6597864 --- /dev/null +++ b/trans_robi_dataset.py @@ -0,0 +1,56 @@ +import os +import shutil +from pathlib import Path +from tqdm import tqdm + +def reorganize_dataset(root_dir): + """ + Reorganize dataset from: + robi/obj_000001/rgb_0.png, mask_0.png, *.npy + to: + robi/obj_000001/images/0.png + robi/obj_000001/masks/0.png + And remove all .npy files + """ + root_path = Path(root_dir) + + # 遍历所有对象文件夹 + obj_dirs = [d for d in root_path.iterdir() if d.is_dir() and d.name.startswith('obj_')] + + for obj_dir in tqdm(obj_dirs, desc="Processing objects"): + # 创建新的文件夹结构 + images_dir = obj_dir / 'images' + masks_dir = obj_dir / 'masks' + + images_dir.mkdir(exist_ok=True) + masks_dir.mkdir(exist_ok=True) + + # 删除所有.npy文件 + npy_files = list(obj_dir.glob('*.npy')) + for npy_file in npy_files: + npy_file.unlink() # 删除文件 + + # 获取所有视角的文件 + files = list(obj_dir.glob('*_*.png')) + + for file_path in files: + # 解析文件名获取视角编号 + if file_path.name.startswith('rgb_'): + view_num = file_path.stem.split('_')[1] + new_name = f"{view_num}.png" + shutil.move(str(file_path), str(images_dir / new_name)) + elif file_path.name.startswith('mask_'): + view_num = file_path.stem.split('_')[1] + new_name = f"{view_num}.png" + shutil.move(str(file_path), str(masks_dir / new_name)) + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser(description='Reorganize dataset structure') + parser.add_argument('--root_dir', type=str, required=True, help='Root directory of the dataset') + + args = parser.parse_args() + + reorganize_dataset(args.root_dir) + print("Dataset reorganization completed!") \ No newline at end of file diff --git a/transform_adapted_feats.py b/transform_adapted_feats.py index f4bcd47..a3a4eab 100644 --- a/transform_adapted_feats.py +++ b/transform_adapted_feats.py @@ -9,13 +9,14 @@ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') ### bop challenge datasets -lmo_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/lmo/descriptors_pbr.pth', num_object=8) -tless_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/tless/descriptors_pbr.pth', num_object=30) -tudl_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/tudl/descriptors_pbr.pth', num_object=3) -icbin_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/icbin/descriptors_pbr.pth', num_object=2) -itodd_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/itodd/descriptors_pbr.pth', num_object=28) -hb_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/hb/descriptors_pbr.pth', num_object=33) -ycbv_bo23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/ycbv/descriptors_pbr.pth', num_object=21) +# lmo_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/lmo/descriptors_pbr.pth', num_object=8) +# tless_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/tless/descriptors_pbr.pth', num_object=30) +# tudl_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/tudl/descriptors_pbr.pth', num_object=3) +# icbin_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/icbin/descriptors_pbr.pth', num_object=2) +# itodd_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/itodd/descriptors_pbr.pth', num_object=28) +# hb_bop23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/hb/descriptors_pbr.pth', num_object=33) +# ycbv_bo23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/ycbv/descriptors_pbr.pth', num_object=21) +robi_bo23_feature_dataset = FeatureDataset(data_json='datasets/bop23_challenge/datasets/templates_pyrender/robi/descriptors_pbr.pth', num_object=7) adapter_args = "bop_obj_shuffle_0529_weight_temp_0.05_epoch_500_lr_0.001_bs_32" @@ -28,8 +29,8 @@ model.eval() # Set the model to evaluation mode batch_size = 16 -dataset_folder = 'lmo' -test_dataloader = DataLoader(lmo_bop23_feature_dataset, batch_size=batch_size, shuffle=False) +dataset_folder = 'robi' +test_dataloader = DataLoader(robi_bo23_feature_dataset, batch_size=batch_size, shuffle=False) adatped_features = [] for inputs, _ in test_dataloader: diff --git a/utils/__pycache__/__init__.cpython-39.pyc b/utils/__pycache__/__init__.cpython-39.pyc index c58760e2c5a20020695b389a2abfd2e96cafe5c6..b1cab788228592501b6d6f3092156bb1b48c42b6 100644 GIT binary patch delta 50 zcmeBWY-i+2FSHv6j-&&&bbB)h|fQOG(r(N-fAQ*7x&t3D)&XotUl$ E0AVB#D*ylh delta 56 zcmZo?>}BLhQ^S_rB`Go=IguUCzs}?=9Lud7v(4A KXJ<}KR09CL@e&6B diff --git a/utils/__pycache__/adapter_dataset.cpython-39.pyc b/utils/__pycache__/adapter_dataset.cpython-39.pyc index 8643ceba50281abe2450d732f38571774740211e..74de7743f09471d749aa40af3c2953d8c37a3593 100644 GIT binary patch delta 171 zcmcaEcTtWfk(ZZ?0SFGB-ITtON1sK?SU)2_H&wqNF)t-izbLgJzgXYT(vw;6o_wegye^$<`w4`-Qx7iFUn2K0h& diff --git a/utils/__pycache__/data_utils.cpython-39.pyc b/utils/__pycache__/data_utils.cpython-39.pyc index 46a5580dac0cbcd87de5c990c0c73b2b4cdfa50e..af77016a8535fd2ab7713f40b3c68e3f8f5452a4 100644 GIT binary patch delta 313 zcmZqD{HVc~$ji&c00almZc5)MzLD<&v$URmMt*LpenDbhN}_&IYC(RnzMrQ{u&!Tf z$!0E=Lu`yulh1NZW%Syd%>9Q^(jBPz7DsADL4ICpUdb(viuhz8omzBjas_WTP-zCY z>}E#3wTx`eK!rsvleh3EGiFSd5a?udpS(!GgDoB;>^}K}fDBtYi0Ls|NYH|@aI?2y z5u-~cNCZx3aumga1pI)+Etcf`g32N$5R*ACwfq)qL1Hn`+BmR4Vp6fDKoQvJ(8-L# z+KdU4b%iY$(oX(rg7&$qdTXypY-nEQuEXmS+AfCT)3#4VQO{DR6NCJ>W3FSYy@Ye8Z$ z(ArqAKw?s{ra%$c=#a@DgtQssC(8(1Fs1>`7M`3T>}^;BRHn&TBo3m4Z?VV6r{pKc v#}{P+`9(z_!U{yNfe2#|5jFXVuz{2}h#3hY(m_N4hya;X#0oapQN#cMof2XS diff --git a/utils/__pycache__/img_utils.cpython-39.pyc b/utils/__pycache__/img_utils.cpython-39.pyc index 4695a8d7aa02daa9f5aea518d0f599496c7ba13b..62c5654dadd75f7476b7f99a01d999dd8ea99a92 100644 GIT binary patch delta 107 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 delta 5020 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 C9Itc$ diff --git a/utils/__pycache__/instance_det_dataset.cpython-39.pyc b/utils/__pycache__/instance_det_dataset.cpython-39.pyc index 3d48653a501201763ae21a4479a41fdf3580bcb7..c211960169d849f77865ff928c1eb934b73d9c24 100644 GIT binary patch delta 3356 zcmbuBe@xV69LIV1aU5{qiTqH308#Kz?+AZ{g215!^yAh%iqH&B?!-g5JD)p$fHpKY z%-YI$C`+Tl$h4KeF7tO{>&J@RY-?+tX-?amtL4@oZml)?yq~Z5JqX0sZQs{E_k5n` z^L@Ub_viU>vy)x#WI9`HY;*|y&YeHfcv$BSn_OU8l*mZYVL?_lh^fSgeeET1@&WH!AAbJVDN$cxV#jJk)SCWyw&dH(gu zC&SoAk)P6&z7HYx10MtG=gHh36n~`b8?(=e)aHa58XbtVJGsl&;^3PQ>p3w$Eu9?^ zwP|S@KN>y}o6@G3`p8@wMMYWXZE(08{3Kirgg~r^yQ#Eo&2>#)w<{3lv~S?2L`F`s z|ChAf(DozLrWcXArNJ@R9BfFt1?^p zvuLaX%77^ZL)7q6&Y1-t=E)tvN}v%~1q@4^Q=H6LQZZ5`7NfUw=ny$rCcKv%5cE#5 zM_aXFycfFp8#8%W;`@sTE^tR6VVd9THoNWrbrXP9f76O#s=`GW`HQ zjF%wyJWm`jCF}Sx*vEkr2sm%-fW<=sO2JQwquGYC(};2gFak4y&wva-s(2QbQctk@ z04SvBdCs4a(-GSKH8mLGgGwP2J!ApMAZlfdRuB9ej2Ko4i_j*^AttCCENHa@IlzjL zkQx7_FrLV@8^6Ussk#cOe?K{N$dHes+TyR@YC z=gF}ZnbMM>Wzb$bPFyWa62)_uunzyLbEk#QJVd^>3Cr?k&0ns<*yL&Ct%#dWsBQ~4 zdR&csuekQmbUGko3Rc8njRiDLFHU%VT5K$s&At!^3zlf)r}+Gl^Y^iKxvR=-(@CCz zaQ9AX7P??F4N4_e3rFg>0mvm7B7>6nBUe?B!zqditCq_G_#R^@ zF^F{UEmfeWnp+?K%G_QcD>n4*x{8}g>*|6$4{sORHOgB=eUU9&-fI?MoV?a}V67nx z9te48@QNEnv+2^2vhY~NIykk;UZrkR<Wvjun_*b1nVl=Jh5NyWYS z%B70jfoPk@)7&a=bIL^I9D)-m(`OU6iW3t%5m0_>aQY^d{K`5+L}|KZ8~iT-;lOqR z%~)R5R1x%Wy$rkp>;QfOhRyVn;H75EFkQ4G>LQaTkGe|;G^#ik1v4kIizJ6~>8Uku zjM<41J%CUAYeB{g>A?l=vT|CMMY8te7=8j!jxSh#K;3~prN6YuYtWhv z$VEOKmMW$^k>uHw0Y@J&1;7FrQW)|*pWpGv-#Me?9`Pj_`{Y)aw3xHTkv1f$&PeAF zUN&SEN!jje$GKI$X!O(O3dL=wybYc<6KGXj5%mv$l)W3%eG9LR;7ZA(L4NdXSaX0@ zkzbLemwA#qs7&C8!ckGrHjA$+iWa)is|(l#bOU>UUI1qu$EL?G02cwM$uTXyT9j0- QXV=BC%IR!_xLUdWAFu4Tng9R* delta 3120 zcmb`JX>6257{{F+%eHLG(wowT9#Yt*w1je$0;SthThKJU=X3+!?ngXqH#xNl@;x9JFP|CCRgiDyUAU&&TZ~=T3sE!BJOT+ zx7+;(BhAsd1`W6R>^)YC(P{Fv8xkgd8C{)DPq)E8H>NRy)d}~^zf^TJ0=M}+8czgk z68GY(Qaw}?h_cxo)GN&eDVQCEc`> z-DdjxR0K7Pk5$d$)|#gL6zt&NfvvO zV`-}W$>q66;3urJ!_>N0oKC70H7SPVcVPQ2AZK$FC9gP_qAz+6#jswEQ7d|kPw5yf zElE7cj}dLzi~Qcyi;--nD407i^8>i~5cpWiJ|upddoo0=Kf|%9iOd2sEOzcPIjy`K zoqA9eX|}cU9DL>y22+&iSd5BOXpgd(I!r+W!wiZ|qr0VzpN7eZ=*rAV8Kt5j1`QMo zE-OEWre-mmna0jzV*Ws8VMH(7HSv11H2~!VotC3B&jO->jQ}Rgqkw0DO#r6H5legv zArPalZCbB?X1%_VKZnY#Km~xs=whZu`GPrUYX({XGhhL%a_?;7OjbjBs1PiJkxh6s zX~_drJVgIT;T+qjj^qR5>iFBT?U8Bk!#V>v4rqWA1TmCeso~QVtDRrNJ`uy|`e}{j zL)0yk(P-ESHPepqVR*wnaw(7^0X{zk{J%2IXr>nStju(MK zpaA$B$O5D+mr&{k5I>51*m6anFQnd!7Wg7+zoklD!UTP@VTH9Qj)HQB6PaIuu_CYd zU6)=clU6M%O~3-c2s8s>bls3|Vc$#nu9B4oOINZ{Y!k_M74rEX8D_l*!ux-Zjg9d>7&H>5oxvojZXnX` z>QJ=LhG|eJDNj(X5T}tF(4!KVd>E^g%uz=zI?aS5DV5s}dnuokv>Bf!AdHYlmTqCK z5Hj@|S@mHf)KpM22&taMugQ~GvaEsi`FAgyA3@@bteBI~1()*(O+8VC9#<a zNEc9aNlQFpJ)pAtaF6l}qO+u!eI*7<8dP##UO!uTlBs06Y80nRQ?|(?Fl9q>F~Ale zxDE0|VA)&;L70V6S{wNVGU$uUlRO<$eXqo65J~P2+FOd2eUXh5syPYzJNmhx{|S0Syaj>!m!$u=RlWIzzxV--bJPHOu87g9&vAVG2Mj8Yt9w> z(5P09axfiKQEfogVRiZ3obN)P7lB^jCAmJQNGvd#h z9g@LHj%jYSJo%S*3K(^8SSqCGMrzf63w{?6~TSi z;uCKGz6W>%xGm>;OE}8)mML1OLu&E(S;TLle^^0oQfoZ~Q9_qqL~2bOze%r-(U}L( z^C;jIxAhysKUxB0(*q~;$Kxk3eg}!Riiew(><>3nu8Lr`@KY-tNEyv}u#^XKAxc3l zW#TVDT^2AZE?1_{lPkfl-ft9#qIF7o)Tk=n@6hxmvkk zIUl(b9|>c1GutIDSFc`!=PTa_^aF>1W557#6+kNDIAt8lawx+wExtpnta+aOEJkV; KvQ81GdHo-YXs6)- From 2faf3b67b565dc53fed0e37a6483ad4ce196d1a5 Mon Sep 17 00:00:00 2001 From: rq <2192635975@qq.com> Date: Wed, 19 Feb 2025 19:01:58 +0800 Subject: [PATCH 2/2] add workflow in readme on how to use robi --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index ab81a97..23c453a 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,14 @@ Display masks, object IDs, and scores using Detectron2. python -m src.scripts.visualize_detectron2 dataset_name=$DATASET_NAME input_file=$INPUT_FILE output_dir=$OUTPUT_DIR ``` +### Inference on robi Dataset + +1. train adapter +2. set NIDS-NET's adpater to true +3. inference +4. evaulation + + ## Real-World Robot Experiment We test our NIDS-Net on YCBV objects using ROS with a Fetch robot. We use 1. template embeddings of synthetic images from CNOS: "ros/weight_obj_shuffle2_0501_bs32_epoch_500_adapter_descriptors_pbr.json"