@@ -243,6 +243,7 @@ def train_main(args) -> dict[str, Any]:
243243 for stage_name , stage_cfg in iter_enabled_stages (config , args .stage ):
244244 freeze_encoder = bool (stage_cfg .get ('freeze_encoder' , False ))
245245 freeze_decoder = bool (stage_cfg .get ('freeze_decoder' , False ))
246+ use_fixed_residual = bool (stage_cfg .get ('use_fixed_residual' , freeze_encoder ))
246247 stage_loss_cfg = deep_update (loss_cfg , stage_cfg .get ('loss' , {}))
247248 for parameter in encoder .parameters ():
248249 parameter .requires_grad = not freeze_encoder
@@ -260,7 +261,7 @@ def train_main(args) -> dict[str, Any]:
260261 bits = batch ['bits' ].to (device )
261262
262263 with torch .cuda .amp .autocast (enabled = scaler .is_enabled ()):
263- if freeze_encoder :
264+ if use_fixed_residual :
264265 residual = fixed_residual_batch (
265266 torch ,
266267 bits ,
@@ -377,14 +378,14 @@ def train_main(args) -> dict[str, Any]:
377378 for batch in val_loader :
378379 clean = batch ['image' ].to (device )
379380 bits = batch ['bits' ].to (device )
380- residual = encoder ( clean , bits ) if not freeze_encoder else fixed_residual_batch (
381+ residual = fixed_residual_batch (
381382 torch ,
382383 bits ,
383384 clean .shape [- 2 ],
384385 clean .shape [- 1 ],
385386 float (stage_cfg .get ('fixed_residual_scale' , 0.02 )),
386387 device ,
387- )
388+ ) if use_fixed_residual else encoder ( clean , bits )
388389 watermarked = torch .clamp (clean + residual , 0.0 , 1.0 )
389390 attacked = attack_batch (torch , watermarked , attack_cfg , str (stage_cfg .get ('attack_strength' , 'medium' ))).to (device )
390391 logits , confidence = decoder (attacked )
0 commit comments