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("atss_core", save_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info("cfg:\n", cfg) logger.info("Collecting env info ( It 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", ) 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.ATSS_ON or cfg.MODEL.FCOS_ON or 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 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() # define what is "cfg" # # here has change something # try: cfg.merge_from_file(args.config_file) except Exception as e: print(e) # 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("atss_core", output_dir, get_rank()) logger.info("Using {} GPUs".format(num_gpus)) logger.info("args", 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)) # train # 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 Webcam Demo") parser.add_argument( "--config-file", default= "../configs/atss/wei_score/atss_dcnv2_X_101_64x4d_FPN_2x.yaml", # <-----模型配置文件 metavar="FILE", help="path to config file", ) parser.add_argument( "--weights", default= "../checkpoint/atss_dcnv2_X_101_64x4d_FPN_2x/model_0010000.pth", #<-----------训练模型地址 metavar="FILE", help="path to the trained model", ) parser.add_argument( "--images-dir", # default="../datasets/myData/val", #<------------测试图像的路径 default="../datasets/test", #<------------测试图像的路径 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. " "Model was trained with 800, which gives best results", ) 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.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.4923645853996277, 0.4928510785102844, 0.5040897727012634, # 0.4912887513637543, 0.5016880631446838, 0.5278812646865845, # 0.5351834893226624, 0.5003424882888794, 0.4955945909023285, # 0.43564629554748535, 0.6089804172515869, 0.666087806224823, # 0.5932040214538574, 0.48406165838241577, 0.4062422513961792, # 0.5571075081825256, 0.5671307444572449, 0.5268378257751465, # 0.5112953186035156, 0.4647842049598694, 0.5324517488479614, # 0.5795850157737732, 0.5152440071105957, 0.5280804634094238, # 0.4791383445262909, 0.5261335372924805, 0.4906163215637207, # 0.523737907409668, 0.47027698159217834, 0.5103300213813782, # 0.4645252823829651, 0.5384289026260376, 0.47796186804771423, # 0.4403403103351593, 0.5101461410522461, 0.5535093545913696, # 0.48472103476524353, 0.5006796717643738, 0.5485560894012451, # 0.4863888621330261, 0.5061569809913635, 0.5235867500305176, # 0.4745445251464844, 0.4652363359928131, 0.4162440598011017, # 0.5252017974853516, 0.42710989713668823, 0.4550687372684479, # 0.4943239390850067, 0.4810051918029785, 0.47629663348197937, # 0.46629616618156433, 0.4662836790084839, 0.4854755401611328, # 0.4156557023525238, 0.4763634502887726, 0.4724511504173279, # 0.4915047585964203, 0.5006274580955505, 0.5124194622039795, # 0.47004589438438416, 0.5374764204025269, 0.5876904129981995, # 0.49395060539245605, 0.5102297067642212, 0.46571290493011475, # 0.5164387822151184, 0.540651798248291, 0.5323763489723206, # 0.5048757195472717, 0.5302401781082153, 0.48333442211151123, # 0.5109739303588867, 0.4077408015727997, 0.5764586925506592, # 0.5109297037124634, 0.4685552418231964, 0.5148998498916626, # 0.4224434792995453, 0.4998510777950287 # ] thresholds_for_classes = [ 0.5, 0.5, 0.5, ] 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_thresholds_for_classes=thresholds_for_classes, min_image_size=args.min_image_size) 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.imwrite("../result_1/" + im_name, composite)
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()