{
  "study_label": "1000合成＋90真实 · 六点与轮廓同候选联合微调",
  "study_kind": "joint_lr_batch",
  "experiment_name": "joint1000",
  "require_joint_SAM": true,
  "train_scope": "joint_sam_local",
  "source_checkpoint": "C:\\Users\\yuhan\\OneDrive\\Desktop\\SUrface\\model_exports\\sam_book100_improvement_20261025\\sam_joint_sixpoints_local_weights.pt",
  "source_sha256": "e2088f34b2f4009da66348da23badc006bd3717cd22c34d2754adf3d7729c4e7",
  "shared_base_checkpoint": "C:\\Users\\yuhan\\OneDrive\\Desktop\\SUrface\\sam_page_lab\\finetune_runs\\book50_repaired_geometry_20261011\\efficientsam3_book_spread_best.pt",
  "shared_base_sha256": "43f8d767fe440eb7c5751e62d802ee798de16711344cd344482aeefc4cc4a72c",
  "starting_checkpoint": "C:\\Users\\yuhan\\OneDrive\\Desktop\\SUrface\\sam_page_lab\\finetune_runs\\book100_geo500_1000_20261025\\experiments\\joint1000\\best_weights.pt",
  "starting_sha256": "ce91588777fa8eaead9233cd3437594985b6d6b95dfad848fe72f185b41cded0",
  "initialization": "continuation from selected920 weights of book100_geo500_1000_20261025",
  "optimizer_updates": 1000,
  "effective_batch": 10,
  "microbatch": 2,
  "mixed_steps": 1000,
  "real_only_steps": 0,
  "real_train": 90,
  "real_validation": 10,
  "synthetic_training_pool": 1000,
  "sampling_synthetic_fraction": 0.3,
  "synthetic_loss_weight": 0.5,
  "augmentation": {
    "scope": "synthetic training only",
    "clean_probability": 0.15,
    "gaussian_noise_probability_conditional": 0.75,
    "gaussian_sigma_gray_range": [
      1.0,
      8.0
    ],
    "shot_noise_probability_conditional": 0.25,
    "shot_photons_range": [
      1200,
      6000
    ],
    "blur_probability_conditional": 0.6,
    "blur_types": {
      "gaussian": 0.8,
      "defocus": 0.2
    },
    "gaussian_blur_sigma_px_range": [
      0.4,
      1.4
    ],
    "defocus_radius_px": [
      1,
      2
    ],
    "JPEG_probability_conditional": 0.5,
    "JPEG_quality_range": [
      55,
      95
    ],
    "order": "tone, optical blur, sensor noise, memory JPEG",
    "geometry_operations": [],
    "mask_and_six_points": "identity",
    "stored_images_changed": false,
    "real_training_policy": {
      "clean_probability": 0.2,
      "gaussian_noise_probability": 0.45,
      "gaussian_sigma_gray_range": [
        0.5,
        4.0
      ],
      "shot_noise_probability": 0.15,
      "JPEG_probability": 0.5,
      "JPEG_quality_range": [
        55,
        95
      ],
      "rare_JPEG_quality_range": [
        35,
        55
      ],
      "tone_probability": 0.35,
      "blur_probability": 0.15,
      "blur_sigma_range": [
        0.25,
        0.7
      ],
      "JPEG_memory_only": true,
      "geometry_operations": [],
      "mask_and_six_point_transform": "identity"
    },
    "validation_augmentation": false
  },
  "seed": 20261641,
  "synthetic_manifest_sha256": "64837178130e63b1919417382abbc745d5fa1ec4d76d728fd0166836480fb3e9",
  "loss_coefficients": {
    "local_mask": 1.0,
    "final_point": 0.5,
    "point_heat": 0.1,
    "global_mask": 0.25,
    "geometry": 0.05,
    "native_point": 0.025,
    "anchor": 0.1
  },
  "lr_sam": 1e-06,
  "lr_decoder": 2e-07,
  "lr_points": 1e-05,
  "lr_local": 5e-05,
  "lr_schedule": "warmup32 updates, cosine to25% at1000",
  "selection": "same real-ten position_score; all1000 synthetic seen; complete1000 updates",
  "validation_loss": "same unaugmented real GT; rotation-safe geometry and shared matched query; no anchor; not directly comparable to old objective loss",
  "frozen": "image/text backbones, encoder, first4 decoder layers; last2 decoder layers, segmentation/scoring and both point/local modules train",
  "storage": "one best weight-only save at end; no optimizer or disk feature cache",
  "comparison_run": "book100_geo500_1000_20261025",
  "changed_factors": [
    "500 to1000 synthetic pool, including500 independent new geometries",
    "synthetic exposure25% to30%; loss weight0.35 to0.5",
    "continue selected920, reduce SAM/local learning rates",
    "share GT-matched query for mask and six-point branches; rotation-safe geometric losses"
  ],
  "limitation": "multiple factors changed; same real ten reused for selection, not an independent test",
  "real_geometry_augmentation": {
    "scope": "real training only",
    "clean_geometry_probability": 0.2,
    "rotation_degrees": [
      -8,
      8
    ],
    "horizontal_flip_probability_conditional": 0.5,
    "vertical_flip_probability_conditional": 0.2,
    "output_long_sides": [
      1152,
      1440,
      1800
    ],
    "relative_zoom": [
      0.85,
      1.0
    ],
    "containment": "entire original image footprint plus mask and six points fit inside new canvas with >=8pixel margin",
    "label_transform": "same float64 affine for image, vector contour, six points; role names permuted for flips",
    "mask_rasterization": "same transformed original contour at2x subpixel coverage, then conservative area downsample; avoids erasing acute corners",
    "padding": "constant median border gray; no mirrored duplicate books",
    "validation_augmentation": false,
    "source_files_changed": false,
    "maximum_six_to_raster_boundary_px": 1.5,
    "invalid_transform": "reject and resample; original view fallback after12 attempts"
  },
  "augmented_real_teacher_anchor": "skipped: clean-image teacher is not spatially aligned after affine",
  "unified_matched_query": true,
  "rotation_safe_geometry": true,
  "sam_trainable_parameters": 7298817,
  "native_point_parameters": 35788,
  "local_parameters": 20338,
  "parameter_dtypes": [
    "torch.float32"
  ]
}