From b0e87c07efc821669f7a0fd7babd446b4cbd1559 Mon Sep 17 00:00:00 2001 From: pikaliov Date: Wed, 22 Apr 2026 00:36:06 +0300 Subject: [PATCH] Fix Grad-CAM crash in shared encoder mode Access model.image_encoder instead of model.drone_encoder/sat_encoder when shared_encoder=True. Caused AttributeError at eval epoch 4. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/training/gradcam.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/training/gradcam.py b/src/training/gradcam.py index c9d2e91..409ef29 100644 --- a/src/training/gradcam.py +++ b/src/training/gradcam.py @@ -200,8 +200,11 @@ def generate_gradcam_samples( save_dir.mkdir(parents=True, exist_ok=True) model.eval() - cam_drone = DINOv3GradCAM(model.drone_encoder, target_layer_idx=-1) - cam_sat = DINOv3GradCAM(model.sat_encoder, target_layer_idx=-1) + # Shared encoder mode uses single image_encoder for both branches. + drone_enc = model.image_encoder if model.shared_encoder else model.drone_encoder + sat_enc = model.image_encoder if model.shared_encoder else model.sat_encoder + cam_drone = DINOv3GradCAM(drone_enc, target_layer_idx=-1) + cam_sat = DINOv3GradCAM(sat_enc, target_layer_idx=-1) overlays = [] batch = next(iter(dataloader))