def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.deprecated.init_process_group( backend="nccl", init_method="env://" ) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) model = train(cfg, args.local_rank, args.distributed) if not args.skip_test: test(cfg, model, args.distributed)
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Image Dir Demo") parser.add_argument( "--image-dir", required=True, help="path to image dir", ) parser.add_argument( "--output-dir", required=True, help="path to output dir", ) parser.add_argument( "--config-file", default="configs/e2e_faster_rcnn_R_50_FPN_1x.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--confidence-threshold", type=float, default=0.7, help="Minimum score for the prediction to be shown", ) parser.add_argument( "--templete", default='coco', help="Categories templete for pretty print", ) parser.add_argument( "--min-image-size", type=int, default=800, help="Smallest size of the image to feed to the model. " "Model was trained with 800, which gives best results", ) parser.add_argument( "--show-mask-heatmaps", dest="show_mask_heatmaps", help="Show a heatmap probability for the top masks-per-dim masks", action="store_true", ) parser.add_argument( "--masks-per-dim", type=int, default=2, help="Number of heatmaps per dimension to show", ) parser.add_argument( "opts", help="Modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() # load config from file and command-line arguments cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() # prepare object that handles inference plus adds predictions on top of image coco_demo = COCODemo( cfg, confidence_threshold=args.confidence_threshold, show_mask_heatmaps=args.show_mask_heatmaps, masks_per_dim=args.masks_per_dim, min_image_size=args.min_image_size, categories_templete=args.templete, ) annotation_dir = os.path.join(args.output_dir, 'annotations') vis_dir = os.path.join(args.output_dir, 'vis') if not os.path.exists(annotation_dir): os.makedirs(annotation_dir) # os.makedirs(vis_dir) for f in os.listdir(args.image_dir): if f.endswith('.png') or f.endswith('.jpg') or f.endswith('.jpeg'): image_fn = os.path.join(args.image_dir, f) img = cv2.imread(image_fn) start_time = time.time() prediction = coco_demo.compute_prediction(img) json_str = coco_demo.prediction_to_json_str(f, prediction) ofs = open(os.path.join(annotation_dir, f + '.json'), 'w') ofs.write(json_str) ofs.close() composite = coco_demo.run_on_opencv_image(img) print("Time: {:.2f} s / img".format(time.time() - start_time)) cv2.imshow("COCO detections", composite) # cv2.imwrite(os.path.join(vis_dir, f+'.png'), composite) if cv2.waitKey(1) == 27: break # esc to quit cv2.destroyAllWindows()
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Webcam Demo") parser.add_argument( "--config-file", default="../configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--confidence-threshold", type=float, default=0.7, help="Minimum score for the prediction to be shown", ) parser.add_argument( "--min-image-size", type=int, default=224, help="Smallest size of the image to feed to the model. " "Model was trained with 800, which gives best results", ) parser.add_argument( "--show-mask-heatmaps", dest="show_mask_heatmaps", help="Show a heatmap probability for the top masks-per-dim masks", action="store_true", ) parser.add_argument( "--masks-per-dim", type=int, default=2, help="Number of heatmaps per dimension to show", ) parser.add_argument( "opts", help="Modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() # load config from file and command-line arguments cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() # prepare object that handles inference plus adds predictions on top of image coco_demo = COCODemo( cfg, confidence_threshold=args.confidence_threshold, show_mask_heatmaps=args.show_mask_heatmaps, masks_per_dim=args.masks_per_dim, min_image_size=args.min_image_size, weight_loading='best_model/model_best.pth', ) images = files_with_ext('test', '.jpg') for image in images: start_time = time.time() img = cv2.imread(image) # ret_val, img = cam.read() composite = coco_demo.run_on_opencv_image(img) print("Time: {:.2f} s / img".format(time.time() - start_time)) output_path = os.path.join('test/' + 'output_' + os.path.basename(image)) print(output_path) # cv2.imshow("COCO detections", composite) cv2.imwrite(output_path, composite)
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=os.getenv('LOCAL_RANK', 0)) parser.add_argument("--max_steps", type=int, default=0, help="Override number of training steps in the config") parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument("--fp16", help="Mixed precision training", action="store_true") parser.add_argument("--amp", help="Mixed precision training", action="store_true") parser.add_argument('--skip_checkpoint', default=False, action='store_true', help="Whether to save checkpoints") parser.add_argument( "--json-summary", help="Out file for DLLogger", default="dllogger.out", type=str, ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() args.fp16 = args.fp16 or args.amp num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) # Redundant option - Override config parameter with command line input if args.max_steps > 0: cfg.SOLVER.MAX_ITER = args.max_steps if args.skip_checkpoint: cfg.SAVE_CHECKPOINT = False cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) if is_main_process(): dllogger.init(backends=[ dllogger.JSONStreamBackend(verbosity=dllogger.Verbosity.VERBOSE, filename=args.json_summary), dllogger.StdOutBackend(verbosity=dllogger.Verbosity.VERBOSE, step_format=format_step) ]) else: dllogger.init(backends=[]) dllogger.log(step="PARAMETER", data={"gpu_count": num_gpus}) # dllogger.log(step="PARAMETER", data={"environment_info": collect_env_info()}) dllogger.log(step="PARAMETER", data={"config_file": args.config_file}) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() dllogger.log(step="PARAMETER", data={"config": cfg}) if args.fp16: fp16 = True else: fp16 = False model, iters_per_epoch = train(cfg, args.local_rank, args.distributed, fp16, dllogger) if not args.skip_test: if not cfg.PER_EPOCH_EVAL: test_model(cfg, model, args.distributed, iters_per_epoch, dllogger)
def main(): mlperf_log.ROOT_DIR_MASKRCNN = os.path.dirname(os.path.abspath(__file__)) parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if is_main_process: # Setting logging file parameters for compliance logging os.environ["COMPLIANCE_FILE"] = './MASKRCNN_complVv0.5.0_' + str( datetime.datetime.now()) mlperf_log.LOG_FILE = os.getenv("COMPLIANCE_FILE") mlperf_log._FILE_HANDLER = logging.FileHandler(mlperf_log.LOG_FILE) mlperf_log._FILE_HANDLER.setLevel(logging.DEBUG) mlperf_log.LOGGER.addHandler(mlperf_log._FILE_HANDLER) if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() print_mlperf(key=mlperf_log.RUN_START) # setting seeds - needs to be timed, so after RUN_START if is_main_process(): master_seed = random.SystemRandom().randint(0, 2**32 - 1) seed_tensor = torch.tensor(master_seed, dtype=torch.float32, device=torch.device("cuda")) else: seed_tensor = torch.tensor(0, dtype=torch.float32, device=torch.device("cuda")) torch.distributed.broadcast(seed_tensor, 0) master_seed = int(seed_tensor.item()) else: print_mlperf(key=mlperf_log.RUN_START) # random master seed, random.SystemRandom() uses /dev/urandom on Unix master_seed = random.SystemRandom().randint(0, 2**32 - 1) # actually use the random seed args.seed = master_seed # random number generator with seed set to master_seed random_number_generator = random.Random(master_seed) print_mlperf(key=mlperf_log.RUN_SET_RANDOM_SEED, value=master_seed) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) # generate worker seeds, one seed for every distributed worker worker_seeds = generate_seeds( random_number_generator, torch.distributed.get_world_size() if torch.distributed.is_initialized() else 1) # todo sharath what if CPU # broadcast seeds from rank=0 to other workers worker_seeds = broadcast_seeds(worker_seeds, device='cuda') # Setting worker seeds logger.info("Worker {}: Setting seed {}".format( args.local_rank, worker_seeds[args.local_rank])) torch.manual_seed(worker_seeds[args.local_rank]) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) model = train(cfg, args.local_rank, args.distributed) print_mlperf(key=mlperf_log.RUN_FINAL)
def main(): os.environ['CUDA_VISIBLE_DEVICES'] = '2' parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default= "/home/asd/Project/AirplaneDetection/Gliding-vertex-Trainer/gliding_vertex-master/configs/glide/dota.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help= "The path to the checkpoint for test, default is the latest checkpoint.", default= "/home/asd/Project/AirplaneDetection/Gliding-vertex-Trainer/exp_dota/0928/model_0040000.pth", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() # sys.path.insert(-1, '/home/asd/Project/AirplaneDetection/Gliding-vertex-Trainer/maskrcnn-benchmark/maskrcnn-benchmark') print(sys.path) from maskrcnn_benchmark.config import cfg cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) # Initialize mixed-precision if necessary use_mixed_precision = cfg.DTYPE == 'float16' amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints", ) output_folders = [None] * len(cfg.DATASETS.TEST) print(output_folders) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip( output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize()
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="configs/free_anchor_R-50-FPN_1x.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--scales", help="", default=( 480, 640, 800, 960, ), ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.deprecated.init_process_group(backend="nccl", init_method="env://") cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.merge_from_list(['TEST.IMS_PER_BATCH', num_gpus]) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = MultiScaleRetinaNet(build_detection_model(cfg), args.scales) model.to(cfg.MODEL.DEVICE) checkpointer = DetectronCheckpointer(cfg, model) _ = checkpointer.load(cfg.MODEL.WEIGHT) iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) output_folders = [None] * len(cfg.DATASETS.TEST) if cfg.OUTPUT_DIR: dataset_names = cfg.DATASETS.TEST for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, data_loader_val in zip(output_folders, data_loaders_val): inference( model, data_loader_val, iou_types=iou_types, #box_only=cfg.MODEL.RPN_ONLY, box_only=False if cfg.RETINANET.RETINANET_ON else cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize()
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default= "../configs/kidney/e2e_mask_rcnn_X_101_32x8d_FPN_1x_kidney_liver_using_pretrained_model.yaml", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) if cfg.OUTPUT_SUB_DIR: output_dir = os.path.join(cfg.OUTPUT_DIR, cfg.OUTPUT_SUB_DIR) else: now = time.localtime() time_dir_name = "%04d%02d%02d-%02d%02d%02d" % ( now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) output_dir = os.path.join(cfg.OUTPUT_DIR, time_dir_name) cfg.merge_from_list(["OUTPUT_DIR", output_dir]) cfg.freeze() if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) model = train(cfg, args.local_rank, args.distributed)
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default= "/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "." logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank(), filename='test_all_BDD_ckpts_log.txt') logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) # initialize model model = build_detection_model(cfg, save_features=False) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) # initialize test type, output folders and dataloader iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints", ) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) # Testing on multiple checkpoints if the weight is a directory instead of a .pth file if cfg.MODEL.WEIGHT.endswith('.pth') or cfg.MODEL.WEIGHT.endswith('.pkl'): all_ckpy_names = [cfg.MODEL.WEIGHT] else: all_ckpy_names = sorted( glob.glob(os.path.join(cfg.MODEL.WEIGHT, '*.pth'))) logger.info("Testing on checkpoints:", all_ckpy_names) for ckpt_name in all_ckpy_names: logger.info("Testing {}".format(ckpt_name)) _ = checkpointer.load(ckpt_name) #cfg.MODEL.WEIGHT) for output_folder, dataset_name, data_loader_val in zip( output_folders, dataset_names, data_loaders_val): # if the inference is done, only do the evaluation # if os.path.isfile(os.path.join(output_folder, "predictions.pth")): # logger.info("Inference was done, only do evaluation!") # predictions = torch.load(os.path.join(output_folder, "predictions.pth")) # extra_args = dict( # box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, # iou_types=iou_types, # expected_results=cfg.TEST.EXPECTED_RESULTS, # expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, # ) # evaluate(dataset=data_loader_val.dataset, # predictions=predictions, # output_folder=output_folder, # **extra_args) # else: # logger.info("No inference was done, run inference first") inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, convert_pred_coco2cityscapes=cfg.DATASETS.CONVERT, ) synchronize()
def main(): # setting default class_num = 21 # change numbers of class batch_size = 2 # change training batch size save_period = 50 # each 5000 iterations save and test once max_iteration = 400000 # train how much iterations lr_reduce_step = (300000, 340000) # reduce learning rate at 300000 and 340000 iterations save_path = 'checkpoints/test' # where to save the model (ex. modify checkpoint/XXXX) train_mode = 'kd' # choose training mode (teacher/student/kd) parser = argparse.ArgumentParser(description="PyTorch Object Detection Training") parser.add_argument( "--teacher-config-file", default="../configs/centermask/centermask_V_19_eSE_FPN_ms_3x.yaml", metavar="FILE", help="path to config file", type=str, ) parser.add_argument( "--student-config-file", default="../configs/centermask/centermask_V_19_eSE_FPN_lite_res600_ms_bs16_4x.yaml", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument( "--opts", help="Modify config options using the command-line", default=['MODEL.FCOS.NUM_CLASSES', class_num, 'SOLVER.CHECKPOINT_PERIOD', save_period, 'SOLVER.TEST_PERIOD', save_period, 'SOLVER.IMS_PER_BATCH', batch_size, 'SOLVER.MAX_ITER', max_iteration, 'SOLVER.STEPS', lr_reduce_step, 'OUTPUT_DIR', save_path], nargs=argparse.REMAINDER, ) # setting kd loss if train_mode == 'kd': parser.add_argument('--loss_head', default=True) parser.add_argument('--loss_correlation', default=True) parser.add_argument('--loss_featuremap', default=False) else: # always False parser.add_argument('--loss_head', default=False) parser.add_argument('--loss_correlation', default=False) parser.add_argument('--loss_featuremap', default=False) global args args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) synchronize() t_cfg = copy.deepcopy(cfg) cfg.merge_from_file(args.student_config_file) cfg.merge_from_list(args.opts) cfg.freeze() t_cfg.merge_from_file(args.teacher_config_file) t_cfg.merge_from_list(args.opts) t_cfg.freeze() if train_mode == 'teacher': total_cfg = [t_cfg] elif train_mode == 'student': total_cfg = [cfg] else: total_cfg = [cfg, t_cfg] output_dir = total_cfg[0].OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) if train_mode == 'teacher': logger.info("Loaded configuration file {}".format(args.teacher_config_file)) else: logger.info("Loaded configuration file {}".format(args.student_config_file)) with open(args.student_config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(total_cfg[0])) model = train(total_cfg, args.local_rank, args.distributed) if not args.skip_test: run_test(total_cfg[0], model, args.distributed)
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) # replace the output directory based on the "task" kind. cfg.OUTPUT_DIR = os.path.join( os.path.dirname(cfg.OUTPUT_DIR), cfg.TASK.KIND.lower(), cfg.NAME, os.path.basename(cfg.OUTPUT_DIR)) cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) running_lock = None if is_main_process(): # save the config to the output directory. save_config_path = os.path.join(output_dir, "config.yaml") with open(save_config_path, "w") as cf: cf.write(cfg.dump()) print("wrote (merged) config to {0}".format(save_config_path)) running_lock = RunningLockFile(output_dir).start() save_code = SaveCodeChanges([os.path.dirname(maskrcnn_benchmark.__path__[0])]) save_code(output_dir) print("saved code changes (against HEAD) to {0}".format(output_dir)) save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) _ = checkpointer.load(cfg.MODEL.WEIGHT) chunk_predictions = cfg.TEST.CHUNK_PREDICTIONS iou_types = ("bbox",) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm",) if cfg.TASK.KIND.lower() == "panoptic": # at some point we should run all bbox/segm, etc. if cfg.MODEL.PANOPTIC.COMPUTE_CC_RESULTS and not chunk_predictions: iou_types = ("ccpan", "pan") else: iou_types = ("pan",) if cfg.TEST.ORDER_ONLY: iou_types = ("order",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder # allow the user to override with existing .pth files. # unsure how this will work in the distributed setting. if not distributed: existing_predictions = cfg.TEST.PREDICTION_PATHS else: print("distributed... ignoring existing predictions if given") existing_predictions = [] chunk_predictions = cfg.TEST.CHUNK_PREDICTIONS if not distributed: # only makes sense for multiple GPUS when doing actual prediction. chunk_predictions = chunk_predictions and existing_predictions data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) dataset_index = 0 try: for output_folder, dataset_name, data_loader_val in zip(output_folders, dataset_names, data_loaders_val): predictions = None if existing_predictions is not None and dataset_index < len(existing_predictions): # todo, check for "chunk" predictions" and delay the load. predictions_path = existing_predictions[dataset_index] if not chunk_predictions: predictions = torch.load(predictions_path) else: # this should be a list of "chunks". predictions = predictions_path print("using chunks: {0}".format(predictions)) inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, predictions=predictions, working_directory=cfg.TEMPORARY_DIR, chunk_predictions=chunk_predictions, compute_pre_results=cfg.MODEL.PANOPTIC.COMPUTE_PRE_RESULTS, panoptic_confidence_thresh=cfg.MODEL.FUSION.CONFIDENCE_THRESHOLD, panoptic_overlap_thresh=cfg.MODEL.FUSION.OVERLAP_THRESHOLD, panoptic_stuff_min_area=cfg.MODEL.FUSION.STUFF_MINIMUM_AREA) synchronize() dataset_index += 1 finally: if running_lock: running_lock.end()
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default= "configs/visual_genome_vqa/e2e_faster_rcnn_X-152-32x8d-FPN_1x_MLP_2048_FPN_512_train.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--save_path", default= "/private/home/vedanuj/projects/vqa-maskrcnn-benchmark/checkpoints/resneXt152_8GPUs/inference/save/", ) parser.add_argument( "--feat_name", default="fc6", ) parser.add_argument( "--n_groups", default=0, ) parser.add_argument( "--group_id", default=1, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() if not os.path.exists(args.save_path): os.makedirs(args.save_path) num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) _ = checkpointer.load(cfg.MODEL.WEIGHT) iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip( output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, save_path=args.save_path, feat_name=args.feat_name, group_id=args.group_id, n_groups=args.n_groups, ) synchronize()
def main(): run = Run.get_context() workspace = run.experiment.workspace # First thing to do is try to set up from environment configure_nccl_settings_from_env() parser = argparse.ArgumentParser(description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=os.getenv("LOCAL_RANK", 0)) parser.add_argument( "--max_steps", type=int, default=0, help="Override number of training steps in the config", ) parser.add_argument("--dataset", type=str, required=True) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument("--fp16", help="Mixed precision training", action="store_true") parser.add_argument("--amp", help="Mixed precision training", action="store_true") parser.add_argument( "--skip_checkpoint", default=False, action="store_true", help="Whether to save checkpoints", ) parser.add_argument( "--json-summary", help="Out file for DLLogger", default="dllogger.out", type=str, ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() args.fp16 = args.fp16 or args.amp num_gpus = get_global_size() args.distributed = num_gpus > 1 args.local_rank = get_local_rank() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) # Redundant option - Override config parameter with command line input if args.max_steps > 0: cfg.SOLVER.MAX_ITER = args.max_steps if args.skip_checkpoint: cfg.SAVE_CHECKPOINT = False cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) if is_main_process(): dllogger.init( backends=[ dllogger.JSONStreamBackend( verbosity=dllogger.Verbosity.VERBOSE, filename=args.json_summary ), dllogger.StdOutBackend( verbosity=dllogger.Verbosity.VERBOSE, step_format=format_step ), ] ) else: dllogger.init(backends=[]) dllogger.log(step="PARAMETER", data={"gpu_count": num_gpus}) # dllogger.log(step="PARAMETER", data={"environment_info": collect_env_info()}) dllogger.log(step="PARAMETER", data={"config_file": args.config_file}) dllogger.log(step="PARAMETER", data={"config": cfg}) if args.fp16: fp16 = True else: fp16 = False if args.local_rank == 0: dllogger.log(step="WEIGHT DOWNLOAD", data={"complete": False}) download_weights(cfg.MODEL.WEIGHT, cfg.PATHS_CATALOG) dllogger.log(step="WEIGHT DOWNLOAD", data={"complete": True}) dllogger.log( step="DATASET MOUNT", data={"complete": False, "dataset": args.dataset} ) coco2017 = Dataset.get_by_name(workspace, args.dataset) cc2017mount = coco2017.mount("/data") cc2017mount.start() dllogger.log( step="DATASET MOUNT", data={"complete": True, "dataset": args.dataset} ) if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() model, iters_per_epoch = train( cfg, args.local_rank, args.distributed, fp16, dllogger )
def main(): # Build a parser for arguments parser = argparse.ArgumentParser(description="Action Prediction Training") parser.add_argument( "--config-file", default="../maskrcnn-benchmark/configs/baseline.yaml", metavar="FILE", help="path to maskrcnn_benchmark config file", type=str, ) parser.add_argument( "--weight_decay", default=0.0001, help="Weight decay", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) parser.add_argument("--initLR", help="Initial learning rate", default=0.001) parser.add_argument( "--freeze", default=False, help="If freeze faster rcnn", ) parser.add_argument("--imageroot", type=str, help="Directory to the images", default="../maskrcnn/data/lastframe/data") parser.add_argument( "--gtroot", type=str, help="Directory to the groundtruth", default="../maskrcnn/data/lastframe/data/train_25k_images_actions.json", ) parser.add_argument( "--reasonroot", type=str, help="Directory to the explanations", default="../maskrcnn/data/lastframe/data/train_25k_images_reasons.json" ) parser.add_argument("--imWidth", type=int, help="Crop to width", default=1280) parser.add_argument("--imHeight", type=int, help="Crop to height", default=720) parser.add_argument("--batch_size", type=int, help="Batch Size", default=2) parser.add_argument("--experiment", type=str, help="Give this experiment a name", default=str(datetime.datetime.now())) parser.add_argument("--model_root", type=str, help="Directory to the trained model", default=".") parser.add_argument("--num_epoch", default=50, help="The number of epoch for training", type=int) parser.add_argument("--from_checkpoint", default=False, help="If we need load weights from checkpoint.") parser.add_argument( "--checkpoint", default=".", help="The path to the checkpoint weights.", type=str, ) args = parser.parse_args() print(args) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() if torch.cuda.is_available(): print("CUDA device is available.") # output directory outdir = cfg.OUTPUT_DIR print("Save path:", outdir) if outdir: mkdir(outdir) # logger = setup_logger("training", outdir) train(cfg, args)
dataNew = save_dir2 + '/' + str(i) + '.mat' scio.savemat(dataNew, {'data': output}) if __name__ == "__main__": parser = argparse.ArgumentParser( description="PyTorch Visual Relationship Detection Training") parser.add_argument( "--config-file", default="/configs/RLM_Net_predicate_recognition_stage.yaml", metavar="FILE", help="path to config file", type=str, ) args = parser.parse_args() cfg.merge_from_file(os.getcwd() + args.config_file) cfg.FILTERMODE = True cfg.OUTPUT_DIR = "outputs/output_predicate_recognition_stage" cfg.freeze() if cfg.OUTPUT_DIR: mkdir(cfg.OUTPUT_DIR) logger = setup_logger("maskrcnn_benchmark", cfg.OUTPUT_DIR, get_rank()) logger.info(args) logger.info("Running with config:\n{}".format(cfg)) step = str(65000).zfill(7) main(step, cfg)
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") # 配置文件参数 parser.add_argument( "--config-file", default="", metavar="FILE", # 用于help 信息输出 help="path to config file", type=str, ) # 当前进程使用的GPU标号 parser.add_argument("--local_rank", type=int, default=0) # 还不清楚这是干嘛的 parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action= "store_true", # 指定action='store_true'或者‘store_False’之后,在运行程序添加参数时直接输入变量名,可以省略对应的默认值True或者False ) # 更改config文件的信息 # 例:opts=['SOLVER.IMS_PER_BATCH', '2', 'SOLVER.BASE_LR', '0.0025'] parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 # 多GPU训练 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() # 把config文件融入到cfg文件 cfg.merge_from_file(args.config_file) # 把opts列表融入到cfg文件 cfg.merge_from_list(args.opts) # 使cfg及其所有子节点不可变 cfg.freeze() # 训练结果存放的目录 # _C.OUTPUT_DIR = "." output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) # 输出一些信息 logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) # 输出配置文件目录 output_config_path = os.path.join(cfg.OUTPUT_DIR, 'config.yml') logger.info("Saving config into: {}".format(output_config_path)) # save overloaded model config in the output directory save_config(cfg, output_config_path) model = train(cfg, args.local_rank, args.distributed) if not args.skip_test: run_test(cfg, model, args.distributed)
def main(): # Build a parser for arguments parser = argparse.ArgumentParser(description="Action Prediction Training") parser.add_argument( "--config_file", default= "/home/selfdriving/maskrcnn-benchmark/configs/e2e_custom_i3d_res50.yaml", metavar="FILE", help="path to maskrcnn_benchmark config file", type=str) # parser.add_argument('-train_split', type=str, default = '/home/selfdriving/I3D/data/4action_reason.json') parser.add_argument("--weight_decay", default=1e-4, help="Weight decay") parser.add_argument("opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER) parser.add_argument("--initLR", help="Initial learning rate", default=0.0001) parser.add_argument("--freeze", default=False, help="If freeze faster rcnn") parser.add_argument("--videoRoot", type=str, help="Directory to the videos", default="/home/selfdriving/mrcnn/bdd12k/") parser.add_argument('--frame_nb', type=int, default=8) parser.add_argument('--interval', type=int, default=2) # parser.add_argument("--featureRoot",type=str,help="Directory to the features",default="/home/selfdriving/I3D/features/") parser.add_argument( "--bboxRoot", type=str, help="Directory to the bbox groundtruth", default= "/home/selfdriving/mrcnn/output/inference/bdd100k_val/last_preds.pth") parser.add_argument( "--actionRoot", type=str, help="Directory to the action label groundtruth", default="/home/selfdriving/I3D/data/4action_reason.json") parser.add_argument("--batch_size", type=int, help="Batch Size", default=1) # parser.add_argument("--experiment",type=str,help="Give this experiment a name",default=str(datetime.datetime.now())) # parser.add_argument("--model_root",type=str,help="Directory to the trained model",default="/home/selfdriving/mrcnn/model_final_apt.pth") parser.add_argument("--val", action='store_true', default=False, help='Validation or not') parser.add_argument("--num_epoch", default=20, help="The number of epoch for training", type=int) parser.add_argument("--from_checkpoint", default=False, help="If we need load weights from checkpoint.") parser.add_argument("--checkpoint", default=".", help="The path to the checkpoint weights.", type=str) args = parser.parse_args() print(args) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() if torch.cuda.is_available(): print("CUDA device is available.") # output directory # outdir = cfg.OUTPUT_DIR # print("Save path:", outdir) # if outdir: # mkdir(outdir) # logger = setup_logger("training", outdir) train(cfg, args)
def main(): mlperf_log.ROOT_DIR_MASKRCNN = os.path.dirname(os.path.abspath(__file__)) # mlperf_log.LOGGER.propagate = False parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default= "/private/home/fmassa/github/detectron.pytorch/configs/rpn_r50.py", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument('--skip-test', dest='skip_test', help='Do not test the model', action='store_true') parser.add_argument("--fp16", action="store_true", help="Enable multi-precision training") parser.add_argument("--min_bbox_map", type=float, default=0.377, help="Target BBOX MAP") parser.add_argument("--min_mask_map", type=float, default=0.339, help="Target SEGM/MASK MAP") parser.add_argument("--seed", type=int, default=1, help="Seed") parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() args.distributed = (int(os.environ["WORLD_SIZE"]) > 1 if "WORLD_SIZE" in os.environ else False) if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") # to synchronize start of time torch.distributed.broadcast(torch.tensor([1], device="cuda"), 0) torch.cuda.synchronize() if torch.distributed.get_rank() == 0: # Setting logging file parameters for compliance logging os.environ["COMPLIANCE_FILE"] = '/MASKRCNN_complVv0.5.0_' + str( datetime.datetime.now()) mlperf_log.LOG_FILE = os.getenv("COMPLIANCE_FILE") mlperf_log._FILE_HANDLER = logging.FileHandler(mlperf_log.LOG_FILE) mlperf_log._FILE_HANDLER.setLevel(logging.DEBUG) mlperf_log.LOGGER.addHandler(mlperf_log._FILE_HANDLER) print_mlperf(key=mlperf_log.RUN_START) # Setting seed seed_tensor = torch.tensor(0, dtype=torch.float32, device=torch.device("cuda")) if torch.distributed.get_rank() == 0: # seed = int(time.time()) # random master seed, random.SystemRandom() uses /dev/urandom on Unix master_seed = random.SystemRandom().randint(0, 2**32 - 1) seed_tensor = torch.tensor(master_seed, dtype=torch.float32, device=torch.device("cuda")) torch.distributed.broadcast(seed_tensor, 0) master_seed = int(seed_tensor.item()) else: # Setting logging file parameters for compliance logging os.environ["COMPLIANCE_FILE"] = '/MASKRCNN_complVv0.5.0_' + str( datetime.datetime.now()) mlperf_log.LOG_FILE = os.getenv("COMPLIANCE_FILE") mlperf_log._FILE_HANDLER = logging.FileHandler(mlperf_log.LOG_FILE) mlperf_log._FILE_HANDLER.setLevel(logging.DEBUG) mlperf_log.LOGGER.addHandler(mlperf_log._FILE_HANDLER) print_mlperf(key=mlperf_log.RUN_START) # random master seed, random.SystemRandom() uses /dev/urandom on Unix master_seed = random.SystemRandom().randint(0, 2**32 - 1) args.seed = master_seed # random number generator with seed set to master_seed random_number_generator = random.Random(master_seed) print_mlperf(key=mlperf_log.RUN_SET_RANDOM_SEED, value=master_seed) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) if args.skip_test: cfg.DO_ONLINE_MAP_EVAL = False cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) #logger = setup_logger("maskrcnn_benchmark", output_dir, args.local_rank) logger = setup_logger("maskrcnn_benchmark", None, args.local_rank) logger.info(args) # generate worker seeds, one seed for every distributed worker worker_seeds = generate_seeds( random_number_generator, torch.distributed.get_world_size() if torch.distributed.is_initialized() else 1) # todo sharath what if CPU # broadcast seeds from rank=0 to other workers worker_seeds = broadcast_seeds(worker_seeds, device='cuda') # Setting worker seeds logger.info("Worker {}: Setting seed {}".format( args.local_rank, worker_seeds[args.local_rank])) torch.manual_seed(worker_seeds[args.local_rank]) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) model = train(cfg, random_number_generator, args.local_rank, args.distributed, args, args.fp16) print_mlperf(key=mlperf_log.RUN_FINAL)
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help="The path to the checkpoint for test, default is the latest checkpoint.", default=None, ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) parser.add_argument('--bf16', action='store_true', default=False, help='enable BF16 by IPEX autocast') parser.add_argument('--jit', action='store_true', default=False, help='enable IPEX JIT path') parser.add_argument('-i', '--iterations', default=-1, type=int, metavar='N', help='number of total iterations to run') parser.add_argument('--iter-warmup', default=-1, type=int, metavar='N', help='number of warm-up iterations to run') parser.add_argument("--enable-profiling", action="store_true", default=False) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) # Initialize mixed-precision if necessary # use_mixed_precision = cfg.DTYPE == 'float16' # amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) iou_types = ("bbox",) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm",) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip(output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, ims_per_patch=cfg.TEST.IMS_PER_BATCH, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, bbox_aug=cfg.TEST.BBOX_AUG.ENABLED, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, bf16=args.bf16, jit=args.jit, iterations=args.iterations, iter_warmup=args.iter_warmup, enable_profiling=args.enable_profiling ) synchronize()
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Webcam Demo") parser.add_argument( "--config-file", default="../configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--confidence-threshold", type=float, default=0.7, help="Minimum score for the prediction to be shown", ) parser.add_argument( "--min-image-size", type=int, default=224, help="Smallest size of the image to feed to the model. " "Model was trained with 800, which gives best results", ) parser.add_argument( "--show-mask-heatmaps", dest="show_mask_heatmaps", help="Show a heatmap probability for the top masks-per-dim masks", action="store_true", ) parser.add_argument( "--masks-per-dim", type=int, default=2, help="Number of heatmaps per dimension to show", ) parser.add_argument( "opts", help="Modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() # load config from file and command-line arguments cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() # prepare object that handles inference plus adds predictions on top of image coco_demo = COCODemo( cfg, confidence_threshold=args.confidence_threshold, show_mask_heatmaps=args.show_mask_heatmaps, masks_per_dim=args.masks_per_dim, min_image_size=args.min_image_size, ) cam = cv2.VideoCapture(0) while True: start_time = time.time() ret_val, img = cam.read() composite = coco_demo.run_on_opencv_image(img) print("fps: {:.2f} s".format(1 / (time.time() - start_time))) cv2.imshow("COCO detections", composite) if cv2.waitKey(1) == 27: break # esc to quit cv2.destroyAllWindows()
def main(): writer = SummaryWriter(logdir="/home/teo/storage/Code/name/MASKRCNN-keypoint") parser = argparse.ArgumentParser(description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="/home/teo/storage/Code/3D-Object-Pose-Recovery/Python/maskrcnn-benchmark/configs/e2e_mask_rcnn_R_50_FPN_1x_carpart_kpts.yaml", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) output_config_path = os.path.join(cfg.OUTPUT_DIR, 'config.yml') logger.info("Saving config into: {}".format(output_config_path)) # save overloaded model config in the output directory save_config(cfg, output_config_path) model = train(cfg, args.local_rank, args.distributed, writer) if not args.skip_test: run_test(cfg, model, args.distributed)
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help="The path to the checkpoint for test, default is the latest checkpoint.", default=None, ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = cfg.OUTPUT_DIR logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank(), filename="testlog.txt") logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) if amp is not None: # Initialize mixed-precision if necessary use_mixed_precision = cfg.DTYPE == 'float16' amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) iou_types = ("bbox",) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm",) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) ignore_cls = cfg.INPUT.IGNORE_CLS for output_folder, dataset_name, data_loader_val in zip(output_folders, dataset_names, data_loaders_val): if not ignore_cls and 'coco' in dataset_name and cfg.WEAK.MODE and cfg.WEAK.NUM_CLASSES != 80: logger.info(f"override ignore_cls -> True for {dataset_name}") ignore_cls = True inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, bbox_aug=cfg.TEST.BBOX_AUG.ENABLED, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ignore_cls=ignore_cls, ) synchronize()
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection") parser.add_argument( "--config-file", default="/home/mrvain/Workspace/test/FCOS_PLUS/configs/fcos/fcos_R_50_FPN_1x.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--weights", default="/home/mrvain/Workspace/test/fcos_r50.pth", metavar="FILE", help="path to the trained model", ) parser.add_argument( "--images-dir", default="/home/mrvain/Workspace/test/images", metavar="DIR", help="path to demo images directory", ) parser.add_argument( "--min-image-size", type=int, default=800, help="smallest size of the image to feed to the model", ) parser.add_argument( "opts", help="modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.merge_from_list(["MODEL.DEVICE", "cpu"]) cfg.MODEL.WEIGHT = args.weights cfg.freeze() # The following per-class thresholds are computed by maximizing # per-class f-measure in their precision-recall curve. # Please see compute_thresholds_for_classes() in coco_eval.py for details. thresholds_for_classes = [ 0.23860901594161987, 0.24108672142028809, 0.2470853328704834, 0.2316885143518448, 0.2708061933517456, 0.23173952102661133, 0.31990334391593933, 0.21302376687526703, 0.20151866972446442, 0.20928964018821716, 0.3793887197971344, 0.2715213894844055, 0.2836397588253021, 0.26449233293533325, 0.1728038638830185, 0.314998596906662, 0.28575003147125244, 0.28987520933151245, 0.2727000117301941, 0.23306897282600403, 0.265937477350235, 0.32663893699645996, 0.27102580666542053, 0.29177549481391907, 0.2043062448501587, 0.24331751465797424, 0.20752687752246857, 0.22951272130012512, 0.22753854095935822, 0.2159966081380844, 0.1993938684463501, 0.23676514625549316, 0.20982342958450317, 0.18315598368644714, 0.2489681988954544, 0.24793922901153564, 0.287187397480011, 0.23045086860656738, 0.2462811917066574, 0.21191294491291046, 0.22845126688480377, 0.24365000426769257, 0.22687821090221405, 0.18365581333637238, 0.2035856395959854, 0.23478077352046967, 0.18431290984153748, 0.18184082210063934, 0.2708037495613098, 0.2268175482749939, 0.19970566034317017, 0.21832780539989471, 0.21120598912239075, 0.270445853471756, 0.189377561211586, 0.2101106345653534, 0.2112293541431427, 0.23484709858894348, 0.22701986134052277, 0.20732736587524414, 0.1953316181898117, 0.3237660229206085, 0.3078872859477997, 0.2881140112876892, 0.38746657967567444, 0.20038367807865143, 0.28123822808265686, 0.2588447630405426, 0.2796839773654938, 0.266757994890213, 0.3266656696796417, 0.25759157538414, 0.2578003704547882, 0.17009201645851135, 0.29051828384399414, 0.24002137780189514, 0.22378061711788177, 0.26134759187698364, 0.1730124056339264, 0.1857597529888153 ] image_filenames = os.listdir(args.images_dir) model = COCODemo( cfg, confidence_thresholds_for_classes=thresholds_for_classes, min_image_size=args.min_image_size ) for image_filename in image_filenames: img = cv2.imread(os.path.join(args.images_dir, image_filename)) if img is None: continue start_time = time.time() composite = model.run_on_opencv_image(img) print("{}\ttime: {:.2f}s".format(image_filename, time.time() - start_time)) cv2.imshow(image_filename, composite) print("Press any keys ...") cv2.waitKey() cv2.destroyAllWindows()
def main(): # apply_prior prior_mask # 0 - - # 1 Y - # 2 - Y # 3 Y Y parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help= "The path to the checkpoint for test, default is the latest checkpoint.", default=None, ) parser.add_argument('--num_iteration', dest='num_iteration', help='Specify which weight to load', default=-1, type=int) parser.add_argument('--object_thres', dest='object_thres', help='Object threshold', default=0.4, type=float) # used to be 0.4 or 0.05 parser.add_argument('--human_thres', dest='human_thres', help='Human threshold', default=0.6, type=float) parser.add_argument('--prior_flag', dest='prior_flag', help='whether use prior_flag', default=1, type=int) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 and torch.cuda.is_available() if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() print('prior flag: {}'.format(args.prior_flag)) ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) args.config_file = os.path.join(ROOT_DIR, args.config_file) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("DRG.inference", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) device = torch.device( "cuda") if torch.cuda.is_available() else torch.device("cpu") model.to(device) # Initialize mixed-precision if necessary use_mixed_precision = cfg.DTYPE == 'float16' amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) if args.num_iteration != -1: args.ckpt = os.path.join(cfg.OUTPUT_DIR, 'model_%07d.pth' % args.num_iteration) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt logger.info("Testing checkpoint {}".format(ckpt)) _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): if args.num_iteration != -1: output_folder = os.path.join(cfg.OUTPUT_DIR, "inference_sp", dataset_name, "model_%07d" % args.num_iteration) else: output_folder = os.path.join(cfg.OUTPUT_DIR, "inference_sp", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder opt = {} opt['word_dim'] = 300 opt['use_thres_dic'] = 1 for output_folder, dataset_name in zip(output_folders, dataset_names): data = DatasetCatalog.get(dataset_name) data_args = data["args"] test_detection = pickle.load(open(data_args['test_detection_file'], "rb"), encoding='latin1') word_embeddings = pickle.load(open(data_args['word_embedding_file'], "rb"), encoding='latin1') opt['thres_dic'] = pickle.load(open(data_args['threshold_dic'], "rb"), encoding='latin1') output_file = os.path.join(output_folder, 'detection.pkl') # hico_folder = os.path.join(output_folder, 'HICO') output_map_folder = os.path.join(output_folder, 'map') logger.info("Output will be saved in {}".format(output_file)) logger.info("Start evaluation on {} dataset.".format(dataset_name)) run_test(model, dataset_name=dataset_name, test_detection=test_detection, word_embeddings=word_embeddings, output_file=output_file, object_thres=args.object_thres, human_thres=args.human_thres, device=device, cfg=cfg, opt=opt) # Generate_HICO_detection(output_file, hico_folder) compute_hico_map(output_map_folder, output_file, 'test')
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Webcam Demo") parser.add_argument( "--config-file", default= "configs/centermask/centermask_M_v2_FPN_lite_res600_ms_bs32_1x.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--weights", default="centermask-lite-M-v2-ms-bs32-1x.pth", metavar="FILE", help="path to the trained model", ) parser.add_argument( "--conf_th", type=float, default=0.2, help="confidence_threshold", ) parser.add_argument('--display_text', default=False, type=str2bool, help='Whether or not to display text (class [score])') parser.add_argument( '--display_scores', default=False, type=str2bool, help='Whether or not to display scores in addition to classes') parser.add_argument( "opts", help="Modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) parser.add_argument('--input', type=str, default='datasets/coco/test2017', help='images to infer. Must not use with --image_dir') parser.add_argument('--output_dir', type=str, default='demo/results/CenterMask-Lite-M-v2', help='directory to save demo results') parser.add_argument('--salient', type=str, default='') parser.add_argument('--map_dir', type=str, default='') parser.add_argument('--selection', type=int, default=1) args = parser.parse_args() # load config from file and command-line arguments cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.MODEL.WEIGHT = args.weights cfg.freeze() # The following per-class thresholds are computed by maximizing # per-class f-measure in their precision-recall curve. # Please see compute_thresholds_for_classes() in coco_eval.py for details. # demo_im_names = os.listdir(args.images_dir) # # prepare object that handles inference plus adds predictions on top of image coco_demo = COCODemo(cfg, confidence_threshold=args.conf_th, display_text=args.display_text, display_scores=args.display_scores) # for im_name in demo_im_names: # img = cv2.imread(os.path.join(args.images_dir, im_name)) # if img is None: # continue # start_time = time.time() # composite = coco_demo.run_on_opencv_image(img) # print("{}\tinference time: {:.2f}s".format(im_name, time.time() - start_time)) # cv2.imshow(im_name, composite) # print("Press any keys to exit ...") # cv2.waitKey() # cv2.destroyAllWindows() if os.path.isfile(args.input): imglist = [args.input] else: imglist = glob(os.path.join(args.input, '*')) num_images = len(imglist) if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) for i in range(num_images): print('file', i) if os.path.splitext(imglist[i])[1] in ['.mp4', '.wmv', '.avi']: cap = cv2.VideoCapture(imglist[i]) image_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) image_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # scale = get_target_scale(image_width, image_height, 800, 1333) video = cv2.VideoWriter( os.path.join(args.output_dir, os.path.basename(imglist[i])), cv2.VideoWriter_fourcc(*'mp4v'), 25.0, (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))) cnt = 0 while True: cnt += 1 # Capture frame-by-frame ret, img = cap.read() if ret: start_time = time.time() composite = coco_demo.run_on_opencv_image(img) print("{} frame \tinference time: {:.2f}s".format( cnt, time.time() - start_time)) video.write(composite) else: break if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() video.release() print('Result file number {} saved'.format(i)) elif os.path.splitext(imglist[i])[1] in [ '.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm' ]: img = cv2.imread(imglist[i]) assert img is not None im_name, _ = os.path.splitext(os.path.basename(imglist[i])) print(f"{im_name} processing...") start_time = time.time() composite = coco_demo.run_on_opencv_image(img, args) print("{}\tinference time: {:.2f}s".format( im_name, time.time() - start_time)) save_path = os.path.join(args.output_dir, f'{im_name}_result.jpg') cv2.imwrite(save_path, composite) else: continue
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default= "/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR optimizer = make_optimizer(cfg, model) scheduler = make_lr_scheduler(cfg, optimizer) checkpointer = DetectronCheckpointer(cfg, model, optimizer=optimizer, scheduler=scheduler, save_dir=output_dir) _ = checkpointer.load(cfg.MODEL.WEIGHT) iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints", ) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip( output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize()
def test_simple(args): """Function to predict for a single image or folder of images """ if torch.cuda.is_available() and not args.no_cuda: device = torch.device("cuda") else: device = torch.device("cpu") model_path = os.path.join("models") print("-> Loading model from ", model_path) encoder_path = os.path.join(model_path, "encoder.pth") depth_decoder_path = os.path.join(model_path, "depth.pth") # LOADING PRETRAINED MODEL print(" Loading pretrained encoder") config_file = "./configs/e2e_mask_rcnn_R_50_FPN_1x.yaml" cfg.merge_from_file(config_file) cfg.freeze() maskrcnn_path = "./e2e_mask_rcnn_R_50_FPN_1x.pth" encoder = networks.ResnetEncoder(cfg, maskrcnn_path) loaded_dict_enc = torch.load(encoder_path) # extract the height and width of image that this model was trained with feed_height = loaded_dict_enc['height'] feed_width = loaded_dict_enc['width'] filtered_dict_enc = { k: v for k, v in loaded_dict_enc.items() if k in encoder.state_dict() } encoder.load_state_dict(filtered_dict_enc) encoder.cuda() encoder.eval() print(" Loading pretrained decoder") depth_decoder = networks.DepthDecoder(scales=[0]) loaded_dict = torch.load(depth_decoder_path) depth_decoder.load_state_dict(loaded_dict) depth_decoder.cuda() depth_decoder.eval() # FINDING INPUT IMAGES if os.path.isfile(args.image_path): # Only testing on a single image paths = [args.image_path] output_directory = os.path.dirname(args.image_path) elif os.path.isdir(args.image_path): # Searching folder for images paths = glob.glob( os.path.join(args.image_path, '*.{}'.format(args.ext))) output_directory = args.image_path else: raise Exception("Can not find args.image_path: {}".format( args.image_path)) print("-> Computing predictions with size {}x{}".format( feed_width, feed_height)) print("-> Predicting on {:d} test images".format(len(paths))) normalize_transform = transforms.Normalize(mean=cfg.INPUT.PIXEL_MEAN, std=cfg.INPUT.PIXEL_STD) to_bgr_transform = transforms.Lambda(lambda x: x * 255) transform_simvodis = transforms.Compose([ # transforms.ToPILImage(), transforms.Resize((feed_height * 2, feed_width * 2)), transforms.ToTensor(), to_bgr_transform, normalize_transform, ]) color_aug = transforms.ColorJitter.get_params((0.8, 1.2), (0.8, 1.2), (0.8, 1.2), (-0.1, 0.1)) # PREDICTING ON EACH IMAGE IN TURN with torch.no_grad(): for idx, image_path in enumerate(paths): if image_path.endswith("_disp.jpg"): # don't try to predict disparity for a disparity image! continue # Load image and preprocess input_image = pil.open(image_path).convert('RGB') original_width, original_height = input_image.size #input_image = input_image.resize((feed_width, feed_height), pil.LANCZOS) input_image = transforms.Resize( (feed_width, feed_height), interpolation=pil.ANTIALIAS)(input_image) #input_image = transforms.ToTensor()(input_image).unsqueeze(0) input_image = transform_simvodis(color_aug(input_image)) # PREDICTION input_image = input_image.cuda() features = encoder(input_image) outputs = depth_decoder(features) disp = outputs[("disp", 0)] disp_resized = torch.nn.functional.interpolate( disp, (original_height, original_width), mode="bilinear", align_corners=False) # Saving numpy file output_name = os.path.splitext(os.path.basename(image_path))[0] name_dest_npy = os.path.join(output_directory, "{}_disp.npy".format(output_name)) scaled_disp, _ = disp_to_depth(disp, 0.1, 100) np.save(name_dest_npy, scaled_disp.cpu().numpy()) # Saving colormapped depth image disp_resized_np = disp_resized.squeeze().cpu().numpy() vmax = np.percentile(disp_resized_np, 95) normalizer = mpl.colors.Normalize(vmin=disp_resized_np.min(), vmax=vmax) mapper = cm.ScalarMappable(norm=normalizer, cmap='magma') colormapped_im = (mapper.to_rgba(disp_resized_np)[:, :, :3] * 255).astype(np.uint8) im = pil.fromarray(colormapped_im) name_dest_im = os.path.join(output_directory, "{}_disp.jpeg".format(output_name)) im.save(name_dest_im) print(" Processed {:d} of {:d} images - saved prediction to {}". format(idx + 1, len(paths), name_dest_im)) print('-> Done!')
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="configs/e2e_faster_rcnn_R_50_FPN_1x.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help= "The path to the checkpoint for test, default is the latest checkpoint.", default=None, ) parser.add_argument('--num_iteration', dest='num_iteration', help='Specify which weight to load', default=-1, type=int) parser.add_argument('--object_thres', dest='object_thres', help='Object threshold', default=0.1, type=float) # used to be 0.4 or 0.05 parser.add_argument('--human_thres', dest='human_thres', help='Human threshold', default=0.8, type=float) parser.add_argument('--prior_flag', dest='prior_flag', help='whether use prior_flag', default=1, type=int) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 and torch.cuda.is_available() if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) # DATA_DIR = os.path.abspath(os.path.join(ROOT_DIR, 'Data')) args.config_file = os.path.join(ROOT_DIR, args.config_file) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("DRG", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) # model.to(cfg.MODEL.DEVICE) device = torch.device( "cuda") if torch.cuda.is_available() else torch.device("cpu") model.to(device) # Initialize mixed-precision if necessary use_mixed_precision = cfg.DTYPE == 'float16' amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) if args.num_iteration != -1: args.ckpt = os.path.join(cfg.OUTPUT_DIR, 'model_%07d.pth' % args.num_iteration) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt logger.info("Testing checkpoint {}".format(ckpt)) _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) # iou_types = ("bbox",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): if args.num_iteration != -1: output_folder = os.path.join(cfg.OUTPUT_DIR, "inference_ho", dataset_name, "model_%07d" % args.num_iteration) else: output_folder = os.path.join(cfg.OUTPUT_DIR, "inference_ho", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder opt = {} opt['word_dim'] = 300 for output_folder, dataset_name in zip(output_folders, dataset_names): data = DatasetCatalog.get(dataset_name) data_args = data["args"] im_dir = data_args['im_dir'] test_detection = pickle.load(open(data_args['test_detection_file'], "rb"), encoding='latin1') prior_mask = pickle.load(open(data_args['prior_mask'], "rb"), encoding='latin1') action_dic = json.load(open(data_args['action_index'])) action_dic_inv = {y: x for x, y in action_dic.items()} vcoco_test_ids = open(data_args['vcoco_test_ids_file'], 'r') test_image_id_list = [int(line.rstrip()) for line in vcoco_test_ids] vcocoeval = VCOCOeval(data_args['vcoco_test_file'], data_args['ann_file'], data_args['vcoco_test_ids_file']) word_embeddings = pickle.load(open(data_args['word_embedding_file'], "rb"), encoding='latin1') output_file = os.path.join(output_folder, 'detection.pkl') output_dict_file = os.path.join( output_folder, 'detection_app_{}_new.pkl'.format(dataset_name)) logger.info("Output will be saved in {}".format(output_file)) logger.info("Start evaluation on {} dataset({} images).".format( dataset_name, len(test_image_id_list))) run_test(model, dataset_name=dataset_name, im_dir=im_dir, test_detection=test_detection, word_embeddings=word_embeddings, test_image_id_list=test_image_id_list, prior_mask=prior_mask, action_dic_inv=action_dic_inv, output_file=output_file, output_dict_file=output_dict_file, object_thres=args.object_thres, human_thres=args.human_thres, prior_flag=args.prior_flag, device=device, cfg=cfg) synchronize() vcocoeval._do_eval(output_file, ovr_thresh=0.5)
def main(): os.environ['CUDA_VISIBLE_DEVICES'] = '2' parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="/home/asd/Project/AirplaneDetection/Gliding-vertex-Trainer/gliding_vertex-master/configs/glide/dota.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--ckpt", help="The path to the checkpoint for test, default is the latest checkpoint.", default="/home/asd/Project/AirplaneDetection/Gliding-vertex-Trainer/exp_dota/0909/model_final.pth", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group( backend="nccl", init_method="env://" ) synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) """ # Initialize mixed-precision if necessary use_mixed_precision = cfg.DTYPE == 'float16' amp_handle = amp.init(enabled=use_mixed_precision, verbose=cfg.AMP_VERBOSE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) ckpt = cfg.MODEL.WEIGHT if args.ckpt is None else args.ckpt _ = checkpointer.load(ckpt, use_latest=args.ckpt is None) iou_types = ("bbox",) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm",) if cfg.MODEL.KEYPOINT_ON: iou_types = iou_types + ("keypoints",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip(output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=False if cfg.MODEL.RETINANET_ON else cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize() """ from maskrcnn_benchmark.data.transforms.build import build_transforms from PIL import Image import torchvision.transforms.functional as F transform = build_transforms( cfg, is_train=False ) img_dir = "/home/asd/Mission/GaoFen/airplane_detection/data/train/train_val/val/images" res_dir = "/home/asd/Mission/GaoFen/airplane_detection/data/train/train_val/val/res" model.eval() # imgs = os.listdir( img_dir ) import glob imgs = glob.glob(img_dir+"/*.tif") for img in imgs: img_path = os.path.join( img_dir, img ) img_pil = Image.open( img_path ) # for i in range( 360 ): original_img = img_pil # original_img = F.rotate( img_pil, 45, expand=True ) origin_w, origin_h = original_img.size img, target = transform( original_img, None ) print(img.shape) img = img.view( (1, img.shape[0], img.shape[1], img.shape[2] ) ) h, w = img.shape[2:] if h % 32 != 0: new_h = ( h // 32 + 1 ) * 32 else: new_h = h if w % 32 != 0: new_w = ( w // 32 + 1 ) * 32 else: new_w = w ratio_w = 1. * new_w / w ratio_h = 1. * new_h / h padded_img = torch.zeros( (1, 3, new_h, new_w)).float() padded_img[:, :, :h, :w] = img prediction = model( padded_img.cuda() )[0] prediction = prediction.resize((origin_w * ratio_w, origin_h * ratio_h)) hboxes = prediction.bbox.cpu() rboxes = prediction.get_field( "rboxes" ).cpu() ratios = prediction.get_field( "ratios" ).cpu() scores = prediction.get_field( "scores" ).cpu() # labels = prediction.get_field( "labels" ).cpu() for rbox, ratio, score in zip( rboxes, ratios, scores ): print( rbox ) print( ratio, score ) h_idx = ratios > 0.8 # print(hboxes) h = hboxes[h_idx] hboxes_vtx = torch.stack( [h[:, 0], h[:, 1], h[:, 2], h[:, 1], h[:, 2], h[:, 3], h[:, 0], h[:, 3]] ).permute( 1, 0 ) rboxes[h_idx] = hboxes_vtx # rboxes = rboxes.data.numpy().astype( np.int32 ) rboxes = rboxes.data.numpy() keep = poly_nms( np.hstack( [rboxes, scores.cpu().data.numpy()[:, np.newaxis]] ).astype( np.double ), 0.1 ) rboxes = rboxes[keep].astype( np.int32 ) scores = scores[keep] hboxes = hboxes[keep] keep = np.where( scores > 0.6 ) rboxes = rboxes[keep] scores = scores[keep].tolist() hboxes = hboxes[keep] # rboxes = list( map( minAreaRect, rboxes ) ) if len( rboxes ) > 0: rboxes = np.vstack( rboxes ) else: rboxes = np.array( rboxes ) # vis( img_info["file_name"], rboxes ) # img = cv2.imread( original_img ) img = np.array( original_img.convert( "RGB" ) )[:, :, ::-1].copy() cv2.polylines( img, rboxes.reshape(-1, 4, 2).astype( np.int32 ), True, (0, 255, 255), thickness=2, lineType=cv2.LINE_AA ) filename = img_path.split( "/" )[-1] cv2.imwrite( "{}/{}".format( res_dir, filename ), img )
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Training") parser.add_argument( "--config-file", default="", metavar="FILE", help="path to config file", type=str, ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "--skip-test", dest="skip_test", help="Do not test the final model", action="store_true", ) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 args.distributed = num_gpus > 1 if args.distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") synchronize() cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() output_dir = cfg.OUTPUT_DIR if output_dir: mkdir(output_dir) logger = setup_logger("maskrcnn_benchmark", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(args) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) logger.info("Loaded configuration file {}".format(args.config_file)) with open(args.config_file, "r") as cf: config_str = "\n" + cf.read() logger.info(config_str) logger.info("Running with config:\n{}".format(cfg)) model = train(cfg, args.local_rank, args.distributed) if not args.skip_test: run_test(cfg, model, args.distributed)
def main(): parser = argparse.ArgumentParser( description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default= "/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int( os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.init_process_group(backend="nccl", init_method="env://") cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) _ = checkpointer.load(cfg.MODEL.WEIGHT) iou_types = ("bbox", ) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm", ) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder if cfg.TEST.MULTI_SCALE: data_loaders_val = [] for min_size_test, max_size_test in cfg.TEST.MULTI_SIZES: cfg.defrost() cfg.INPUT.MIN_SIZE_TEST = min_size_test cfg.INPUT.MAX_SIZE_TEST = max_size_test cfg.freeze() data_loaders_val.extend( make_data_loader(cfg, is_train=False, is_distributed=distributed)) output_folders = output_folders * len(cfg.TEST.MULTI_SIZES) dataset_names = dataset_names * len(cfg.TEST.MULTI_SIZES) else: data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) predictions = [] for output_folder, dataset_name, data_loader_val in zip( output_folders, dataset_names, data_loaders_val): prediction = inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize() predictions.append(prediction) if cfg.TEST.MULTI_SCALE: logger.info("Processing multi-scale bbox voting....") voted_predictions = voting( predictions, args.local_rank) # box_voting(predictions, args.local_rank) torch.save(voted_predictions, os.path.join(output_folders[0], 'predictions.pth')) extra_args = dict( box_only=cfg.MODEL.RPN_ONLY, iou_types=iou_types, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, ) evaluate(dataset=data_loaders_val[0].dataset, predictions=voted_predictions, output_folder=output_folders[0], **extra_args) else: for prediction, output_folder, dataset_name, data_loader_val in zip( predictions, output_folders, dataset_names, data_loaders_val): extra_args = dict( box_only=cfg.MODEL.RPN_ONLY, iou_types=iou_types, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, ) evaluate(dataset=data_loader_val.dataset, predictions=prediction, output_folder=output_folder, **extra_args) return 0
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference") parser.add_argument( "--config-file", default="/private/home/fmassa/github/detectron.pytorch_v2/configs/e2e_faster_rcnn_R_50_C4_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument("--local_rank", type=int, default=0) parser.add_argument( "opts", help="Modify config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() num_gpus = int(os.environ["WORLD_SIZE"]) if "WORLD_SIZE" in os.environ else 1 distributed = num_gpus > 1 if distributed: torch.cuda.set_device(args.local_rank) torch.distributed.deprecated.init_process_group( backend="nccl", init_method="env://" ) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() save_dir = "" logger = setup_logger("maskrcnn_benchmark", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info(cfg) logger.info("Collecting env info (might take some time)") logger.info("\n" + collect_env_info()) model = build_detection_model(cfg) model.to(cfg.MODEL.DEVICE) output_dir = cfg.OUTPUT_DIR checkpointer = DetectronCheckpointer(cfg, model, save_dir=output_dir) _ = checkpointer.load(cfg.MODEL.WEIGHT) iou_types = ("bbox",) if cfg.MODEL.MASK_ON: iou_types = iou_types + ("segm",) output_folders = [None] * len(cfg.DATASETS.TEST) dataset_names = cfg.DATASETS.TEST if cfg.OUTPUT_DIR: for idx, dataset_name in enumerate(dataset_names): output_folder = os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) mkdir(output_folder) output_folders[idx] = output_folder data_loaders_val = make_data_loader(cfg, is_train=False, is_distributed=distributed) for output_folder, dataset_name, data_loader_val in zip(output_folders, dataset_names, data_loaders_val): inference( model, data_loader_val, dataset_name=dataset_name, iou_types=iou_types, box_only=cfg.MODEL.RPN_ONLY, device=cfg.MODEL.DEVICE, expected_results=cfg.TEST.EXPECTED_RESULTS, expected_results_sigma_tol=cfg.TEST.EXPECTED_RESULTS_SIGMA_TOL, output_folder=output_folder, ) synchronize()
def main(): parser = argparse.ArgumentParser(description="PyTorch Object Detection Webcam Demo") parser.add_argument( "--config-file", default="../configs/caffe2/e2e_mask_rcnn_R_50_FPN_1x_caffe2.yaml", metavar="FILE", help="path to config file", ) parser.add_argument( "--confidence-threshold", type=float, default=0.7, help="Minimum score for the prediction to be shown", ) parser.add_argument( "--min-image-size", type=int, default=224, help="Smallest size of the image to feed to the model. " "Model was trained with 800, which gives best results", ) parser.add_argument( "--show-mask-heatmaps", dest="show_mask_heatmaps", help="Show a heatmap probability for the top masks-per-dim masks", action="store_true", ) parser.add_argument( "--masks-per-dim", type=int, default=2, help="Number of heatmaps per dimension to show", ) parser.add_argument( "opts", help="Modify model config options using the command-line", default=None, nargs=argparse.REMAINDER, ) args = parser.parse_args() # load config from file and command-line arguments cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) cfg.freeze() # prepare object that handles inference plus adds predictions on top of image coco_demo = COCODemo( cfg, confidence_threshold=args.confidence_threshold, show_mask_heatmaps=args.show_mask_heatmaps, masks_per_dim=args.masks_per_dim, min_image_size=args.min_image_size, ) cam = cv2.VideoCapture(0) while True: start_time = time.time() ret_val, img = cam.read() composite = coco_demo.run_on_opencv_image(img) print("Time: {:.2f} s / img".format(time.time() - start_time)) cv2.imshow("COCO detections", composite) if cv2.waitKey(1) == 27: break # esc to quit cv2.destroyAllWindows()