{"record":{"id":"f92c473cc70287a9","repo":"WZMIAOMIAO/deep-learning-for-image-processing","slug":"please-run-accumulate-first-f92c47","errorCode":null,"errorMessage":"Please run accumulate() first","messagePattern":"Please run accumulate\\(\\) first","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"pytorch_object_detection/train_coco_dataset/validation.py","lineNumber":89,"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 = './coco91_indices.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        category_index = json.load(f)\n","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/blob/1ec3fe6f374fc9969973a61f819de25658595afa/pytorch_object_detection/train_coco_dataset/validation.py#L71-L107","documentation":"COCO's summarize() requires evaluation results accumulated by accumulate() first; the internal self.eval is None until then. Calling summarize() before accumulate() raises a generic Exception telling the user the required prior step was skipped.","triggerScenarios":"Calling coco_evaluator.summarize() immediately after constructing a COCOeval object, without first calling accumulate().","commonSituations":"Custom evaluation scripts that build COCOeval but forget the accumulate() step; reordering calls after refactoring; catching only some stats and calling summarize twice on a fresh evaluator.","solutions":["Call evaluator.accumulate() before summarize()","Ensure evaluate() ran and predictions were loaded (evaluator.update() calls) before accumulate","If summarizing multiple times, reuse the same evaluator after a single accumulate"],"exampleFix":"// before\ncoco_evaluator = COCOeval(coco, iouType='bbox')\ncoco_evaluator.evaluate()\nstats, print_info = summarize(coco_evaluator)\n// after\ncoco_evaluator = COCOeval(coco, iouType='bbox')\ncoco_evaluator.evaluate()\ncoco_evaluator.accumulate()\nstats, print_info = summarize(coco_evaluator)","handlingStrategy":"validation","validationCode":"def safe_summarize(evaluator):\n    if getattr(evaluator, 'eval', None) is None:\n        evaluator.accumulate()\n    return evaluator.summarize()","typeGuard":null,"tryCatchPattern":"try:\n    stats, print_info = summarize(coco_evaluator)\nexcept Exception as e:\n    if 'Please run accumulate() first' in str(e):\n        coco_evaluator.accumulate()\n        stats, print_info = summarize(coco_evaluator)\n    else:\n        raise","preventionTips":["Always follow the evaluate() -> accumulate() -> summarize() order","Encapsulate the full COCOeval sequence in one helper function","Never call summarize() on a freshly constructed evaluator"],"tags":["python","pytorch","coco","evaluation-order"],"backgroundTag":"method-called-out-of-order","analyzedSha":"1ec3fe6f374fc9969973a61f819de25658595afa","analyzedAt":"2026-08-30T09:19:11.901Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}