# Problem A: Few-Shot Defect Classification - Configuration # Intel contest: 8 defect classes, grayscale images up to ~7000x5600 # Uses ONLY official challenge data from challenge/dataset/Dataset/Data/ # Dataset: defect1(253), defect2(178), defect3(9), defect4(14), # defect5(411), defect8(803), defect9(319), defect10(674), good(7135) # Contest: classify into 8 DEFECT classes # # CRITICAL: defect3~defect9 (0.963 cosine sim) and defect4~defect8 (0.889) # are nearly identical without training on them. ALL 8 classes must be in # training so the backbone learns to separate these similar pairs. data: root: "../challenge/dataset/Dataset/Data/" img_size: 518 # DINOv2 native resolution (37x14 patches) defect_only: false # ALL 8 defect classes + good (class 0) in training train_classes: [0, 1, 2, 3, 4, 5, 8, 9, 10] test_classes: [3, 4] # Monitor the hardest classes during validation all_classes: [0, 1, 2, 3, 4, 5, 8, 9, 10] model: backbone: "dinov2" backbone_size: "large" # DINOv2 ViT-L/14 (1024-dim, 304M params) freeze_backbone: true unfreeze_last_n: 6 # Fine-tune last 6 transformer blocks + norm grad_checkpointing: true proj_hidden: 768 proj_dim: 512 training: n_way: 9 # ALL 9 classes per episode (8 defect + good) k_shot: 5 # Higher shot count for better prototypes n_query: 10 # More queries = stronger gradient signal # Sampler uses replacement for rare classes (defect3=9, defect4=14) n_episodes_train: 500 # Fewer but harder 8-way episodes n_episodes_val: 100 epochs: 100 lr: 3.0e-4 lr_backbone: 5.0e-6 warmup_epochs: 5 weight_decay: 1.0e-4 use_amp: true gradient_clip: 1.0 label_smoothing: 0.1 # Prevent overconfidence on easy classes patience: 20 evaluation: n_seeds: 5 max_examples: 50 kshot_values: [1, 3, 5, 10, 20] target_accuracy: 0.85 output: checkpoint_dir: "checkpoints/" results_dir: "outputs/" seed: 42