WZMIAOMIAO/deep-learning-for-image-processing · error · Exception
Please run accumulate() first
Error message
Please run accumulate() first
What it means
The COCO-style summarizer raises 'Please run accumulate() first' when summarize() is called before evaluate()/accumulate() has populated self.eval. self.eval holds the accumulated detection results needed to compute stats.
Source
Thrown at pytorch_object_detection/faster_rcnn/validation.py:87
stats, print_list = [0] * 12, [""] * 12
stats[0], print_list[0] = _summarize(1)
stats[1], print_list[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])
stats[2], print_list[2] = _summarize(1, iouThr=.75, maxDets=self.params.maxDets[2])
stats[3], print_list[3] = _summarize(1, areaRng='small', maxDets=self.params.maxDets[2])
stats[4], print_list[4] = _summarize(1, areaRng='medium', maxDets=self.params.maxDets[2])
stats[5], print_list[5] = _summarize(1, areaRng='large', maxDets=self.params.maxDets[2])
stats[6], print_list[6] = _summarize(0, maxDets=self.params.maxDets[0])
stats[7], print_list[7] = _summarize(0, maxDets=self.params.maxDets[1])
stats[8], print_list[8] = _summarize(0, maxDets=self.params.maxDets[2])
stats[9], print_list[9] = _summarize(0, areaRng='small', maxDets=self.params.maxDets[2])
stats[10], print_list[10] = _summarize(0, areaRng='medium', maxDets=self.params.maxDets[2])
stats[11], print_list[11] = _summarize(0, areaRng='large', maxDets=self.params.maxDets[2])
print_info = "\n".join(print_list)
if not self.eval:
raise Exception('Please run accumulate() first')
return stats, print_info
def main(parser_data):
device = torch.device(parser_data.device if torch.cuda.is_available() else "cpu")
print("Using {} device training.".format(device.type))
data_transform = {
"val": transforms.Compose([transforms.ToTensor()])
}
# read class_indict
label_json_path = './pascal_voc_classes.json'
assert os.path.exists(label_json_path), "json file {} dose not exist.".format(label_json_path)
with open(label_json_path, 'r') as f:
class_dict = json.load(f)
View on GitHub (pinned to 1ec3fe6f37)
Solutions
- Call accumulate() (or the full evaluate -> accumulate sequence) before summarize()
- Ensure the dataloader yielded at least one batch and update() was called so self.eval is populated
- Guard summarize with a check: if evaluator.eval is None: run accumulate first
Example fix
// before stats, info = evaluator.summarize() // after evaluator.accumulate() stats, info = evaluator.summarize()
Defensive patterns
Strategy: try-catch
Validate before calling
if evaluator.eval is None:
evaluator.accumulate()
stats, info = evaluator.summarize() Try / catch
try:
stats, info = evaluator.summarize()
except Exception as e:
if "accumulate()" in str(e):
evaluator.accumulate()
stats, info = evaluator.summarize() Prevention
- Always follow the evaluate -> accumulate -> summarize sequence
- Ensure at least one batch is processed before summarizing
- Wrap summarize behind a helper that lazily calls accumulate
When it happens
Trigger: Calling summarize() on a freshly constructed evaluator without first running evaluate()/accumulate(), or when accumulation produced no results (e.g. empty predictions).
Common situations: Validation loop that forgets to call accumulate after updating; early exit before any batches processed so self.eval stays None.
Related errors
- Please run accumulate() first
- Unknown iou type {}
- not support iou_type: {self.iou_type}
- Please run accumulate() first
- Please run accumulate() first
AI-assisted analysis of WZMIAOMIAO/deep-learning-for-image-processing@1ec3fe6f37 (2026-08-30).
Data as JSON: /api/errors/245969b77477d413.
Report an issue: GitHub.