A Siamese Neural Network-based person re-identification system comparing Triplet Loss vs Contrastive Loss.
Siemese_ATML/
├── data/ # Dataset
│ └── SNN-TL-Data/
│ ├── train/ # Training images
│ └── train.csv # Triplet annotations
├── models/ # Trained models
│ ├── triplet/ # Triplet Loss model
│ │ ├── best_model.pt
│ │ └── database.csv
│ └── contrastive/ # Contrastive Loss model
│ ├── best_model_contrastive.pt
│ └── database_contrastive.csv
├── outputs/ # Generated outputs
│ ├── training_history.png
│ ├── training_history_contrastive.png
│ ├── triplet_sample.png
│ └── results.png
├── src/ # Training scripts
│ ├── train_triplet.py
│ └── train_contrastive.py
├── archive/ # Legacy files
├── app.py # Streamlit web app
├── requirements.txt # Dependencies
└── README.md
pip install -r requirements.txtstreamlit run app.pyOpen http://localhost:8501 in your browser.
| Loss Function | Description | Model File |
|---|---|---|
| Triplet Loss | Uses anchor-positive-negative triplets | models/triplet/best_model.pt |
| Contrastive Loss | Uses positive-negative pairs | models/contrastive/best_model_contrastive.pt |
Both models use EfficientNet-B0 backbone with 512-dimensional embeddings.
python src/train_triplet.pypython src/train_contrastive.py- Model Selection: Switch between Triplet and Contrastive loss models
- Compare Mode: View results from both models side-by-side
- GPU Accelerated: Automatic CUDA support with mixed precision (AMP)
- Interactive UI: Upload images and find matching persons
Training parameters can be modified in src/train_*.py:
BATCH_SIZE: 64 (default)EPOCHS: 10LR: 0.001EARLY_STOP_PATIENCE: 3
MIT License