--- language: en license: apache-2.0 library_name: keras tags: - image-classification - tensorflow - efficientnet - computer-vision - cats-vs-dogs metrics: - accuracy - auc - precision - recall - f1 pipeline_tag: image-classification --- # Pet Classification with EfficientNetB0 This repository contains a high-performance deep learning model designed to classify images into two categories: **Cats** and **Dogs**. The model leverages the **EfficientNetB0** architecture, utilizing Transfer Learning and specialized Fine-Tuning to achieve professional-grade metrics. ## Model Performance Evaluated on a balanced test set of **5,000 images**, the model demonstrates exceptional stability and discriminative power: | Metric | Score | | :--- | :--- | | **Test Accuracy** | **97.48%** | | **AUC Score** | **0.9974** | | **Precision** | **96.77%** | | **Recall** | **0.9824** | | **F1-Score** | **0.9750** | ### Confusion Matrix Highlights * **Total Correct:** 4,874 / 5,000 images. * **Sensitivity:** High recall for 'Dog' class (0.9824), ensuring minimal false negatives. * **Confidence:** Average Loss of **0.0651**, indicating high certainty in classifications. ## Architecture & Training Strategy The model uses a multi-stage training pipeline to maximize the features learned from the ImageNet-pre-trained EfficientNetB0 base. ### 1. Model Structure * **Base:** EfficientNetB0 (Functional) * **Pooling:** GlobalAveragePooling2D * **Normalization:** BatchNormalization for training stability. * **Dense Layers:** 256 units (ReLU) followed by a 2-unit Softmax output. * **Regularization:** Dropout (0.4) to ensure high generalization and prevent overfitting. ### 2. Training Phases * **Phase 1 (Transfer Learning):** The base model was frozen, and only the custom classification head was trained (Learning Rate: 1e-3). * **Phase 2 (Fine-Tuning):** The top 40 layers of the EfficientNet base were unfrozen and trained with a reduced learning rate (1e-4) to refine high-level feature detection. ## How to Use To use this model locally with the `.keras` file: ```python import tensorflow as tf from tensorflow.keras.applications.efficientnet import preprocess_input import cv2 import numpy as np # Load model model = tf.keras.models.load_model('efficientnetb0_pet_classifier_finetuned.keras') def predict(img_path): img = cv2.imread(img_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, (224, 224)) img = preprocess_input(np.expand_dims(img, axis=0)) preds = model.predict(img) return "Dog" if np.argmax(preds) == 1 else "Cat"