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

  1. Call accumulate() (or the full evaluate -> accumulate sequence) before summarize()
  2. Ensure the dataloader yielded at least one batch and update() was called so self.eval is populated
  3. 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

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


AI-assisted analysis of WZMIAOMIAO/deep-learning-for-image-processing@1ec3fe6f37 (2026-08-30). Data as JSON: /api/errors/245969b77477d413. Report an issue: GitHub.