{"record":{"id":"05349bc6a3338ccd","repo":"WZMIAOMIAO/deep-learning-for-image-processing","slug":"please-run-accumulate-first-05349b","errorCode":null,"errorMessage":"Please run accumulate() first","messagePattern":"Please run accumulate\\(\\) first","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"pytorch_object_detection/mask_rcnn/validation.py","lineNumber":88,"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 save_info(coco_evaluator,\n              category_index: dict,\n              save_name: str = \"record_mAP.txt\"):\n    iou_type = coco_evaluator.params.iouType\n    print(f\"IoU metric: {iou_type}\")\n    # calculate COCO info for all classes\n    coco_stats, print_coco = summarize(coco_evaluator)\n\n    # calculate voc info for every classes(IoU=0.5)\n    classes = [v for v in category_index.values() if v != \"N/A\"]\n    voc_map_info_list = []\n    for i in range(len(classes)):\n        stats, _ = summarize(coco_evaluator, catId=i)\n        voc_map_info_list.append(\" {:15}: {}\".format(classes[i], stats[1]))","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/blob/1ec3fe6f374fc9969973a61f819de25658595afa/pytorch_object_detection/mask_rcnn/validation.py#L70-L106","documentation":"The COCO-style evaluator's summarize computes per-area/per-maxDets stats from self.eval, which is only populated after accumulate() runs. Calling summarize (or save_info, which calls summarize) before accumulate leaves self.eval None/empty and raises Exception('Please run accumulate() first').","triggerScenarios":"Calling evaluator.summarize() immediately after update() without evaluator.accumulate(); calling save_info(coco_evaluator, ...) before accumulating; distributed runs where one process skipped synchronize/accumulate.","commonSituations":"Custom validation loops reordered incorrectly; early-exit during epoch validation; forgetting accumulate in multi-GPU evaluation after merging results.","solutions":["Call evaluator.accumulate() before evaluator.summarize()","Ensure the full sequence: evaluator.synchronize_results() (or gather) -> accumulate() -> summarize() -> save_info(...)","Guard calls: only summarize if getattr(evaluator, 'eval', None) is not None"],"exampleFix":"// before\nsave_info(coco_evaluator, category_index)\n// after\ncoco_evaluator.accumulate()\nsave_info(coco_evaluator, category_index)","handlingStrategy":"validation","validationCode":"coco_evaluator.synchronize_results() if hasattr(coco_evaluator, 'synchronize_results') else None\ncoco_evaluator.accumulate()\nassert getattr(coco_evaluator, 'eval', None) is not None, 'accumulate produced no eval'\nstats = coco_evaluator.summarize()","typeGuard":"def can_summarize(ev):\n    return getattr(ev, 'eval', None) is not None","tryCatchPattern":"try:\n    save_info(coco_evaluator, category_index)\nexcept Exception as e:\n    if 'accumulate()' in str(e):\n        coco_evaluator.accumulate()\n        save_info(coco_evaluator, category_index)\n    else:\n        raise","preventionTips":["Follow update -> accumulate -> summarize -> save_info order strictly","Gate summarize on eval being populated","In DDP, synchronize/gather results before accumulating"],"tags":["python","coco","evaluation"],"backgroundTag":"method-call-order","analyzedSha":"1ec3fe6f374fc9969973a61f819de25658595afa","analyzedAt":"2026-08-30T09:19:11.901Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}