{"record":{"id":"04a961792352cfb7","repo":"WZMIAOMIAO/deep-learning-for-image-processing","slug":"please-run-accumulate-first-04a961","errorCode":null,"errorMessage":"Please run accumulate() first","messagePattern":"Please run accumulate\\(\\) first","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"pytorch_object_detection/retinaNet/validation.py","lineNumber":87,"sourceCode":"\n    stats, print_list = [0] * 12, [\"\"] * 12\n    stats[0], print_list[0] = _summarize(1)\n    stats[1], print_list[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])\n    stats[2], print_list[2] = _summarize(1, iouThr=.75, maxDets=self.params.maxDets[2])\n    stats[3], print_list[3] = _summarize(1, areaRng='small', maxDets=self.params.maxDets[2])\n    stats[4], print_list[4] = _summarize(1, areaRng='medium', maxDets=self.params.maxDets[2])\n    stats[5], print_list[5] = _summarize(1, areaRng='large', maxDets=self.params.maxDets[2])\n    stats[6], print_list[6] = _summarize(0, maxDets=self.params.maxDets[0])\n    stats[7], print_list[7] = _summarize(0, maxDets=self.params.maxDets[1])\n    stats[8], print_list[8] = _summarize(0, maxDets=self.params.maxDets[2])\n    stats[9], print_list[9] = _summarize(0, areaRng='small', maxDets=self.params.maxDets[2])\n    stats[10], print_list[10] = _summarize(0, areaRng='medium', maxDets=self.params.maxDets[2])\n    stats[11], print_list[11] = _summarize(0, areaRng='large', maxDets=self.params.maxDets[2])\n\n    print_info = \"\\n\".join(print_list)\n\n    if not self.eval:\n        raise Exception('Please run accumulate() first')\n\n    return stats, print_info\n\n\ndef main(parser_data):\n    device = torch.device(parser_data.device if torch.cuda.is_available() else \"cpu\")\n    print(\"Using {} device training.\".format(device.type))\n\n    data_transform = {\n        \"val\": transforms.Compose([transforms.ToTensor()])\n    }\n\n    # read class_indict\n    label_json_path = './pascal_voc_classes.json'\n    assert os.path.exists(label_json_path), \"json file {} dose not exist.\".format(label_json_path)\n    with open(label_json_path, 'r') as f:\n        class_dict = json.load(f)\n","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/blob/1ec3fe6f374fc9969973a61f819de25658595afa/pytorch_object_detection/retinaNet/validation.py#L69-L105","documentation":"COCOEvalWrapper.summarize() raises if self.eval is unset, meaning accumulate() (the underlying COCO eval) was never run. COCO API's summarize needs evalImgs populated by accumulate(); calling summarize directly after evaluate() skips that step.","triggerScenarios":"Calling evaluator.summarize() in validation main() without first calling evaluator.evaluate() and evaluator.accumulate(); early-exit before accumulate() when stats are missing.","commonSituations":"Copying COCO eval code piecemeal (evaluate/accumulate/summarize pipeline) and dropping the accumulate step; catching an exception in evaluate and still calling summarize; running summarize twice when first run had no eval.","solutions":["Call accumulate() (or the full evaluate() method that includes it) before summarize()","Use the wrapper's evaluate() entry point which chains evaluate->accumulate->summarize","Guard summarize behind 'if self.eval:' check in caller code"],"exampleFix":"// before\nstats, info = coco_evaluator.summarize()\n// after\ncoco_evaluator.evaluate()\ncoco_evaluator.accumulate()\nstats, info = coco_evaluator.summarize()","handlingStrategy":"try-catch","validationCode":"assert coco_evaluator.eval is not None, 'call accumulate() before summarize()'","typeGuard":"def has_accumulated(evaluator) -> bool:\n    return getattr(evaluator, 'eval', None) is not None","tryCatchPattern":"try:\n    stats, info = evaluator.summarize()\nexcept Exception as e:\n    print(f'Eval pipeline incomplete: {e}; run evaluate/accumulate first')","preventionTips":["Follow the evaluate -> accumulate -> summarize order","Use wrapper methods that chain the pipeline","Add asserts in eval scripts before summarize"],"tags":["coco","evaluation","lifecycle","pytorch"],"backgroundTag":"accumulate-before-summarize","analyzedSha":"1ec3fe6f374fc9969973a61f819de25658595afa","analyzedAt":"2026-08-30T09:19:11.901Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}