# YOLOX Base Configuration System ## Overview This directory contains base experiment configurations for YOLOX models. These configurations define "protected" parameters that are preserved during transfer learning from COCO-pretrained models. ## How It Works ### Transfer Learning Flow 1. **COCO Transfer Learning** (`transfer_learning = 'coco'`): - Loads base configuration from `data/yolox_*.py` based on `selected_model` - Base parameters are **protected** and used as defaults - User settings from the form only override what's explicitly set - Result: Best of both worlds - proven COCO settings + your customizations 2. **Sketch/Custom Training** (`transfer_learning = 'sketch'`): - No base configuration loaded - Uses only user-defined parameters from the training form - Full control over all settings ### Base Configuration Files - `yolox_s.py` - YOLOX-Small (depth=0.33, width=0.50) - `yolox_m.py` - YOLOX-Medium (depth=0.67, width=0.75) - `yolox_l.py` - YOLOX-Large (depth=1.0, width=1.0) - `yolox_x.py` - YOLOX-XLarge (depth=1.33, width=1.25) ### Protected Parameters These parameters are defined in base configs and **preserved** unless explicitly overridden: **Model Architecture:** - `depth` - Model depth multiplier - `width` - Model width multiplier - `activation` - Activation function (silu) **Training Hyperparameters:** - `basic_lr_per_img` - Learning rate per image - `scheduler` - LR scheduler (yoloxwarmcos) - `warmup_epochs` - Warmup epochs - `max_epoch` - Maximum training epochs - `no_aug_epochs` - No augmentation epochs - `min_lr_ratio` - Minimum LR ratio **Optimizer:** - `momentum` - SGD momentum - `weight_decay` - Weight decay **Augmentation:** - `mosaic_prob` - Mosaic probability - `mixup_prob` - Mixup probability - `hsv_prob` - HSV augmentation probability - `flip_prob` - Flip probability - `degrees` - Rotation degrees - `translate` - Translation - `shear` - Shear - `mosaic_scale` - Mosaic scale range - `mixup_scale` - Mixup scale range - `enable_mixup` - Enable mixup **Input/Output:** - `input_size` - Training input size - `test_size` - Testing size - `random_size` - Random size range **Evaluation:** - `eval_interval` - Evaluation interval - `print_interval` - Print interval ## Customizing Base Configurations ### Adding a New Model Create a new file `data/yolox_MODELNAME.py`: ```python #!/usr/bin/env python3 # -*- coding:utf-8 -*- # Base configuration for YOLOX-MODELNAME class BaseExp: """Base experiment configuration for YOLOX-MODELNAME""" # Define protected parameters depth = 1.0 width = 1.0 # ... other parameters ``` ### Modifying Parameters Edit the corresponding `yolox_*.py` file and update the `BaseExp` class attributes. **Example:** To change YOLOX-S max epochs: ```python # In data/yolox_s.py class BaseExp: max_epoch = 500 # Changed from 300 # ... other parameters ``` ## Parameter Priority The merge logic follows this priority (highest to lowest): 1. **User form values** (if explicitly set, not None) 2. **Base config values** (if transfer_learning='coco') 3. **Default fallbacks** (hardcoded minimums) ## Example ### COCO Transfer Learning ``` User sets in form: max_epoch=100, depth=0.5 Base config (yolox_s.py) has: depth=0.33, width=0.50, max_epoch=300 Result: depth=0.5 (user override), width=0.50 (base), max_epoch=100 (user override) ``` ### Sketch Training ``` User sets in form: max_epoch=100, depth=0.5 No base config loaded Result: depth=0.5 (user), max_epoch=100 (user), width=1.0 (default fallback) ``` ## Debugging To see which base config was loaded, check Flask logs: ``` Loaded base config for yolox-s: ['depth', 'width', 'activation', ...] ``` If base config fails to load: ``` Warning: Could not load base config for yolox-s: [error message] Falling back to custom settings only ```