diff --git a/scripts/tile_dataset.py b/scripts/tile_dataset.py index cb900d9..f1015db 100644 --- a/scripts/tile_dataset.py +++ b/scripts/tile_dataset.py @@ -138,7 +138,11 @@ def main() -> int: label_file = label_path_for(source) boxes = parse_label(label_file.read_text(encoding="utf-8")) if label_file.exists() else [] tiles = plan_tiles(width, height, args.size, args.overlap) - sizes_seen["填充" if width < args.size or height < args.size else "裁剪"] += 1 + # 两者可以同时发生:400x100 的图既要横向裁剪又要纵向填充 + if width < args.size or height < args.size: + sizes_seen["需要填充"] += 1 + if width > args.size or height > args.size: + sizes_seen["需要裁剪"] += 1 stats["源图"] += 1 positives, empties = [], [] @@ -180,9 +184,12 @@ def main() -> int: logger.info("处理 [%d] 已产出 %d 片", stats["源图"], stats["产出片"]) logger.info( - "源图 %d(其中 %d 张靠镜像填充、%d 张需裁剪)-> 片 %d(有框 %d,空 %d,丢弃空片 %d)", - stats["源图"], sizes_seen["填充"], sizes_seen["裁剪"], stats["产出片"], - stats["有框片"], stats["空片"], stats["丢弃的空片"], + "源图 %d(%d 张有维度不足需镜像填充,%d 张有维度超出需裁剪,两者可同时发生)", + stats["源图"], sizes_seen["需要填充"], sizes_seen["需要裁剪"], + ) + logger.info( + "产出片 %d(有框 %d,空 %d;另按配额丢弃空片 %d)", + stats["产出片"], stats["有框片"], stats["空片"], stats["丢弃的空片"], ) logger.info("逐类框数: %s", dict(sorted(per_class.items()))) @@ -205,8 +212,8 @@ def main() -> int: "min_visibility": args.min_visibility, "max_empty_ratio": args.max_empty_ratio, "seed": args.seed, "counts": dict(stats), "per_class_boxes": dict(per_class), - "source_images_padded": sizes_seen["填充"], - "source_images_cropped": sizes_seen["裁剪"], + "source_images_padded": sizes_seen["需要填充"], + "source_images_cropped": sizes_seen["需要裁剪"], }, ensure_ascii=False, indent=2, ),