facedet / configs /ablations.yaml
cledouxluma's picture
Upload configs/ablations.yaml with huggingface_hub
0b90d44 verified
# Ablation Study Configurations
#
# Each ablation isolates one variable to measure its contribution.
# Run: python scripts/run_ablations.py --config configs/ablations.yaml
#
# Baseline: SCRFD-34G with default settings
ablations:
# 1. Sample Redistribution (SCRFD's key contribution)
sample_redistribution:
description: "Impact of large-scale crops on small face detection"
experiments:
- name: "baseline_crops"
data.crop_scales: [0.3, 0.45, 0.6, 0.8, 1.0]
note: "Standard crops only (no SR)"
- name: "extended_crops"
data.crop_scales: [0.3, 0.45, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0]
note: "Full Sample Redistribution (SCRFD default)"
- name: "extreme_crops"
data.crop_scales: [0.3, 0.6, 1.0, 1.5, 2.0, 2.5, 3.0]
note: "Even larger crops — test limits"
# 2. Loss Function Choice
loss_functions:
description: "GFL vs Focal Loss for classification"
experiments:
- name: "gfl_diou"
model.losses.cls: gfl
model.losses.reg: diou
note: "SCRFD default"
- name: "focal_diou"
model.losses.cls: focal
model.losses.reg: diou
note: "Standard focal loss"
- name: "gfl_smoothl1"
model.losses.cls: gfl
model.losses.reg: smooth_l1
note: "GFL + Smooth L1 regression"
# 3. Anchor Matching Strategy
matching:
description: "ATSS vs fixed IoU threshold matching"
experiments:
- name: "atss_k9"
model.matching.type: atss
model.matching.topk: 9
note: "ATSS with k=9 (SCRFD default)"
- name: "atss_k5"
model.matching.type: atss
model.matching.topk: 5
note: "ATSS with smaller k"
- name: "iou_035"
model.matching.type: iou
model.matching.pos_iou: 0.35
model.matching.neg_iou: 0.3
note: "Fixed IoU (TinaFace-style lower threshold)"
- name: "iou_050"
model.matching.type: iou
model.matching.pos_iou: 0.5
model.matching.neg_iou: 0.4
note: "Standard IoU threshold"
# 4. Robustness Augmentations
robustness:
description: "Impact of blur/compression/lighting augmentations"
experiments:
- name: "no_robustness"
data.robustness_augmentation: false
note: "Standard aug only"
- name: "blur_only"
data.robustness_augmentation: true
data.robustness_blur_prob: 0.3
data.robustness_jpeg_prob: 0.0
data.robustness_lowlight_prob: 0.0
note: "Blur augmentation only"
- name: "compression_only"
data.robustness_augmentation: true
data.robustness_blur_prob: 0.0
data.robustness_jpeg_prob: 0.3
data.robustness_lowlight_prob: 0.0
note: "JPEG compression only"
- name: "full_robustness"
data.robustness_augmentation: true
note: "All robustness augmentations"
# 5. GroupNorm vs BatchNorm
normalization:
description: "GN vs BN (TinaFace found GN better at small batch sizes)"
experiments:
- name: "group_norm"
model.neck.use_gn: true
model.head.use_gn: true
note: "GroupNorm (SCRFD/TinaFace default)"
- name: "batch_norm"
model.neck.use_gn: false
model.head.use_gn: false
note: "Standard BatchNorm"
# 6. Input Resolution
input_resolution:
description: "Trade-off between resolution and speed for tiny faces"
experiments:
- name: "res_320"
data.input_size: 320
inference.input_size: 320
- name: "res_480"
data.input_size: 480
inference.input_size: 480
- name: "res_640"
data.input_size: 640
inference.input_size: 640
- name: "res_960"
data.input_size: 960
inference.input_size: 960
note: "Higher res for tiny faces (+5-10% Hard AP, ~4x slower)"
# 7. Landmark Multi-Task Learning
landmarks:
description: "RetinaFace finding: auxiliary landmark loss improves detection"
experiments:
- name: "no_landmarks"
model.head.use_landmarks: false
- name: "with_landmarks"
model.head.use_landmarks: true
model.losses.lmk_weight: 0.1
note: "Requires RetinaFace landmark annotations"
# 8. Tracker Configuration
tracking:
description: "ByteTrack hyperparameter sensitivity"
experiments:
- name: "no_tracking"
engine.use_tracking: false
- name: "conservative"
engine.tracker.high_thresh: 0.6
engine.tracker.low_thresh: 0.2
engine.tracker.max_lost: 15
- name: "aggressive"
engine.tracker.high_thresh: 0.3
engine.tracker.low_thresh: 0.05
engine.tracker.max_lost: 60
note: "More tracks, more false positives"