Skip to main content

Train custom bird species classifiers from video footage

Project description

๐Ÿฆ Vogel Model Trainer

Languages: ๐Ÿ‡ฌ๐Ÿ‡ง English | ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch

PyPI version Python Versions License: MIT PyPI Status Downloads

Train custom bird species classifiers from your own video footage using YOLOv8 and EfficientNet.

A specialized toolkit for creating high-accuracy bird species classifiers tailored to your specific monitoring setup. Extract training data from videos, organize datasets, and train custom models with >96% accuracy.


โœจ Features

  • ๐ŸŽฏ YOLO-based Bird Detection - Automated bird cropping from videos using YOLOv8
  • ๐Ÿค– Three Extraction Modes - Manual labeling, auto-sorting, or standard extraction
  • ๐Ÿ“ Wildcard Support - Batch process multiple videos with glob patterns
  • ๐Ÿ–ผ๏ธ Auto-Resize to 224x224 - Optimal image size for training
  • ๐Ÿง  EfficientNet-B0 Training - Lightweight yet powerful classification model
  • ๐ŸŽจ Enhanced Data Augmentation - Rotation, affine transforms, color jitter, gaussian blur
  • ๐Ÿ“Š Optimized Training - Cosine LR scheduling, label smoothing, early stopping
  • โธ๏ธ Graceful Shutdown - Save model state on Ctrl+C interruption
  • ๐Ÿ”„ Iterative Training - Use trained models to expand your dataset
  • ๐Ÿ“ˆ Per-Species Metrics - Detailed accuracy breakdown by species

๐Ÿš€ Quick Start

Installation

# Install from PyPI
pip install vogel-model-trainer

# Or install from source
git clone https://github.com/kamera-linux/vogel-model-trainer.git
cd vogel-model-trainer
pip install -e .

Basic Workflow

# 1. Extract bird images from videos
vogel-trainer extract video.mp4 --folder ~/training-data/ --bird kohlmeise

# 2. Organize into train/validation split
vogel-trainer organize ~/training-data/ -o ~/organized-data/

# 3. Train custom classifier
vogel-trainer train ~/organized-data/ -o ~/models/my-classifier/

# 4. Test the trained model
vogel-trainer test ~/models/my-classifier/ -d ~/organized-data/

๐Ÿ“– Usage Guide

1. Extract Training Images

Manual Mode (Recommended for Initial Collection)

When you know the species in your video:

vogel-trainer extract ~/Videos/great-tit.mp4 \
  --folder ~/training-data/ \
  --bird great-tit \
  --threshold 0.5 \
  --sample-rate 3

Auto-Sort Mode (For Iterative Training)

Use an existing model to automatically classify and sort:

vogel-trainer extract ~/Videos/mixed.mp4 \
  --folder ~/training-data/ \
  --species-model ~/models/classifier/final/ \
  --threshold 0.5

Batch Processing with Wildcards

# Process all videos in a directory
vogel-trainer extract "~/Videos/*.mp4" --folder ~/data/ --bird blue-tit

# Recursive directory search
vogel-trainer extract ~/Videos/ \
  --folder ~/data/ \
  --bird amsel \
  --recursive

Parameters:

  • --folder: Base directory for extracted images (required)
  • --bird: Manual species label (creates subdirectory)
  • --species-model: Path to trained model for auto-classification
  • --threshold: YOLO confidence threshold (default: 0.5)
  • --sample-rate: Process every Nth frame (default: 3)
  • --detection-model: YOLO model path (default: yolov8n.pt)
  • --no-resize: Keep original image size (default: resize to 224x224)
  • --recursive, -r: Search directories recursively

2. Organize Dataset

vogel-trainer organize ~/training-data/ -o ~/organized-data/

Creates an 80/20 train/validation split:

organized/
โ”œโ”€โ”€ train/
โ”‚   โ”œโ”€โ”€ great-tit/
โ”‚   โ”œโ”€โ”€ blue-tit/
โ”‚   โ””โ”€โ”€ robin/
โ””โ”€โ”€ val/
    โ”œโ”€โ”€ great-tit/
    โ”œโ”€โ”€ blue-tit/
    โ””โ”€โ”€ robin/

3. Train Classifier

vogel-trainer train ~/organized-data/ -o ~/models/my-classifier/

