diff --git a/scripts/visualize_detections.py b/scripts/visualize_detections.py index 02e19c5..a4d8a3a 100644 --- a/scripts/visualize_detections.py +++ b/scripts/visualize_detections.py @@ -159,12 +159,19 @@ def main() -> int: rows = [] processed = 0 + def predict_in_batches(images): + """自己按批切分:ultralytics 的 predict 不理会 batch 参数, + 一次性把整个列表当成一个 batch,上万张图必然 OOM。""" + for start in range(0, len(images), args.batch): + chunk = images[start:start + args.batch] + results = model.predict( + source=[str(p) for p in chunk], imgsz=args.imgsz, conf=args.conf, + device=device_arg, verbose=False, + ) + yield from zip(chunk, results, strict=True) + for split, images in splits.items(): - results = model.predict( - source=[str(p) for p in images], stream=True, imgsz=args.imgsz, conf=args.conf, - device=device_arg, batch=args.batch, verbose=False, - ) - for image_path, result in zip(images, results, strict=True): + for image_path, result in predict_in_batches(images): predictions = [ Box(int(cls), *(float(v) for v in xyxy), float(score)) for xyxy, cls, score in zip(