--- license: mit tags: - cybersecurity - phishing-detection - computer-vision - resnet50 - brand-impersonation datasets: - circl-phishing - openphish - kaggle-webpage-phishing metrics: - accuracy - precision - recall - f1 pipeline_tag: image-classification --- # Ph5 Webpage Screenshot Classifier: Visual Brand Impersonation Detector (ResNet-50)

Model Test Accuracy Val Accuracy F1 Score Latency License

## Model Summary The **Ph5 Screenshot Classifier** is a deep convolutional neural network based on `ResNet-50` fine-tuned to classify webpage landing page screenshots and identify fraudulent brand impersonation, visual cloning, and deceptive graphical credential-harvesting interfaces. It forms the visual inspection modality of the **Ph5 Multimodal Cybersecurity Framework**, closing critical blind spots where attackers host phishing forms on trusted infrastructure (such as Microsoft Forms, Notion, or SharePoint) that easily bypass lexical URL filters. --- ## Performance & Evaluation Benchmark Evaluated on an independent, held-out test partition of **438 webpage screenshots** (248 Benign, 190 Phishing): | Metric | Held-Out Test Split (N = 438) | Peak Validation Split (N = 438) | | :--- | :--- | :--- | | **Accuracy** | **79.00%** | **83.30%** | | **Precision** | **72.69%** | **78.20%** | | **Recall** | **82.63%** | **85.10%** | | **F1-Score** | **77.34%** | **81.50%** | | **Inference Latency** | **28.5 ms** | Batch Size = 1 (RTX 3050 Laptop GPU) | ### Baseline Comparison | Architecture | Test Accuracy | Precision | Recall | F1-Score | Latency | | :--- | :--- | :--- | :--- | :--- | :--- | | MobileNetV2 | 76.10% | 70.20% | 79.40% | 74.51% | 14.0 ms | | VGG-16 | 77.40% | 71.10% | 80.50% | 75.51% | 42.0 ms | | **Ph5 ResNet-50 (This Model)** | **79.00%** | **72.69%** | **82.63%** | **77.34%** | **28.5 ms** | --- ## Confusion Matrix (Test Split: N = 438) ```text Predicted Benign Phishing Benign 189 59 Phishing 33 157 ``` --- ## Intended Use & Integration ### PyTorch Inference ```python import torch import torchvision.models as models import torchvision.transforms as transforms from PIL import Image # Initialize ResNet-50 architecture model = models.resnet50(weights=None) model.fc = torch.nn.Sequential( torch.nn.Dropout(0.3), torch.nn.Linear(2048, 2) ) # Load state dict state_dict = torch.load("best_model.pth", map_location="cpu") model.load_state_dict(state_dict) model.eval() # Preprocessing transforms transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.CenterCrop((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) image = Image.open("screenshot.png").convert("RGB") tensor = transform(image).unsqueeze(0) with torch.no_grad(): logits = model(tensor) probs = torch.softmax(logits, dim=-1).squeeze().tolist() print(f"Benign: {probs[0]:.4f}") print(f"Phishing: {probs[1]:.4f}") ``` --- ## Training Configuration & Data Provenance - **Pretrained Backbone:** `ResNet-50` (ImageNet-1k initialized weights) - **Classification Head:** `Dropout(0.3) + Linear(2048, 2)` - **Dataset Composition (2,915 screenshots total):** - **Benign Pages (1,648):** 1,101 from Kaggle Webpage Phishing collection, 501 from CIRCL open dataset, 46 multi-path headless Chrome captures. - **Phishing Pages (1,267):** 515 from Kaggle, 444 captured via automated Headless Chrome from live OpenPhish feeds, 273 from CIRCL Luxembourg, 35 curated threat feeds. - **Split:** 70% Train (2,039) / 15% Validation (438) / 15% Test (438) - **Optimizer:** AdamW (learning rate = 1e-4, weight decay = 0.0001) - **Epochs:** 25 epochs with ReduceLROnPlateau scheduler --- ## Citation & Framework ```bibtex @article{devi2026ph5, title={Ph5: A Multimodal Framework for Cross-Modality Evasion-Resilient Phishing Detection in Multi-Vector Environments}, author={Ritu Devi Deepti Singh and Akash Sah}, journal={Journal of Computer & Mathematical Sciences / JCMM}, year={2026} } ```