conditional_modulation
conditional_modulation
¶
Conditional feature modulation via learned affine transform.
Computes y = x * (1 + gamma) + beta, where gamma (scale) and beta (shift) are projected from a conditioning vector. Optionally produces a gate for residual connections (AdaLN-Zero).
References
FiLM: https://arxiv.org/pdf/2212.09748
ConditionalModulation
¶
ConditionalModulation(conditioning_dimension, feature_dim, use_shift=True, use_gate=False, activation=value, init_strategy='zero', feature_axis=-1)
Bases: Module
Conditional modulation layer.
Supports FiLM (for CNNs), adaLN (for transformers), and variants.
Initialize conditional modulation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
conditioning_dimension
|
int
|
Dimension of conditioning vector. |
required |
feature_dim
|
int
|
Dimension of features to modulate. |
required |
use_shift
|
bool
|
Whether to include shift (beta) or just scale (gamma). |
True
|
use_gate
|
bool
|
Whether to include gate output. |
False
|
activation
|
str
|
Activation function to apply to condition before modulation. |
value
|
init_strategy
|
Literal['zero', 'xavier']
|
Weight initialization strategy. |
'zero'
|
feature_axis
|
int
|
Feature axis for 3D tensors. Use |
-1
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in src/versatil/models/layers/modulation/conditional_modulation.py
init_parameters
¶
Initialize projection weights from the configured strategy.
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in src/versatil/models/layers/modulation/conditional_modulation.py
forward
¶
Apply conditional modulation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
Tensor
|
Features to modulate.
- CNN: (B, C, H, W)
- Transformer: (B, S, D)
- Conv1D: (B, C, T) when |
required |
condition
|
Tensor
|
Conditioning vector (B, conditioning_dimension). |
required |
Returns:
| Type | Description |
|---|---|
Tensor
|
Tuple of (modulated features, gate). Gate is a learned tensor |
Tensor
|
when use_gate=True, or ones(1) when use_gate=False. |