| | --- |
| | 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") |