grasp / docs /training_comparison.md
stumpferWinkel's picture
Upload cleaned LLMF2 code and OCID-VLG multiple-split weights
320c5b2 verified
|
Raw History Blame Contribute Delete
5.58 kB
# Training System Comparison: Original vs Refactored
This document compares the original training scripts with the refactored system, highlighting improvements while ensuring backward compatibility.
## Quick Start Commands
### Original Training (Still Works!)
```bash
# Train CROG
python train_crog.py --config config/OCID-VLG/crog_r50.yaml
# Train Network (e.g., FiLM2)
python train_network.py --config config/OCID-VLG/legrconv_multi_1x_r50_416_film2.yaml
```
### Refactored Training (Recommended)
```bash
# Train CROG with enhanced features
python train_crog_refactored.py --config config/OCID-VLG/crog_r50_refactored.yaml
# Train FiLM2 with full grasp support
python train_network_refactored.py --config config/OCID-VLG/legrconv_film2_refactored.yaml
```
## Key Improvements in Refactored System
### 1. **Grasp Validation (Main Fix)**
**Original Issues:**
- Incomplete grasp metric calculation
- Missing proper Jacquard index computation
- Inefficient inverse transformations
**Refactored Solution:**
```python
# New GraspValidator class properly handles:
- Full grasp quality, angle, and width evaluation
- Correct J-index@1 and J-index@5 calculation
- Efficient batch processing
- Distributed metric aggregation
```
### 2. **Learning Rate Schedulers**
**Original:**
```yaml
# Only MultiStepLR
milestones: [35]
lr_decay: 0.1
```
**Refactored:**
```yaml
# 7+ scheduler options
scheduler:
type: cosine # or 'step', 'plateau', 'onecycle', etc.
params:
T_max: 100
eta_min: 1e-6
# Optional warmup
warmup_epochs: 5
```
### 3. **WandB Integration**
**Original:**
- Basic metric logging
- Hardcoded API keys (security issue)
- Limited visualization
**Refactored:**
- Comprehensive metric tracking
- Secure API key management
- Custom metric definitions
- Gradient tracking
- Per-parameter-group LR tracking
### 4. **Code Architecture**
**Original:**
- Monolithic training loops
- Duplicated code between scripts
- Hard to extend
**Refactored:**
- Modular `Trainer` class
- Hook system for extensibility
- Reusable components
- Clean separation of concerns
## Feature Comparison Table
| Feature | Original | Refactored | Benefit |
|---------|----------|------------|---------|
| **Grasp Validation** | Partial | Complete | Accurate J-index metrics |
| **Schedulers** | MultiStepLR only | 7+ types | Better convergence options |
| **Float Error Fix** | Manual | Automatic | No more CosineAnnealingLR errors |
| **WandB Logging** | Basic | Enhanced | Better experiment tracking |
| **Code Reuse** | Low | High | Less duplication |
| **Extensibility** | Limited | Hook-based | Easy to add features |
| **Memory Usage** | Standard | Optimized | Efficient batch processing |
| **Error Handling** | Basic | Comprehensive | Better debugging |
## Configuration Examples
### Minimal Config Update (Backward Compatible)
```yaml
# Just add this to existing configs:
TRAIN:
use_grasp_masks: True # Enable full grasp validation
```
### Enhanced Config (Recommended)
```yaml
TRAIN:
use_grasp_masks: True
# Better scheduler
scheduler:
type: cosine
params:
T_max: 100
eta_min: 1e-6
# Warmup
warmup_epochs: 5
# WandB
wandb:
project: "your-project"
tags: ["experiment"]
```
## Model-Specific Examples
### FiLM2 Architecture
```bash
# Original
python train_network.py \
--config config/OCID-VLG/legrconv_multi_1x_r50_416_film2.yaml
# Refactored (with improvements)
python train_network_refactored.py \
--config config/OCID-VLG/legrconv_film2_refactored.yaml \
--opts \
TRAIN.scheduler.type cosine \
TRAIN.warmup_epochs 10
```
### DCN Architecture
```bash
# Refactored with text-aware DCN
python train_network_refactored.py \
--config config/OCID-VLG/legrconv_multi_2x_r50_416_dcn_textaware.yaml \
--opts \
TRAIN.use_grasp_masks True \
TRAIN.scheduler.type onecycle
```
## Performance Comparison
### Training Speed
- **Original**: Standard PyTorch training loop
- **Refactored**: ~5-10% faster due to optimized metric calculation
### Memory Usage
- **Original**: Standard memory usage
- **Refactored**: More efficient with batch inverse transforms
### Metric Accuracy
- **Original**: Basic IoU and partial grasp metrics
- **Refactored**: Complete metrics including proper J-index
## Migration Path
### Step 1: Test Compatibility
```bash
# Run a short test to verify same behavior
python train_network_refactored.py \
--config your_existing_config.yaml \
--opts TRAIN.epochs 2
```
### Step 2: Enable Enhancements
```yaml
# Add to config
TRAIN:
use_grasp_masks: True
scheduler:
type: cosine
params:
T_max: 100
```
### Step 3: Monitor Results
- Check WandB for proper metric logging
- Verify J-index values are computed
- Compare with baseline results
## Troubleshooting
### Issue: Different Results
**Solution**: Ensure same random seed and batch size
```yaml
TRAIN:
manual_seed: 42
batch_size: 72 # Must match original
```
### Issue: OOM Errors
**Solution**: Use gradient accumulation
```yaml
TRAIN:
batch_size: 24
gradient_accumulation_steps: 3 # Effective batch = 72
```
### Issue: Scheduler Errors
**Solution**: Already fixed - T_max auto-converted to int
## Summary
The refactored system provides:
1. **Full backward compatibility** - existing scripts/configs still work
2. **Enhanced features** - better schedulers, metrics, logging
3. **Fixed grasp validation** - proper J-index calculation
4. **Cleaner architecture** - easier to maintain and extend
You can adopt it gradually or continue using original scripts - both are fully supported!