Astridkraft commited on
Commit
914cfda
·
verified ·
1 Parent(s): aa82308

Update sam_module.py

Browse files
Files changed (1) hide show
  1. sam_module.py +34 -15
sam_module.py CHANGED
@@ -682,41 +682,60 @@ def create_sam_mask(self, image, bbox_coords, mode):
682
 
683
  num_masks = outputs.pred_masks.shape[2]
684
  print(f" SAM lieferte {num_masks} verschiedene Masken")
 
 
 
 
 
685
 
686
  # Extrahiere alle Masken
687
- all_masks = []
 
688
 
689
  for i in range(num_masks):
690
  single_mask = outputs.pred_masks[:, :, i, :, :]
691
- resized_mask = F.interpolate(
 
692
  single_mask,
693
- size=(image.height, image.width),
694
  mode='bilinear',
695
  align_corners=False
696
  ).squeeze()
697
 
698
- mask_np = resized_mask.sigmoid().cpu().numpy()
699
- all_masks.append(mask_np)
700
-
701
- # Basis-Statistiken für jede Maske
702
- mask_binary = (mask_np > 0.5).astype(np.uint8)
703
- mask_area = np.sum(mask_binary)
704
- print(f" Maske {i+1}: Größe={mask_area:,} Pixel, Max-Konfidenz={mask_np.max():.3f}")
 
 
 
 
 
 
 
 
 
 
 
 
705
 
706
  # ============================================================
707
  # HEURISTIK
708
  # ============================================================
709
  print("🤔 SCHRITT 6: MASKENAUSWAHL MIT MODUS-SPEZIFISCHER HEURISTIK")
 
 
 
 
710
 
711
- bbox_center = ((x1 + x2) // 2, (y1 + y2) // 2)
712
- bbox_area = (x2 - x1) * (y2 - y1)
713
- print(f" Erwartetes BBox-Zentrum: {bbox_center}")
714
- print(f" Erwartete BBox-Fläche: {bbox_area:,} Pixel")
715
 
716
  best_mask_idx = 0
717
  best_score = -1
718
 
719
- for i, mask_np in enumerate(all_masks):
720
  mask_max = mask_np.max()
721
 
722
  # Grundlegende Filterung
 
682
 
683
  num_masks = outputs.pred_masks.shape[2]
684
  print(f" SAM lieferte {num_masks} verschiedene Masken")
685
+
686
+ #============
687
+ #Doppelte Berechnung: CROP und Original damit Heuristik
688
+ # auf Original berechnet werden kann und Weiterverarbeitung auf Crop
689
+ #==============
690
 
691
  # Extrahiere alle Masken
692
+ all_masks_crop = []
693
+ all_masks_original = []
694
 
695
  for i in range(num_masks):
696
  single_mask = outputs.pred_masks[:, :, i, :, :]
697
+ #Für Heuristik SAM-Masken auf Original-Bildgröße
698
+ resized_mask_original = F.interpolate(
699
  single_mask,
700
+ size=(original_image.height, original_image.width),
701
  mode='bilinear',
702
  align_corners=False
703
  ).squeeze()
704
 
705
+ mask_np_original = resized_mask_original.sigmoid().cpu().numpy()
706
+ all_masks_original.append(mask_np_original)
707
+
708
+ # 2. FÜR VERARBEITUNG: Auf CROP-GRÖSSE interpolieren
709
+ resized_mask_crop = F.interpolate(
710
+ single_mask,
711
+ size=(image.height, image.width), # CROP-Größe!
712
+ mode='bilinear',
713
+ align_corners=False
714
+ ).squeeze()
715
+ mask_np_crop = resized_mask_crop.sigmoid().cpu().numpy()
716
+ all_masks_crop.append(mask_np_crop)
717
+
718
+ # Debug-Info
719
+ mask_binary_crop = (mask_np_crop > 0.5).astype(np.uint8)
720
+ mask_binary_original = (mask_np_original > 0.5).astype(np.uint8)
721
+ print(f" Maske {i+1}: Crop={np.sum(mask_binary_crop):,}px, "
722
+ f"Original={np.sum(mask_binary_original):,}px")
723
+
724
 
725
  # ============================================================
726
  # HEURISTIK
727
  # ============================================================
728
  print("🤔 SCHRITT 6: MASKENAUSWAHL MIT MODUS-SPEZIFISCHER HEURISTIK")
729
+
730
+ bbox_center = ((original_bbox[0] + original_bbox[2]) // 2,
731
+ (original_bbox[1] + original_bbox[3]) // 2)
732
+ bbox_area = (original_bbox[2] - original_bbox[0]) * (original_bbox[3] - original_bbox[1])
733
 
 
 
 
 
734
 
735
  best_mask_idx = 0
736
  best_score = -1
737
 
738
+ for i, mask_np in enumerate(all_masks_original):
739
  mask_max = mask_np.max()
740
 
741
  # Grundlegende Filterung