{"manifest_version":1,"api_version":2,"training":{"enabled":true,"azure_upload_enabled":true},"inference":{"azure_blob_enabled":true},"tensorboard":{"enabled":true},"hyperparameters":{"task":{"type":"String","default_value":"detect","description":"Type of task to perform: 'detect' for object detection, 'segment' for instance segmentation"},"model_variant":{"type":"String","default_value":"RFDETRMedium","description":"RF-DETR model variant. Detection: 'RFDETRNano' (384px), 'RFDETRSmall' (512px), 'RFDETRMedium' (576px, recommended), 'RFDETRLarge' (704px), 'RFDETRXLarge' (700px), 'RFDETR2XLarge' (880px). Segmentation: 'RFDETRSegNano' (312px), 'RFDETRSegSmall' (384px), 'RFDETRSegMedium' (432px), 'RFDETRSegLarge' (504px), 'RFDETRSegXLarge' (624px), 'RFDETRSeg2XLarge' (768px). For task='segment', detection variant names are auto-mapped to segmentation equivalents."},"resolution":{"type":"Integer","default_value":576,"description":"Input resolution for the model. Detection defaults: Nano=384, Small=512, Medium=576, Large=704, XLarge=700, 2XLarge=880. Segmentation defaults: Nano=312, Small=384, Medium=432, Large=504, XLarge=624, 2XLarge=768. Divisibility: Detection models require divisible by 32, Segmentation models require divisible by 24."},"pretrained_model_url":{"type":"String","default_value":"","description":"URL to download pretrained model weights from AI.SEE. Leave empty to use default RF-DETR pretrained weights."},"class_mappings":{"type":"Array","default_value":[{"model_class_id":0,"core_class_id":2,"label":"Defect"}],"description_line1":"Class mappings for training and inference","description_line2":"model_class_id values must be in incremental order starting from 0"},"epochs":{"type":"Integer","default_value":10,"description":"Number of training epochs to run"},"batch_size":{"type":"String","default_value":4,"description":"Training batch size. Accepts an integer or the string 'auto' for RF-DETR automatic batch-size discovery. RF-DETR recommends effective batch size of 16 (batch_size * grad_accum_steps) when tuning manually."},"grad_accum_steps":{"type":"Integer","default_value":4,"description":"Gradient accumulation steps. Effective batch size = batch_size * grad_accum_steps. Use to achieve larger effective batch sizes on limited GPU memory."},"lr":{"type":"Float","default_value":0.0001,"description":"Learning rate for training. Default 1e-4 works well for most cases."},"lr_encoder":{"type":"Float","default_value":0.00015,"description":"Learning rate for the backbone encoder (ViT). Default is 1.5x the main learning rate. Lower values help preserve pretrained features, higher values allow more adaptation."},"lr_drop":{"type":"Integer","default_value":100,"description":"Epoch at which to drop learning rate by 10x. Set relative to total epochs (e.g., if epochs=150, try lr_drop=100). Set higher than epochs to disable. Only used when lr_scheduler='step'."},"lr_scheduler":{"type":"String","default_value":"step","description":"Learning rate scheduler type. 'step' drops LR by 10x at lr_drop epoch. 'cosine' uses cosine annealing down to lr * lr_min_factor. Cosine often yields better accuracy for longer training runs."},"lr_vit_layer_decay":{"type":"Float","default_value":0.8,"description":"Per-layer learning rate decay for the ViT backbone. Each deeper layer gets lr * decay^layer_depth. Lower values (0.6-0.8) preserve more pretrained features. Set to 1.0 to disable layer-wise decay."},"lr_component_decay":{"type":"Float","default_value":0.7,"description":"Learning-rate multiplier for RF-DETR component-specific parameter groups. Default 0.7 matches RF-DETR."},"lr_min_factor":{"type":"Float","default_value":0.0,"description":"Minimum learning-rate factor for cosine scheduler. Final LR = lr * lr_min_factor. Default 0.0 matches RF-DETR."},"warmup_epochs":{"type":"Float","default_value":0.0,"description":"Number of epochs for learning rate warmup. Gradually increases LR from 0 to target value. Try 1-5 for training stability, especially with large learning rates."},"num_queries":{"type":"Integer","default_value":300,"description":"Number of learnable object query embeddings in the transformer decoder. Also controls how many top predictions the engine keeps during post-processing. Default 300 matches RF-DETR."},"weight_decay":{"type":"Float","default_value":0.0001,"description":"L2 regularization coefficient (weight decay). Helps prevent overfitting by penalizing large weights. Default 1e-4 works well for most cases. Try 1e-5 for small datasets or 1e-3 for larger datasets."},"drop_path":{"type":"Float","default_value":0.0,"description":"Stochastic depth / drop path rate (0.0-0.3). Randomly drops layers during training for regularization. Try 0.1-0.2 to reduce overfitting on small datasets."},"clip_max_norm":{"type":"Float","default_value":0.1,"description":"Gradient clipping max norm. Default 0.1 matches RF-DETR."},"cls_loss_coef":{"type":"Float","default_value":1.0,"description":"Classification loss coefficient. Default 1.0 matches RF-DETR."},"ema_decay":{"type":"Float","default_value":0.993,"description":"Exponential moving average decay for model weights. Default 0.993 matches RF-DETR."},"freeze_encoder":{"type":"Bool","default_value":false,"description":"Freeze the backbone encoder during training. Useful for small datasets or light fine-tuning when you want to keep pretrained backbone features fixed."},"backbone_lora":{"type":"Bool","default_value":false,"description":"Enable LoRA adapters on the backbone for parameter-efficient fine-tuning."},"mask_downsample_ratio":{"type":"Integer","default_value":4,"description":"Downsampling ratio for segmentation mask loss computation during training. Lower values (2) give more precise mask supervision but use more memory. Only affects training, not inference. Only used when task='segment'."},"mask_point_sample_ratio":{"type":"Integer","default_value":16,"description":"PointRend-style mask supervision density. The mask loss is computed on num_points = H*W / ratio sampled boundary points, so LOWER values sample MORE points and give sharper, more pixel-accurate mask edges (e.g. 4 = 4x denser supervision than the default 16). Costs compute, not GPU memory — use this to improve boundary precision when resolution is memory-bound. Only used when task='segment'."},"mask_ce_loss_coef":{"type":"Float","default_value":5.0,"description":"Weight of the per-pixel binary cross-entropy mask loss. Default 5.0 matches RF-DETR. Only used when task='segment'."},"mask_dice_loss_coef":{"type":"Float","default_value":5.0,"description":"Weight of the Dice mask loss (region/overlap term). Raising it (e.g. 8.0) emphasizes mask overlap relative to box/class losses, which can tighten masks. Default 5.0 matches RF-DETR. Only used when task='segment'."},"gradient_checkpointing":{"type":"Bool","default_value":false,"description":"Enable gradient checkpointing to reduce GPU memory usage at the cost of ~20% slower training. Useful for training larger models or higher batch sizes on limited GPU memory. Re-computes activations during backward pass instead of storing them."},"early_stopping":{"type":"Bool","default_value":true,"description":"Enable early stopping based on validation mAP. Stops training when no improvement is seen for 'early_stopping_patience' epochs."},"early_stopping_patience":{"type":"Integer","default_value":10,"description":"Number of epochs to wait without improvement before early stopping"},"early_stopping_min_delta":{"type":"Float","default_value":0.001,"description":"Minimum mAP improvement to count as progress for early stopping. Use 0.001 for standard, 0.0005 for longer runs where marginal gains matter."},"resume":{"type":"Bool","default_value":false,"description":"Resume training from the last saved checkpoint"},"checkpoint_interval":{"type":"Integer","default_value":1,"description":"Epoch interval to save periodic checkpoints. Set to 0 to disable periodic checkpoints (engine will snapshot last.ckpt instead). Best checkpoints are always saved regardless of this setting."},"eval_interval":{"type":"Integer","default_value":1,"description":"Run COCO evaluation every N epochs. Increase to reduce validation overhead on long runs."},"device":{"type":"String","default_value":"cuda","description":"Device to run training on. Options: 'cuda' (GPU), 'cpu', 'mps' (Apple Silicon), or indexed CUDA devices like 'cuda:0', 'cuda:1'."},"strategy":{"type":"String","default_value":null,"description":"Distributed training strategy for RF-DETR Lightning training, e.g. 'ddp'. Leave null for single-device training."},"devices":{"type":"Integer","default_value":null,"description":"Number of devices to use for Lightning training when strategy is enabled."},"num_nodes":{"type":"Integer","default_value":null,"description":"Number of nodes for distributed Lightning training. Leave null for single-node runs."},"fp16_eval":{"type":"Bool","default_value":false,"description":"Run COCO evaluation in FP16. Reduces peak VRAM during validation which can prevent OOM on memory-constrained GPUs."},"multi_scale":{"type":"Bool","default_value":true,"description":"Enable multi-scale training which randomly resizes images to different scales each step. Improves robustness to different object sizes. Disable to unlock torch.compile."},"expanded_scales":{"type":"Bool","default_value":false,"description":"Use a wider range of scales during multi-scale training. Only used when multi_scale=true."},"seed":{"type":"Integer","default_value":null,"description":"Random seed for reproducible training. Set to null for non-deterministic training, or an integer for reproducible results."},"optimize_for_inference":{"type":"Bool","default_value":true,"description":"Optimize model for inference after loading (provides ~2x speedup)"},"inference_dtype":{"type":"String","default_value":"float32","description":"Data type for inference model. 'float32' for full precision, 'float16' for half precision (halves VRAM, faster on GPUs with Tensor Cores). Only used when optimize_for_inference=true."},"confidence_threshold":{"type":"Float","default_value":0.05,"description":"Minimum confidence threshold for detections during inference. Objects below this threshold are discarded."},"inference_batch_size":{"type":"Integer","default_value":1,"description":"Number of images or tiles to process in a single batch during inference. Higher values improve GPU utilization but use more memory."},"tile_size":{"type":"Array","default_value":[0,0],"description":"Size of each tile in pixels [height, width]. Set to [0, 0] to disable tiling. When enabled, images are split into overlapping tiles for inference on large images."},"tile_overlap":{"type":"Array","default_value":[0,0],"description":"Overlap between tiles in pixels [height, width]. Higher overlap reduces edge artifacts but increases computation."},"inference_image_resize":{"type":"Array","default_value":[0,0],"description":"Resize images to this size [height, width] before inference. Set to [0, 0] to use original image size. Predictions are automatically scaled back to original dimensions."},"high_quality_resize":{"type":"Bool","default_value":true,"description":"Use high-quality image resizing (INTER_AREA) during preprocessing. True: best quality, slower. False: fast resize (INTER_LINEAR)."},"subpixel_mask_contour":{"type":"Bool","default_value":false,"description":"Trace segmentation polygons from the model's SOFT (probability) mask at sub-pixel precision instead of the binarized mask, recovering the ±0.5 px boundary quantization. The soft logit field is cubic-upsampled within each instance ROI and the 0.5-probability iso-contour is traced. Improves boundary/width precision for metrology; inference-only, no retraining. Segment task only. Default false (original binary contour)."},"subpixel_upsample_factor":{"type":"Integer","default_value":4,"description":"Upsampling factor for the soft mask when subpixel_mask_contour is enabled. Boundary precision is ~1/factor px (e.g. 4 = quarter-pixel). Higher = finer but more compute per instance. Only used when subpixel_mask_contour=true."},"preprocessing_workers":{"type":"Integer","default_value":4,"description":"Number of parallel threads for image preprocessing. Higher values improve preprocessing speed but use more CPU."},"zeromq_queue_size":{"type":"Integer","default_value":100,"description":"Maximum number of inference requests to hold in the ZeroMQ queue."},"augmentation_enabled":{"type":"Bool","default_value":false,"description":"Enable data augmentation for training dataset."},"augmentation_mode":{"type":"String","default_value":"online","description":"Augmentation execution mode. 'online' (default): single-image transforms run at rfdetr runtime via aug_config (different random augmentations each epoch, no dataset expansion, faster startup). 'offline': all transforms run through the engine's offline pipeline before training (dataset expansion by multiplier, quality-filtered with min_visibility). Multi-image augmentations (CutMix, Mosaic, CopyPaste) always run offline regardless of mode."},"augmentation_multiplier":{"type":"Integer","default_value":2,"description":"Number of augmented copies to generate per original image. Final dataset size = original * (1 + multiplier). E.g., multiplier=2 means 3x dataset size."},"augmentation_seed":{"type":"Integer","default_value":null,"description":"Random seed for reproducible augmentations. Set to null for random each time, or an integer for reproducible results."},"augmentation_num_workers":{"type":"Integer","default_value":2,"description":"Number of parallel workers for augmentation processing."},"augmentation_skip_ok_images":{"type":"Bool","default_value":false,"description":"When true and augmentation_mode='offline', only images with annotations are augmented. OK images without annotations remain in the dataset unchanged."},"augmentation_horizontal_flip":{"type":"Float","default_value":0.0,"description":"HORIZONTAL FLIP: Probability (0.0-1.0). Mirrors image left-to-right. Great for symmetric objects. Set to 0.0 for text/directional objects."},"augmentation_vertical_flip":{"type":"Float","default_value":0.0,"description":"VERTICAL FLIP: Probability (0.0-1.0). Mirrors image top-to-bottom. Useful for aerial/microscopy images."},"augmentation_rotate":{"type":"Object","default_value":{"p":0.0,"limit":15},"description":"ROTATION: Rotates image within [-limit, +limit] degrees. p=probability (0.0-1.0), limit=max angle in degrees. Use limit 5-15 for slight, 30-45 for aggressive rotation."},"augmentation_blur":{"type":"Object","default_value":{"p":0.0,"limit":5},"description":"GAUSSIAN BLUR: Simulates out-of-focus images. p=probability, limit=max kernel size (must be odd >= 3). Use 3-5 for slight, 7-11 for heavy blur."},"augmentation_noise":{"type":"Object","default_value":{"p":0.0,"std_range":[0.02,0.1]},"description":"GAUSSIAN NOISE: Adds random noise. p=probability, std_range=[min, max] standard deviation as fraction (0.02-0.15). Use [0.02, 0.05] for light, [0.05, 0.15] for heavy noise."},"augmentation_scale":{"type":"Object","default_value":{"p":0.0,"limit":[-0.1,0.1]},"description":"SCALE/ZOOM: Zooms in/out. p=probability, limit=[min, max] as fraction ([-0.1, 0.1] = 90%-110% size). Helps detect objects at different distances."},"augmentation_hsv":{"type":"Object","default_value":{"p":0.0,"hue_limit":20,"sat_limit":30,"val_limit":20},"description":"COLOR JITTER (HSV): Adjusts hue/saturation/value. p=probability, *_limit=max shift. Simulates different lighting and color conditions. Use hue 10-20 for subtle, 30-50 for dramatic."},"augmentation_perspective":{"type":"Object","default_value":{"p":0.0,"scale":[0.05,0.1]},"description":"PERSPECTIVE: Applies perspective distortion. p=probability, scale=[min, max] distortion. Use [0.02, 0.05] for subtle, [0.1, 0.2] for dramatic shifts."},"augmentation_grayscale":{"type":"Float","default_value":0.0,"description":"GRAYSCALE: Probability (0.0-1.0) to convert image to grayscale. Helps model be invariant to color."},"augmentation_transpose":{"type":"Float","default_value":0.0,"description":"TRANSPOSE: Probability (0.0-1.0) to swap image width and height. Useful for rotation-invariant detection."},"augmentation_cutmix":{"type":"Object","default_value":{"p":0.0,"beta":1.0},"description":"CUTMIX: Pastes rectangular region from random image onto base image. p=probability (0.0-1.0), beta=Beta distribution parameter for cut size (1.0 recommended). Filters annotations by visibility. Improves localization."},"augmentation_mosaic":{"type":"Object","default_value":{"p":0.0,"border":0},"description":"MOSAIC: Combines 4 random images into 2x2 grid. p=probability (0.0-1.0), border=pixels between quadrants (0 recommended). Requires at least 4 images in dataset. Great for small object detection."},"augmentation_copypaste":{"type":"Object","default_value":{"p":0.0,"max_objects":3,"scale_range":[0.5,1.5]},"description":"COPY-PASTE: Copies objects from random images using segmentation masks. p=probability (0.0-1.0), max_objects=max objects to paste (1-5), scale_range=[min,max] scale factor. REQUIRES segmentation annotations. Best for instance segmentation tasks."},"augmentation_min_visibility":{"type":"Float","default_value":0.8,"description":"VISIBILITY THRESHOLD: Minimum visibility ratio (0.0-1.0) for keeping annotations after augmentation. Visibility = (transformed_area / original_area). Objects with visibility below this threshold are removed. Use 0.3 (30%) for lenient, 0.6 (60%) for balanced, 0.8 (80%) for strict filtering. RF-DETR native aug_config is intentionally disabled by the engine so these engine-managed augmentations remain the only active augmentation path."}}}