Training Configuration:

  • Base Model: google/efficientnet-b0 (8.5M parameters)
  • Optimizer: AdamW with cosine LR schedule
  • Augmentation: Rotation, affine, color jitter, gaussian blur
  • Regularization: Weight decay 0.01, label smoothing 0.1
  • Early Stopping: Patience of 7 epochs

Output:

~/models/my-classifier/
โ”œโ”€โ”€ checkpoints/     # Intermediate checkpoints
โ”œโ”€โ”€ logs/           # TensorBoard logs
โ””โ”€โ”€ final/          # Final trained model
    โ”œโ”€โ”€ config.json
    โ”œโ”€โ”€ model.safetensors
    โ””โ”€โ”€ preprocessor_config.json

4. Test Model

# Test on validation dataset
vogel-trainer test ~/models/my-classifier/ -d ~/organized-data/

# Output:
# ๐Ÿงช Testing model on validation set...
#    ๐Ÿฆ Predicted: great-tit (98.5% confidence)

๐Ÿ”„ Iterative Training Workflow

Improve your model by iteratively expanding your dataset:

# 1. Initial training with manual labels
vogel-trainer extract ~/Videos/batch1/*.mp4 --bird great-tit --output ~/data/
vogel-trainer organize --source ~/data/ --output ~/data/organized/
vogel-trainer train --data ~/data/organized/ --output ~/models/v1/

# 2. Use trained model to extract more data
vogel-trainer extract ~/Videos/batch2/*.mp4 \
  --species-model ~/models/v1/final/ \
  --output ~/data/iteration2/

# 3. Review and correct misclassifications manually
# Move incorrect predictions to correct species folders

# 4. Combine datasets and retrain
cp -r ~/data/iteration2/* ~/data/
vogel-trainer organize --source ~/data/ --output ~/data/organized/
vogel-trainer train --data ~/data/organized/ --output ~/models/v2/

# Result: Higher accuracy! ๐ŸŽ‰

๐Ÿ“Š Performance & Best Practices

Dataset Size Recommendations

Quality Images per Species Expected Accuracy
Minimum 20-30 ~85-90%
Good 50-100 ~92-96%
Optimal 100+ >96%

Tips for Better Results

  1. Dataset Diversity

    • Include various lighting conditions
    • Capture different poses (side, front, back)
    • Cover different seasons (plumage changes)
  2. Class Balance

    • Aim for similar image counts per species
    • Avoid having one dominant class
  3. Quality Over Quantity

    • Use threshold 0.5-0.6 for clear detections
    • Manual review of auto-sorted images improves quality
  4. Monitor Training

    • Check per-class accuracy for weak species
    • Use confusion matrix to identify similar species
    • Add more data for low-performing classes

๐Ÿ”— Integration with vogel-video-analyzer

Use your trained model for species identification:

vogel-analyze --identify-species \
  --species-model ~/models/final/ \
  --species-threshold 0.3 \
  video.mp4

๐Ÿ› ๏ธ Development

# Clone repository
git clone https://github.com/kamera-linux/vogel-model-trainer.git
cd vogel-model-trainer

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest tests/

๐Ÿ“ License

MIT License - see LICENSE for details.


๐Ÿ™ Credits


๐Ÿ“ฎ Support & Contributing


Made with โค๏ธ for bird watching enthusiasts ๐Ÿฆ

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vogel_model_trainer-0.1.1.tar.gz (35.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vogel_model_trainer-0.1.1-py3-none-any.whl (22.9 kB view details)

Uploaded Python 3

File details

Details for the file vogel_model_trainer-0.1.1.tar.gz.

File metadata

  • Download URL: vogel_model_trainer-0.1.1.tar.gz
  • Upload date:
  • Size: 35.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for vogel_model_trainer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 9181681a3e49296ca650629822fba9d73d45832a5dd326a695f9613d4b891f3a
MD5 8d9f8c118c6007a6125fcb0e2c9f009c
BLAKE2b-256 b1bca5ef0ced84a2c39b9f43bdbf49d2b5b928fdd5f2ac6da8b663d04bed124a

See more details on using hashes here.

File details

Details for the file vogel_model_trainer-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for vogel_model_trainer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 07120ef7d6a394fee1589478510e9d6797378591c954547b7da850dec42e5f63
MD5 f719b742269f0c24408f71f7e3073e31
BLAKE2b-256 3dd63101f3e0f1cb1999a20e5f0a60c81f213bb3b0b1e96a320c3e5ca0515ab2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page