|
--- |
|
library_name: keras |
|
tags: |
|
- image-classification |
|
- spam-detectio |
|
metrics: |
|
- accuracy |
|
base_model: |
|
- keras-io/VGG19 |
|
--- |
|
|
|
# Image Spam Detection with VGG19 |
|
|
|
This is a model for detecting spam in images using transfer learning, with a VGG19 base model fine-tuned on the [Image Spam Hunter Dataset](https://example-dataset-link.com). |
|
|
|
--- |
|
|
|
## Model Description |
|
|
|
This model is built for binary classification, detecting whether an image is spam or not. The VGG19 architecture was used as the base model for transfer learning, leveraging pre-trained weights from ImageNet. The final layers were customised to include a GlobalAveragePooling layer, followed by fully connected layers, and a softmax activation for classification. |
|
|
|
- **Base Model**: VGG19 |
|
- **Task**: Binary classification (Spam / Not Spam) |
|
- **Framework**: Keras (TensorFlow backend) |
|
|
|
--- |
|
|
|
## Training and Evaluation Data |
|
|
|
### Dataset |
|
|
|
The model was trained and evaluated on the **Image Spam Hunter Dataset**, a publicly available dataset that contains spam and non-spam images: |
|
- **Training set**: 1731 images |
|
- **Validation set**: 1385 images |
|
|
|
You can find more about the dataset [here](https://users.cs.northwestern.edu/~yga751/ML/). |
|
|
|
--- |
|
|
|
## Training Procedure |
|
|
|
### Preprocessing |
|
- Images were resized to 256x256. |
|
- Normalisation was applied to scale pixel values between 0 and 1. |
|
|
|
### Optimizer |
|
- **Optimizer**: Adam |
|
- **Learning Rate**: 0.001 |
|
|
|
### Training Parameters |
|
- **Batch Size**: 128 |
|
- **Epochs**: 26 (early stopping) |
|
|
|
### Loss Function |
|
- Binary Cross-Entropy Loss |
|
|
|
### Augmentations |
|
- Random augmentation using Keras CV RandAugment layer. |
|
|
|
--- |
|
|
|
## Training Metrics |
|
|
|
Below is a summary of the model's performance over the training process: |
|
|
|
| | FN | FP | TN | TP | accuracy | loss | val_FN | val_FP | val_TN | val_TP | val_accuracy | val_loss | |
|
|---:|-----:|-----:|-----:|-----:|-----------:|----------:|---------:|---------:|---------:|---------:|---------------:|-----------:| |
|
| 0 | 187 | 140 | 499 | 559 | 0.763899 | 1.93435 | 19 | 2 | 169 | 156 | 0.939306 | 0.378412 | |
|
| 1 | 16 | 35 | 604 | 730 | 0.963177 | 0.242954 | 6 | 3 | 168 | 169 | 0.973988 | 0.186523 | |
|
| 2 | 29 | 19 | 620 | 717 | 0.965343 | 0.174301 | 3 | 12 | 159 | 172 | 0.956647 | 0.149353 | |
|
| 3 | 17 | 26 | 613 | 729 | 0.968953 | 0.116907 | 3 | 7 | 164 | 172 | 0.971098 | 0.0973678 | |
|
| 4 | 14 | 17 | 622 | 732 | 0.977617 | 0.0807728 | 2 | 12 | 159 | 173 | 0.959538 | 0.0991694 | |
|
| 5 | 13 | 18 | 621 | 733 | 0.977617 | 0.0713564 | 3 | 6 | 165 | 172 | 0.973988 | 0.0604228 | |
|
| 6 | 10 | 17 | 622 | 736 | 0.980505 | 0.0604733 | 3 | 5 | 166 | 172 | 0.976879 | 0.0584633 | |
|
| 7 | 9 | 13 | 626 | 737 | 0.984116 | 0.0478682 | 4 | 4 | 167 | 171 | 0.976879 | 0.0745383 | |
|
| 8 | 5 | 13 | 626 | 741 | 0.987004 | 0.0376507 | 3 | 7 | 164 | 172 | 0.971098 | 0.0773135 | |
|
| 9 | 7 | 6 | 633 | 739 | 0.990614 | 0.0248621 | 3 | 2 | 169 | 172 | 0.985549 | 0.0628484 | |
|
| 10 | 7 | 10 | 629 | 739 | 0.987726 | 0.0298408 | 2 | 2 | 169 | 173 | 0.988439 | 0.0531744 | |
|
| 11 | 4 | 10 | 629 | 742 | 0.989892 | 0.0242986 | 3 | 2 | 169 | 172 | 0.985549 | 0.0675473 | |
|
| 12 | 6 | 7 | 632 | 740 | 0.990614 | 0.0326418 | 2 | 3 | 168 | 173 | 0.985549 | 0.0671533 | |
|
| 13 | 6 | 9 | 630 | 740 | 0.98917 | 0.0279278 | 2 | 5 | 166 | 173 | 0.979769 | 0.06897 | |
|
| 14 | 7 | 7 | 632 | 739 | 0.989892 | 0.0244297 | 2 | 3 | 168 | 173 | 0.985549 | 0.0550619 | |
|
| 15 | 5 | 4 | 635 | 741 | 0.993502 | 0.0228877 | 3 | 2 | 169 | 172 | 0.985549 | 0.0558347 | |
|
| 16 | 4 | 10 | 629 | 742 | 0.989892 | 0.0277857 | 4 | 0 | 171 | 171 | 0.988439 | 0.0401906 | |
|
| 17 | 2 | 7 | 632 | 744 | 0.993502 | 0.0193213 | 9 | 1 | 170 | 166 | 0.971098 | 0.0959367 | |
|
| 18 | 7 | 3 | 636 | 739 | 0.99278 | 0.0151094 | 4 | 6 | 165 | 171 | 0.971098 | 0.0873069 | |
|
| 19 | 7 | 3 | 636 | 739 | 0.99278 | 0.017344 | 1 | 6 | 165 | 174 | 0.979769 | 0.0964724 | |
|
| 20 | 5 | 4 | 635 | 741 | 0.993502 | 0.024251 | 1 | 4 | 167 | 174 | 0.985549 | 0.0580115 | |
|
| 21 | 3 | 9 | 630 | 743 | 0.991336 | 0.0207464 | 1 | 3 | 168 | 174 | 0.988439 | 0.0510422 | |
|
| 22 | 2 | 6 | 633 | 744 | 0.994224 | 0.0122992 | 1 | 1 | 170 | 174 | 0.99422 | 0.0439666 | |
|
| 23 | 3 | 2 | 637 | 743 | 0.99639 | 0.0105987 | 4 | 2 | 169 | 171 | 0.982659 | 0.0502425 | |
|
| 24 | 3 | 6 | 633 | 743 | 0.993502 | 0.0164827 | 6 | 1 | 170 | 169 | 0.979769 | 0.0865423 | |
|
| 25 | 5 | 7 | 632 | 741 | 0.991336 | 0.0245302 | 6 | 3 | 168 | 169 | 0.973988 | 0.0918282 | |
|
| 26 | 9 | 8 | 631 | 737 | 0.987726 | 0.0296158 | 5 | 1 | 170 | 170 | 0.982659 | 0.0991676 | |
|
|
|
--- |
|
|
|
## Model Plot |
|
|
|
The model architecture can be visualised in the image below: |
|
|
|
 |
|
|
|
--- |
|
|
|
## Validation Accuracy |
|
|
|
The final validation accuracy achieved by the model was **98%**. |
|
|
|
--- |
|
|
|
## How to Use the Model |
|
|
|
### Loading the Model |
|
|
|
To load this model in your application, use the following: |
|
|
|
```python |
|
from tensorflow.keras.models import load_model |
|
model = load_model("path/to/saved_model") |