|
|
| import sys
|
| import os
|
| sys.path.append(os.path.join(os.getcwd(), 'src'))
|
| from inference import SegModel, DEVICE
|
| from PIL import Image
|
| import torch
|
| import numpy as np
|
| import cv2
|
| import matplotlib.pyplot as plt
|
|
|
|
|
| TEST_IMAGE = "data/cracks.v1-cracks-f.coco/test/2056_jpg.rf.c2c86bb2aa54ac0df349c42cbdfc1315.jpg"
|
| MODEL_PATH = "best_model.pth"
|
|
|
| def generate_heatmap():
|
| print(f"Generating heatmap for {TEST_IMAGE}...")
|
|
|
|
|
| model = SegModel().to(DEVICE)
|
| if os.path.exists(MODEL_PATH):
|
| model.load_state_dict(torch.load(MODEL_PATH, map_location=DEVICE))
|
| print("Model loaded.")
|
| else:
|
| print("Model not found!")
|
| return
|
| model.eval()
|
|
|
|
|
| from torchvision import transforms
|
| transform = transforms.Compose([
|
| transforms.Resize((256, 256)),
|
| transforms.ToTensor(),
|
| ])
|
|
|
| img_pil = Image.open(TEST_IMAGE).convert("RGB")
|
| original_size = img_pil.size
|
| img_tensor = transform(img_pil).unsqueeze(0).to(DEVICE)
|
|
|
|
|
| with torch.no_grad():
|
| output = model(img_tensor)
|
|
|
|
|
| probs = output[0, 0].cpu().numpy()
|
|
|
| print(f"Probability Stats: Min={probs.min():.4f}, Max={probs.max():.4f}, Mean={probs.mean():.4f}")
|
|
|
|
|
|
|
| probs_uint8 = (probs * 255).astype(np.uint8)
|
| probs_img = Image.fromarray(probs_uint8).resize(original_size, Image.Resampling.BILINEAR)
|
| probs_np = np.array(probs_img)
|
|
|
|
|
| heatmap = cv2.applyColorMap(probs_np, cv2.COLORMAP_JET)
|
|
|
|
|
| original_cv = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
|
| overlay = cv2.addWeighted(original_cv, 0.6, heatmap, 0.4, 0)
|
|
|
|
|
| cv2.imwrite("debug_heatmap_raw.png", heatmap)
|
| cv2.imwrite("debug_heatmap_overlay.png", overlay)
|
|
|
|
|
| plt.figure()
|
| plt.hist(probs.flatten(), bins=100, log=True)
|
| plt.title("Prediction Probability Distribution")
|
| plt.savefig("debug_hist.png")
|
|
|
| print("Saved debug_heatmap_raw.png, debug_heatmap_overlay.png, debug_hist.png")
|
|
|
| if __name__ == "__main__":
|
| generate_heatmap()
|
|
|