| --- |
| license: apache-2.0 |
| tags: |
| - ai-image-classifiction |
| - catboost |
| - xgboost |
| - auraface |
| - cnn |
| --- |
| # AI Image Classification Model |
|
|
| This repository contains two trained classifiers, **XGBoost** and **CatBoost**, for AI image classification. These models are trained to distinguish between AI-generated and real human faces using embeddings extracted from the **AuraFace** model. |
|
|
| ## Model Overview |
|
|
| - **AuraFace**: Used for extracting face embeddings from input images. |
| - **CatBoost & XGBoost**: Trained classifiers to predict if an image is AI-generated or real. |
| - **Dataset**: Trained using the [Real vs AI Generated Faces Dataset](https://www.kaggle.com/datasets/philosopher0808/real-vs-ai-generated-faces-dataset). |
| - **Preferred Model**: While both classifiers yield similar results, **CatBoost** is the preferred model. |
|
|
| ## Pipeline |
|
|
| 1. An image is passed to **AuraFace** to extract a 512-dimensional face embedding. |
| 2. The embedding is converted into a pandas DataFrame. |
| 3. The trained classifier (CatBoost/XGBoost) is used to make predictions. |
|
|
| ## Model Usage |
|
|
| ### Dependencies |
|
|
| ```bash |
| pip install opencv-python catboost xgboost pandas numpy pillow huggingface_hub |
| ``` |
|
|
| ### Loading AuraFace |
|
|
| ```python |
| from huggingface_hub import snapshot_download |
| from insightface.app import FaceAnalysis |
| import numpy as np |
| import cv2 |
| |
| # Download AuraFace model |
| snapshot_download( |
| "fal/AuraFace-v1", |
| local_dir="models/auraface", |
| ) |
| |
| # Initialize AuraFace |
| face_app = FaceAnalysis( |
| name="auraface", |
| providers=["CUDAExecutionProvider", "CPUExecutionProvider"], |
| root="." |
| ) |
| face_app.prepare(ctx_id=0, det_size=(640, 640)) |
| ``` |
|
|
| ### Loading CatBoost Model |
|
|
| ```python |
| from catboost import CatBoostClassifier |
| |
| # Load trained CatBoost model |
| ai_image_classifier = CatBoostClassifier() |
| ai_image_classifier.load_model('models/ai_image_classifier/cat_classifier.cbm') |
| ``` |
|
|
| ### Classifying an Image |
|
|
| ```python |
| def classify_image(image_path): |
| # Load image |
| img = Image.open(image_path).convert("RGB") |
| img_array = np.array(img)[:, :, ::-1] # Convert to BGR for processing |
| |
| # Detect faces and extract embedding |
| faces = face_app.get(img_array) |
| if not faces: |
| return "No face detected." |
| |
| embedding = faces[0].normed_embedding |
| |
| # Convert embedding to DataFrame |
| feature_columns = [f'feature_{i}' for i in range(512)] |
| embedding_df = pd.DataFrame([embedding], columns=feature_columns) |
| |
| # Predict class |
| prediction = ai_image_classifier.predict(embedding_df)[0] |
| return "AI-generated" if prediction == 1 else "Real Face" |
| |
| # Example Usage |
| image_path = "path/to/image.jpg" |
| result = classify_image(image_path) |
| print(f"Classification: {result}") |
| ``` |
|
|
| ### Using XGBoost |
|
|
| XGBoost follows the same process. To use XGBoost instead, replace the `CatBoostClassifier` loading step with: |
|
|
| ```python |
| from xgboost import XGBClassifier |
| |
| # Load trained XGBoost model |
| ai_image_classifier = XGBClassifier() |
| ai_image_classifier.load_model('models/ai_image_classifier/xgb_classifier.json') |
| ``` |
|
|
| ## Acknowledgments |
|
|
| - **[AuraFace-v1](https://huggingface.co/fal/AuraFace-v1)** for face embeddings. |
| - **[Real vs AI Generated Faces Dataset](https://www.kaggle.com/datasets/philosopher0808/real-vs-ai-generated-faces-dataset)** for training data. |