7.7 KiB
Transfer Learning Base Configuration Feature
Overview
This feature implements automatic loading of base configurations when "Train on COCO" transfer learning is selected. Base parameters are loaded from backend/data/ based on the selected YOLOX model, and these protected fields are displayed as greyed out and non-editable in the frontend.
Components Modified/Created
Backend
1. Base Configuration Files (backend/data/)
yolox_s.py- Base config for YOLOX-Small (depth=0.33, width=0.50)yolox_m.py- Base config for YOLOX-Medium (depth=0.67, width=0.75)yolox_l.py- Base config for YOLOX-Large (depth=1.0, width=1.0)yolox_x.py- Base config for YOLOX-XLarge (depth=1.33, width=1.25)
Each file contains a BaseExp class with protected parameters:
- Model architecture (depth, width, activation)
- Training hyperparameters (max_epoch, warmup_epochs, scheduler, etc.)
- Optimizer settings (momentum, weight_decay)
- Augmentation probabilities (mosaic_prob, mixup_prob, etc.)
- Input/output sizes
2. Services (backend/services/generate_yolox_exp.py)
New functions:
load_base_config(selected_model)- Dynamically loads base config using importlib- Modified
generate_yolox_inference_exp()to supportuse_base_configparameter - Base config merging logic: base → user overrides → defaults
Behavior:
transfer_learning='coco'→ loads base config + applies user overridestransfer_learning='sketch'→ uses only user-defined values- Protected parameters from base config are preserved unless explicitly overridden
3. API Routes (backend/routes/api.py)
New endpoint:
@api_bp.route('/base-config/<model_name>', methods=['GET'])
def get_base_config(model_name):
Returns the base configuration JSON for a specific YOLOX model.
Frontend
1. HTML (edit-training.html)
Added:
- Info banner to indicate when base config is active
- CSS styles for disabled input fields (grey background, not-allowed cursor)
- Visual feedback showing which model's base config is loaded
Banner HTML:
<div id="base-config-info" style="display:none; ...">
🔒 Base Configuration Active
Protected parameters are loaded from [model] base config
</div>
CSS for disabled fields:
.setting-row input[type="number"]:disabled,
.setting-row input[type="text"]:disabled,
.setting-row input[type="checkbox"]:disabled {
background: #d3d3d3 !important;
color: #666 !important;
cursor: not-allowed !important;
border: 1px solid #999 !important;
}
2. JavaScript (js/start-training.js)
New functionality:
-
Base Config Loading:
function loadBaseConfig(modelName)Fetches base config from
/api/base-config/<model> -
Apply Base Config:
function applyBaseConfig(config, isCocoMode)- Applies config values to form fields
- Disables and greys out protected fields
- Shows/hides info banner
- Adds tooltips to disabled fields
-
Update Transfer Learning Mode:
function updateTransferLearningMode()- Monitors changes to "Transfer Learning" dropdown
- Monitors changes to "Select Model" dropdown
- Loads appropriate base config when COCO mode is selected
- Clears base config when sketch mode is selected
-
Form Submission Enhancement:
- Temporarily enables disabled fields before submission
- Ensures protected parameters are included in form data
- Re-disables fields after collection
Protected Fields List:
const protectedFields = [
'depth', 'width', 'act', 'max_epoch', 'warmup_epochs', 'warmup_lr',
'scheduler', 'no_aug_epochs', 'min_lr_ratio', 'ema', 'weight_decay',
'momentum', 'input_size', 'mosaic_scale', 'test_size', 'enable_mixup',
'mosaic_prob', 'mixup_prob', 'hsv_prob', 'flip_prob', 'degrees',
'translate', 'shear', 'mixup_scale', 'print_interval', 'eval_interval'
];
User Flow
1. Normal Custom Training (Train from sketch)
- User selects model: e.g., "YOLOX-s"
- User selects "Train from sketch"
- All fields are editable (white background)
- User can customize all parameters
- Submission uses user-defined values only
2. COCO Transfer Learning (Train on COCO)
- User selects model: e.g., "YOLOX-s"
- User selects "Train on coco"
- Automatic actions:
- Frontend calls
/api/base-config/YOLOX-s - Base config is loaded and applied
- Protected fields become greyed out and disabled
- Green info banner appears: "🔒 Base Configuration Active"
- Tooltip on hover: "Protected by base config for YOLOX-s. Switch to 'Train from sketch' to customize."
- Frontend calls
- User can still edit non-protected fields
- On submit: both base config values AND user overrides are sent to backend
- Backend generates exp.py with merged settings
3. Switching Models
- User changes from "YOLOX-s" to "YOLOX-l" (while in COCO mode)
- Frontend automatically:
- Fetches new base config for YOLOX-l
- Updates field values (depth=1.0, width=1.0, etc.)
- Updates banner text to show "YOLOX-l"
- Protected parameters update to match new model's architecture
Testing
Manual Test Steps:
-
Test Base Config Loading:
cd backend/data python test_base_configs.pyShould display all parameters for yolox-s, yolox-m, yolox-l, yolox-x
-
Test API Endpoint:
# Start Flask server cd backend python app.py # In another terminal: curl http://localhost:3000/api/base-config/YOLOX-sShould return JSON with depth, width, activation, etc.
-
Test Frontend:
- Open
edit-training.html?id=<project_id>in browser - Select "YOLOX-s" model
- Select "Train on coco" → fields should grey out
- Select "Train from sketch" → fields should become editable
- Switch to "YOLOX-l" (in COCO mode) → values should update
- Open browser console and check for:
Applied base config. Protected fields: depth, width, ...
- Open
-
Test Form Submission:
- With COCO mode active (fields greyed out)
- Click "Save Parameters"
- Check browser Network tab → POST to
/api/yolox-settings - Verify payload includes protected parameters (depth, width, etc.)
- Check Flask logs for successful save
Expected Behaviors:
✅ COCO mode + YOLOX-s:
- depth: 0.33 (greyed out)
- width: 0.50 (greyed out)
- activation: silu (greyed out)
- Info banner visible
✅ COCO mode + YOLOX-l:
- depth: 1.0 (greyed out)
- width: 1.0 (greyed out)
- activation: silu (greyed out)
✅ Sketch mode:
- All fields white/editable
- No info banner
- User can set any values
Documentation
backend/data/README.md- Complete guide on base config systembackend/data/test_base_configs.py- Test script for base configs
Benefits
- Proven defaults: Users start with battle-tested COCO pretraining settings
- Prevents mistakes: Can't accidentally break model architecture by changing depth/width
- Easy customization: Can still override specific parameters if needed
- Visual feedback: Clear indication of which fields are protected
- Model-specific: Each model (s/m/l/x) has appropriate architecture defaults
- Flexible: Can easily add new models by creating new base config files
Future Enhancements
- Add "Override" button next to protected fields to unlock individual parameters
- Show diff comparison between base config and user overrides
- Add validation warnings if user tries values far from base config ranges
- Export final merged config as preview before training