This implementation has two key improvements:
- Uses learned weight combinations to adaptively process features
- In
DecoderDynamic: 4 different convolution outputs are weighted by learned parameters - Includes MixStyle: style augmentation for domain robustness
- Helps the model learn adaptive feature combinations for different image characteristics
- Concatenates normalized (x, y) coordinate maps to feature tensors
- Provides explicit spatial information to the decoder
- Helps preserve spatial structure in generated images
- Particularly useful for medical image enhancement
models/
├── degan_generator_dynamic.py # Generator
├── degan_discriminator.py # Discriminator
networks/
├── unet.py # Contains ConvDDynamic, CoordConv2d
DEGANGeneratorDynamic
├── CalibrationBlock
│ └── Channel-wise attention
└── DynamicUNetBlock
├── ConvDDynamic encoders (layers 1-3)
│ ├── ConvDDynamic: Dynamic conv + MixStyle
│ ├── MixStyle: Adaptive instance normalization
│ └── Learned weight combinations
├── Standard Conv2d encoders (layers 4-5)
└── Decoder with CoordConv2d
└── CoordConv2d: Global positional encoding
Create "data_adr.txt" file and determine requirement as bellow:
#############################################
[data]
data_root = datapath
data_names = config/train_name_all.txt
modality_postfix = [flair]
file_postfix = nii.gz
#############################################Put name of each Subject ID on "train_name_all.txt"
Test mode (CPU, 1 epoch):
python train_degan.py --device cpu --testFull training (GPU):
python train_degan.py --epochs 400 --batch-size 8 --device cudaAfter training, use the model for enhancement:
from models.degan_generator_dynamic import DEGANGeneratorDynamic
import torch
# Load model
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = DEGANGeneratorDynamic().to(device)
model.load_state_dict(torch.load('path/to/data'))
model.eval()
# Inference
with torch.no_grad():
input_tensor = torch.randn(1, 1, 128, 128).to(device)
output = model(input_tensor)| Feature | Original EnhGAN | Enhanced DE-GAN |
|---|---|---|
| Encoder | Standard Conv2d | ConvDDynamic + MixStyle |
| Decoder | Standard Conv2d | CoordConv2d (spatial encoding) |
| Parameter Tuning | None | Dynamic weight combinations |
| Style Robustness | None | MixStyle augmentation |
| Spatial Awareness | Implicit | Explicit (coordinate maps) |
Advantages:
- ✓ Adaptive feature processing
- ✓ Better spatial information awareness
- ✓ More robust to style variations
- ✓ Preserves original CalibrationBlock benefits
Computational Cost:
- ~10-15% slower than original (due to CoordConv2d + dynamic operations)
- Memory usage: slightly higher (~5-10%)
-
Start with test mode:
python train_degan.py --device cpu --test
-
Monitor losses:
- Generator loss should decrease
- Discriminator loss should stay stable
- If D_loss → 0 too quickly, generator is winning (reduce G learning rate)
-
Save checkpoints:
- Models saved every 40 epochs
- Load best checkpoint for inference
The dynamic components are based on:
- ConvDDynamic: Dynamic convolution with MixStyle augmentation
- CoordConv2d: Coordinate-based convolutions for spatial awareness
- MixStyle: Domain generalisation technique for medical imaging