A robust, research-grade pipeline for multi-class deepfake detection using deep learning. This project provides end-to-end tools for dataset construction, model training, evaluation, and explainability.
- Goal: Detect and classify images as Real, AI Generated, or AI Edited
- Approach: Modular pipeline with dataset building, preprocessing, training, evaluation, and explainability
- Production-grade pipeline across 20 source collections (77,865 images, 0.52% max class imbalance)
- Perceptual-hash deduplication to remove near-duplicates across sources
- Quality filtering by resolution, blur score, and format
- Cluster-based train/val/test splitting — prevents similar images leaking across splits
- Fully deterministic and reproducible (fixed seeds, locked configs)
- Audit reports with per-source statistics and compliance checks
DeepfakeDatasetgracefully skips missing class folders with a warning instead of crashing
- cuDNN auto-tuning (
benchmark=True) — eliminates ~3,600 redundantcudaFuncGetAttributescalls per step, delivering noticeably faster steps on fixed 224×224 inputs - AMP (Automatic Mixed Precision,
float16autocast +GradScaler) — ~1.5–2× faster conv/matmul on laptop tensor cores with half the memory bandwidth pressure torch.compilesupport (PyTorch ≥ 2.0) — fuses element-wise ops and removes redundant kernel launches; detected and enabled at runtime automaticallypersistent_workers=True+prefetch_factor=2— DataLoader workers survive between epochs (no respawn overhead) and pre-fetch 2 batches ahead so the GPU never idles waiting for data- Worker count 4 → 2 — prevents CPU thermal throttling on laptops where workers compete with the training process
zero_grad(set_to_none=True)— frees gradient memory entirely instead of writing zerosnon_blocking=Truetensor transfers — CPU-to-GPU overlap with computeReduceLROnPlateauscheduler — halves LR when val loss plateaus, stopping loss oscillation- Early stopping (
--early_stop_patience, default 5) — halts training when val acc stagnates - Bug fix: validation split previously used
train_transform(augmented); now correctly usesval_transform - Bug fix: default
--data_dircorrected todataset_builder/train(actual export path) pretrained=True→ResNet18_Weights.DEFAULT(removes deprecation warning)- PyTorch Profiler integration in epoch 1 to surface per-op CPU/CUDA bottlenecks
evaluate.py—--data_dirnow optional (defaults todataset_builder/test);classification_reportonly reports classes actually present in the data (no crash on partial splits)plot_confusion_matrix.py— default paths fixed to be relative to the script file; dynamic n-class axis rendering so the plot works with 1, 2, or 3 classes
@st.cache_resourcemodel loader — model is loaded once per session and reused; no reload on every widget interaction- ✂️ Interactive crop panel — drag-to-crop before analysis using
streamlit-cropper; supports Free / 1:1 / 4:3 / 16:9 / 3:4 aspect ratios - Grad-CAM tabbed panel with three views: overlay, side-by-side comparison (original | raw heatmap | overlay), and raw grayscale activation map; each tab has a download button
- All-class Grad-CAM expander — renders heatmaps for all three classes side-by-side in one click
- Per-class confidence progress bars — visual breakdown of all three class probabilities
use_container_widthreplaces deprecateduse_column_widththroughout- Bug fix: double
.unsqueeze(0)removed —preprocess_imagealready returns[1,C,H,W]
torch.compilecheckpoint compatibility — automatically strips the_orig_mod.key prefix that compiled models add, so compiled checkpoints load cleanlystrict=Trueloading — weight mismatches now surface as a clear error instead of silently training from a partially-initialized model- Auto-detects last Conv2d layer; supports manual
target_layeroverride - Hook cleanup (
cam.cleanup()) prevents memory leaks across multiple calls overlay_heatmapsupports OpenCV (fast, ~2–5 ms) or matplotlib (quality, ~10–20 ms) backends with auto-detection
deepfake-project/
│
├── README.md # This file
├── DATASET.md # Dataset design specification
├── requirements.txt # Python dependencies
│
├── dataset_builder/ # Production dataset pipeline — also contains the built dataset
│ ├── main.py # Pipeline orchestrator
│ ├── pipeline.py # Pipeline logic
│ ├── train/ # Built dataset — train split (~31,146 images)
│ ├── val/ # Built dataset — val split (~23,360 images)
│ ├── test/ # Built dataset — test split (~23,359 images)
│ ├── config/ # Per-source pipeline configs (20 sources)
│ ├── scripts/ # Download scripts for each source
│ ├── modules/ # Pipeline modules (indexer, validator, deduplicator, …)
│ └── output/ # Pipeline artifacts and manifests
│
├── scripts/ # Training and evaluation scripts
│ ├── preprocessing/
│ │ ├── preprocessing.py
│ │ └── visualize_augmentations.py
│ ├── dataloader/
│ │ ├── dataset.py
│ │ └── dataset_loader.py
│ ├── training/
│ │ ├── train_baseline.py
│ │ ├── train_full.py
│ │ └── train_config.yaml
│ ├── evaluation/
│ │ ├── evaluate.py
│ │ ├── evaluation_matrices.py
│ │ └── plot_confusion_matrix.py
│ └── data/
│ ├── clean_dataset.py
│ ├── split_data.py
│ └── dataset_stats.py
│
├── frontend/ # Streamlit UI
│ ├── app.py # Main UI application
│ ├── config.py # UI configuration
│ ├── inference.py # Inference utilities
│ └── gradcam.py # Grad-CAM implementation
│
├── models/ # Saved model checkpoints
├── logs/ # Training logs
└── results/ # Evaluation outputs and plots
pip install -r requirements.txtThe dataset is fully constructed in dataset_builder/train/, dataset_builder/val/, and dataset_builder/test/.
See DATASET.md for the full breakdown (77,865 images, 0.52% max class imbalance) and
dataset_builder/README.md for pipeline documentation.
Note: Dataset images are excluded from git (see
.gitignore). Model checkpoints and results are also local-only. Re-train using the commands below or download a checkpoint separately.
Baseline training (fast, no extras):
python scripts/training/train_baseline.py
# defaults: --data_dir dataset_builder/train --epochs 5 --batch_size 32Full training (AMP, TensorBoard, Grad-CAM profiling, early stopping):
python scripts/training/train_full.py
# defaults: --data_dir dataset_builder/train --val_dir dataset_builder/val
# or use a config file:
python scripts/training/train_full.py --config scripts/training/train_config.yamlCheckpoints are saved to models/<run_id>/, plots and metrics to results/<run_id>/.
python scripts/evaluation/evaluate.py \
--model_path models/<run_id>/best_resnet18.pth
# --data_dir defaults to dataset_builder/testThen plot the confusion matrix:
python scripts/evaluation/plot_confusion_matrix.py
# reads results/y_true.npy + results/y_pred.npy written by evaluate.pystreamlit run frontend/app.pyWorkflow:
- Upload any JPG / PNG / WEBP image
- Click 🔎 Analyse — classification + confidence bars appear
- Explore the Grad-CAM panel (overlay / side-by-side / raw heatmap tabs)
- Optionally enable ✂️ Crop in the sidebar first to focus on a region
python demo_gradcam.py \
--model models/<run_id>/best_resnet18.pth \
--image path/to/image.jpg \
--output_dir results/gradcam| Class | Precision | Recall | F1 |
|---|---|---|---|
| Real | 0.7653 | 0.7523 | 0.7588 |
| AI Generated | 0.9100 | 0.9320 | 0.9209 |
| AI Edited | 0.8032 | 0.7975 | 0.8004 |
| Overall accuracy | 82.73% |
Evaluated on the held-out test set (23,341 images, balanced across classes). The main confusion is Real ↔ AI Edited — 69% of all errors fall on that boundary.
The dataset_builder/ module was used to construct the dataset from 20 source collections.
The build is complete — exports are in dataset_builder/train/, val/, test/.
| Class | Count | Sources |
|---|---|---|
| Real | 26,000 | FFHQ, COCO, Open Images, COCO Test, Places365 |
| AI Generated | 26,000 | Synthbuster, SD 1.x, FLUX.1, StyleGAN, MJ/DALL·E + 4 top-up batches |
| AI Edited | 25,865 | DEFACTO, DEFACTO Inpainting, OpenForensics, FaceForensics++, CASIA, IMD2020 |
| Total | 77,865 | 20 artifact sources, 0.52% max imbalance |
- ✅ Automated sampling with configurable quotas per source
- ✅ Deduplication using perceptual hashing (pHash) to remove near-duplicates
- ✅ Quality filtering based on resolution, blur, and metadata
- ✅ Cluster-based splitting prevents similar images from leaking across train/test
- ✅ Deterministic and reproducible with fixed random seeds
- ✅ Audit reports with comprehensive statistics and compliance checks
- Indexing: Scan all source directories and create a master index
- Validation: Verify image integrity, resolution, and format
- Deduplication: Remove duplicates using pHash similarity
- Quality Filtering: Filter by resolution, blur score, and other metrics
- Sampling: Select exact quotas per source and balance classes
- Cluster-Based Split: Create train/val/test splits using similarity clustering
- Export: Copy selected files to final dataset structure
- Audit: Generate compliance reports and statistics
Each source has its own config in dataset_builder/config/. Example structure:
random_seed: 42
artifacts_dir: output/artifacts
export_root: . # exports directly into dataset_builder/
image_rules:
min_width: 256
min_height: 256
class_targets:
real: 5000 # per-source quota
split_ratios:
train: 0.7
val: 0.15
test: 0.15cd dataset_builder
python main.py --config config/<source>_config.yaml [--dry-run] [--log-level INFO]Dry-run mode simulates the pipeline without writing files.
If you already have a small, organized dataset, you can use the legacy scripts in scripts/data/:
-
Clean corrupted images:
python scripts/data/clean_dataset.py --data_dir data
-
Split into train/val:
python scripts/data/split_data.py --data_dir data --test_size 0.2
-
View dataset statistics:
python scripts/data/dataset_stats.py --data_dir data
Note: For large-scale dataset construction from multiple sources, use the dataset_builder pipeline instead.
The scripts/preprocessing/preprocessing.py module provides:
- Resize to 224×224
- RGB conversion
- Normalization (ImageNet stats)
- Augmentations: horizontal flip, rotation, brightness/contrast adjustment, JPEG compression simulation
Usage:
from scripts.preprocessing.preprocessing import train_transform, val_transform
# For training
transformed = train_transform(image=image)["image"]
# For validation/testing
transformed = val_transform(image=image)["image"]Visualize augmentations:
python scripts/preprocessing/visualize_augmentations.py --image_path data/real/sample.jpg- Real: 0
- AI Generated: 1
- AI Edited: 2
Fast, self-contained training run with all performance optimisations:
python scripts/training/train_baseline.py
# defaults: --data_dir dataset_builder/train --epochs 5 --batch_size 32Features:
- ResNet18 pretrained backbone (
ResNet18_Weights.DEFAULT) - AMP (float16 autocast + GradScaler)
torch.compile(PyTorch ≥ 2.0, auto-detected)ReduceLROnPlateauLR scheduler- Early stopping (
--early_stop_patience) - cuDNN auto-tuning, persistent DataLoader workers, prefetch
- Correct val transform (no augmentations on validation)
- Best model checkpointing, per-epoch console summary
Full-featured training with experiment tracking:
python scripts/training/train_full.py
# or with config:
python scripts/training/train_full.py --config scripts/training/train_config.yamlFeatures:
- All baseline optimisations (AMP, cuDNN benchmark, compile, persistent workers)
- YAML config support
- TensorBoard logging (loss, accuracy, LR, GPU/CPU resource metrics)
- PyTorch Profiler on epoch 1 — surfaces CPU/CUDA bottlenecks automatically
ReduceLROnPlateauscheduler + early stopping- Per-epoch checkpoint saving + best model tracking
- F1 macro, per-class F1 logged every epoch
- Training/validation loss and accuracy curves saved as PNGs
Monitor with TensorBoard:
tensorboard --logdir results/tensorboard/Adjust batch_size and num_workers based on your hardware:
| Hardware | Batch Size | Epochs | Workers | VRAM |
|---|---|---|---|---|
| Entry-level (Integrated GPU, 8GB RAM) | 8-16 | 10-15 | 1 | <2GB |
| Mid-range (GTX 1650/3050, 16GB RAM) | 16-32 | 15-20 | 2 | 4GB |
| High-end (RTX 4060/4070, 16GB+ RAM) | 64 | 30+ | 2-4 | 8GB+ |
Monitor GPU usage:
watch -n 1 nvidia-smiMonitor CPU/RAM:
htoppython scripts/evaluation/evaluate.py \
--model_path models/best_resnet18.pth \
--data_dir dataset_builderMetrics computed:
- Accuracy (overall and per-class)
- Precision, Recall, F1-score
- Confusion matrix
- Classification report
python scripts/evaluation/plot_confusion_matrix.py \
--y_true_path results/y_true.npy \
--y_pred_path results/y_pred.npyGenerate Grad-CAM heatmaps to understand model decisions:
Via Streamlit UI:
streamlit run frontend/app.pyUpload an image and click "Analyze" to see prediction + heatmap overlay.
Programmatic usage:
from frontend.gradcam import GradCAM, overlay_heatmap
from frontend.inference import load_model, preprocess_image
from PIL import Image
model = load_model("models/best_resnet18.pth")
cam = GradCAM(model)
image = Image.open("sample.jpg")
tensor = preprocess_image(image)
heatmap = cam(tensor, class_idx=1)
overlay = overlay_heatmap(image, heatmap, alpha=0.5)
overlay.save("heatmap_output.png")Interactive web interface for inference and visualization:
streamlit run frontend/app.pyFeatures:
- Image upload (JPG, PNG, WEBP) with size validation
- ✂️ Interactive crop panel — drag-to-crop before analysis (Free / 1:1 / 4:3 / 16:9 / 3:4 aspect ratios); toggle via sidebar
- Real-time inference with a large prediction badge (🟢 Real / 🔴 AI Generated / 🟠 AI Edited)
- Per-class confidence progress bars for all three classes
- Grad-CAM tabbed panel:
- 🌡️ Overlay tab — heatmap blended onto the image + download button
- 📊 Side-by-side comparison tab — original | raw heatmap | overlay in one image
- 🗺️ Raw heatmap tab — grayscale activation map
- All-class Grad-CAM expander — renders heatmaps for all three classes side-by-side
- Sidebar controls: model checkpoint path, GPU toggle, target class, colormap (jet/viridis/hot/plasma), opacity slider
- Model cached with
@st.cache_resource— loads once per session
Configuration:
Edit frontend/config.py to set default model path. The default points to the trained checkpoint: models/run_20260307_063053/best_resnet18.pth.
- ✅ Use config files for all experiments (YAML)
- ✅ Set random seeds for reproducibility:
random.seed(42) np.random.seed(42) torch.manual_seed(42) torch.cuda.manual_seed_all(42) torch.backends.cudnn.deterministic = True
- ✅ Track experiments with TensorBoard or MLflow
- ✅ Version datasets and models
- ✅ Document hyperparameters in logs
All scripts output logs to:
- Console (stdout)
logs/directory- TensorBoard (for training)
dataset_builder/output/pipeline.log(for dataset construction)
- Implement model in
scripts/training/ - Update
train_baseline.pyortrain_full.py - Ensure label mapping: Real=0, AI Generated=1, AI Edited=2
- Download source data into
data_sources/<class>/<SourceName>/ - Create a new config in
dataset_builder/config/<source>_config.yaml - Run:
cd dataset_builder && python main.py --config config/<source>_config.yaml - Verify output in
dataset_builder/train/,val/,test/
Important: Always use a fresh artifacts_dir subdirectory per source to avoid double-counting during re-runs.
Edit scripts/preprocessing/preprocessing.py to add Albumentations transforms.
- DATASET.md — Dataset design specification and sampling strategy
- dataset_builder/README.md — Complete pipeline documentation
- scripts/data/README.md — Legacy data utilities
- scripts/dataloader/README.md — PyTorch dataset and dataloader
- scripts/training/README.md — Training documentation
- scripts/evaluation/README.md — Evaluation metrics
- scripts/preprocessing/README.md — Preprocessing and augmentation
1. CUDA Out of Memory
- Reduce
--batch_size(try 16 from 32) - Use
torch.cuda.empty_cache()between runs - Monitor with
nvidia-smi
2. Import Errors (ModuleNotFoundError)
- Always run from the project root (
deepfake-project/) - Check that
frontend/__init__.pyexists - Verify
sys.pathincludes project root in scripts
3. FileNotFoundError on dataset paths
- The correct paths are
dataset_builder/train,dataset_builder/val,dataset_builder/test— notdata/ - All training/evaluation scripts now default to these paths automatically
4. Port 8501 already in use (Streamlit)
kill $(lsof -ti:8501)5. Model checkpoint fails to load
- If you saved a model with
torch.compileenabled, the state dict keys are prefixed with_orig_mod.—inference.pystrips this automatically - Ensure you pass the full path including the run subfolder:
models/run_<id>/best_resnet18.pth
6. Slow Training / CPU thermal throttling
num_workersis set to 2 by default for laptop use — don't increase above the number of physical corescudnn.benchmark=Trueis set — first batch of epoch 1 is slower while cuDNN tunes; subsequent steps are fasttorch.compileadds a one-time compilation cost on the first forward pass (~30–60 s) — normal behaviour
7. Low Accuracy
- Real ↔ AI Edited confusion accounts for 69% of errors in the baseline — use weighted loss (
CrossEntropyLoss(weight=...)) to focus on that boundary - Try a larger backbone (ResNet50, EfficientNet-B3) for +2–4% F1 on hard classes
- Add label smoothing:
CrossEntropyLoss(label_smoothing=0.1)
- Albumentations: https://albumentations.ai/
- PyTorch: https://pytorch.org/
- Streamlit: https://streamlit.io/
- TensorBoard: https://www.tensorflow.org/tensorboard
- Grad-CAM Paper: https://arxiv.org/abs/1610.02391
- COCO Dataset: https://cocodataset.org/
- ImageNet: https://www.image-net.org/
- FaceForensics++: https://github.com/ondyari/FaceForensics
This project was developed collaboratively:
- Data Collection & Organization: Dataset sourcing and curation
- Data Cleaning & Preprocessing: Image validation and augmentation pipeline
- Dataset Builder: Production-grade pipeline architecture
- Model Training: Baseline and advanced training implementations
- Evaluation & Explainability: Metrics, visualization, and Grad-CAM
See LICENSE file for details.
- Project Overview
- Directory Structure
- Data Preparation
- Preprocessing
- Dataset Loading
- Model Training
- Evaluation
- Explainability
- Experiment Tracking & Reproducibility
- Example Workflow
- Best Practices
- Contributors & Roles
- References
- Goal: Detect and classify images as Real, AI Generated, or AI Edited.
- Approach: End-to-end pipeline with data cleaning, augmentation, PyTorch dataset, ResNet18 baseline, advanced training, evaluation, and explainability.
- Research-Grade: Modular, reproducible, and supports experiment tracking.
project-root/
│
├── data/
│ ├── real/
│ ├── ai_generated/
│ └── ai_edited/
│
├── models/ # Saved model checkpoints
├── results/ # Plots, logs, TensorBoard
├── scripts/
│ ├── data/ # Cleaning, splitting, stats
│ ├── preprocessing/ # Augmentations, normalization
│ ├── dataloader/ # Dataset, DataLoader
│ ├── training/ # Baseline & advanced training
│ ├── evaluation/ # Metrics, confusion matrix
│ └── explainability/ # Grad-CAM, heatmaps
│
├── requirements.txt
├── README.md
├── PROJECT_DOCUMENTATION.md
- Folders:
dataset_builder/train/,dataset_builder/val/,dataset_builder/test/
- Scripts:
scripts/data/clean_dataset.py: Removes corrupted images.scripts/data/split_data.py: Splits into train/val sets.scripts/data/dataset_stats.py: Reports image counts per class.
- Best Practices:
- Use diverse sources (COCO, ImageNet, GANs, FaceForensics++).
- Document sources and quality in a dataset report.
- Script:
scripts/preprocessing/preprocessing.py - Transforms:
- Resize to 224x224
- Convert to RGB
- Normalize pixel values
- Augmentations: horizontal flip, rotation, brightness/contrast, compression
- Library: Albumentations
- Usage:
- Import
train_transformandval_transformin dataset or training scripts.
- Import
- Scripts:
scripts/dataloader/dataset.py: Custom PyTorchDatasetwith label mapping (real=0, ai_generated=1, ai_edited=2)scripts/dataloader/dataset_loader.py: Train/val split, DataLoader creation, stats
- Features:
- Batch loading, shuffling, reproducible splits
- Dataset statistics reporting
- Scripts:
scripts/training/train_baseline.py: Minimal, research-grade baseline (ResNet18, validation, best model saving, CLI args, reproducibility)scripts/training/train_full.py: Advanced (config-driven, TensorBoard, checkpoints, plots, learning rate scheduling, experiment tracking)
- Features:
- Device selection (CPU/GPU)
- Hyperparameter tuning (CLI/config)
- Early stopping/checkpoints (in advanced script)
- Logging: loss, accuracy, validation metrics
- Reproducibility: random seed setting
- Outputs:
- Best model:
models/best_resnet18.pth - Checkpoints:
models/resnet18_epoch{N}.pth - Plots:
results/loss_curve.png,results/accuracy_curve.png - TensorBoard logs:
results/tensorboard/
- Best model:
- Scripts:
scripts/evaluation/evaluate.py: Accuracy, precision, recall, F1, confusion matrixscripts/evaluation/evaluation_matrices.py: Additional metricsscripts/evaluation/plot_confusion_matrix.py: Visualization
- Usage:
- Run after training to assess model performance
- Save and analyze misclassified images for error analysis
- Script:
scripts/explainability/grad_cam.py - Function:
- Generates Grad-CAM heatmaps for model interpretability
- Visualizes model attention on input images
- Usage:
- Run after training to generate heatmaps for selected images
- TensorBoard: Integrated in advanced training for live metrics and comparison
- Config Files: YAML config for all experiment settings
- Random Seeds: Set for torch, numpy, random, cudnn
- Best Practices:
- Log all hyperparameters and environment details
- Use version control for code and configs
- Clean and preprocess the dataset:
python scripts/data/clean_dataset.py python scripts/data/split_data.py python scripts/data/dataset_stats.py
- Train a model:
python scripts/training/train_baseline.py --data_dir dataset_builder --epochs 5 # or advanced python scripts/training/train_full.py --config scripts/training/train_config.yaml - Evaluate:
python scripts/evaluation/evaluate.py --model_path models/best_resnet18.pth
- Visualize explainability:
python scripts/explainability/grad_cam.py --model_path models/best_resnet18.pth --image_path dataset_builder/test/real/example.jpg
- Monitor with TensorBoard:
tensorboard --logdir results/tensorboard/
- Use config files for reproducible experiments
- Track all runs with TensorBoard or MLflow
- Save and document all model checkpoints and results
- Analyze misclassifications and feature embeddings
- Keep code modular and well-documented
To ensure stable training and avoid system crashes or overheating, use the following recommended configurations based on your laptop/PC specs. Adjust batch_size and epochs in scripts/training/train_config.yaml or via CLI as needed.
batch_size: 8-16epochs: 10-15num_workers: 1pin_memory: False- Use
train_baseline.pyfor best stability.
batch_size: 16-32epochs: 15-20num_workers: 2pin_memory: True- Use
train_full.pywith moderate settings.
batch_size: 64epochs: 30num_workers: 2-4pin_memory: True- Enable mixed precision for faster training (ask for help if needed).
Tip: If you get CUDA out-of-memory errors, reduce batch_size and restart training. Monitor system temperature and usage with nvidia-smi and system tools.
To ensure your system is running efficiently and not overheating during training, monitor your hardware usage:
- Command:
watch -n 1 nvidia-smi
- Shows GPU utilization, memory usage, temperature, and running processes.
- If GPU memory is nearly full or temperature is high (>80°C), reduce batch size or pause training.
- Command:
htop
- Shows CPU core usage, RAM usage, and running processes in real time.
- Install with
sudo apt install htopif not present.
Tip: Always monitor your system during the first few epochs of a new experiment, especially with new batch sizes or model changes.
- Data Collection: Person 1
- Data Cleaning/Preprocessing: Person 2
- Dataset Loader: Person 3
- Model Training: Person 4
- Evaluation/Explainability: Person 5
This repository provides tools, scripts, and pipelines for building, training, and evaluating deepfake detection models.
dataset_builder/: Production-grade, deterministic dataset builder pipeline (see detailed docs)models/: Model architectures and training scriptsscripts/: Data processing, evaluation, and utility scriptsdata/: Raw and processed data directoriesresults/: Experiment outputs and results
The dataset_builder module provides a robust, auditable, and fully automated pipeline for constructing machine learning datasets for deepfake detection. It supports:
- Modular, deterministic, and config-driven stages
- Strong error handling and compliance validation
- Dry-run and strict mode for safe experimentation
- Structured logging and reporting
See dataset_builder/README.md for full usage, configuration, and artifact details.
- Prepare your dataset and config YAML (see
dataset_builder/README.md). - Run the dataset builder:
cd dataset_builder python main.py --config path/to/config.yaml - Train and evaluate models using scripts in
models/andscripts/.
- Python 3.8+
- See
requirements.txtfor dependencies
- Dataset Builder Pipeline
- Project Documentation
See LICENSE file.