# import torch # # # def evaluate(model, data_loader, device): # n_threads = torch.get_num_threads() # # FIXME remove this and make paste_masks_in_image run on the GPU # torch.set_num_threads(1) # cpu_device = torch.device("cpu") # model.eval() # metric_logger = utils.MetricLogger(delimiter=" ") # header = "Test:" # # coco = get_coco_api_from_dataset(data_loader.dataset) # iou_types = _get_iou_types(model) # coco_evaluator = CocoEvaluator(coco, iou_types) # # print(f'start to evaluate!!!') # for images, targets in metric_logger.log_every(data_loader, 10, header): # images = list(img.to(device) for img in images) # # if torch.cuda.is_available(): # torch.cuda.synchronize() # model_time = time.time() # outputs = model(images) # # outputs = [{k: v.to(cpu_device) for k, v in t.items()} for t in outputs] # model_time = time.time() - model_time # # res = {target["image_id"]: output for target, output in zip(targets, outputs)} # evaluator_time = time.time() # coco_evaluator.update(res) # evaluator_time = time.time() - evaluator_time # metric_logger.update(model_time=model_time, evaluator_time=evaluator_time) # # # gather the stats from all processes # metric_logger.synchronize_between_processes() # print("Averaged stats:", metric_logger) # coco_evaluator.synchronize_between_processes() # # # accumulate predictions from all images # coco_evaluator.accumulate() # coco_evaluator.summarize() # torch.set_num_threads(n_threads) # return coco_evaluator