MedusAIModels (0.1.0)
Installation
pip install --index-url MedusAIModelsAbout this package
Python library for AI model operations including classification, detection, segmentation, keypoints, and video processing
MedusAIModels
MedusAIModels is a comprehensive Python library for AI model operations including classification, detection, segmentation, keypoints, and video processing. It provides a unified interface for training, inference, and evaluation of machine learning models across different computer vision tasks.
Features
- Multi-task Support: Classification, detection, segmentation, keypoints, and video processing
- Flexible Architecture: Easy to extend and customize for different use cases
- Professional Development: Modern tooling with Poetry, pytest, mypy, and comprehensive documentation
- Dataset Management: Support for various dataset formats including COCO, YOLO, and custom formats
- Model Registry: Organized model implementations with easy registration and discovery
- Training Pipeline: Comprehensive training processes with metrics and evaluation
- Type Safety: Fully typed with comprehensive type hints
Installation
Prerequisites
- Python: Version 3.10 or higher
- pip or Poetry: For dependency management and installation
Install via pip
pip install medusaimodels
Install via Poetry
poetry add medusaimodels
Development Installation
git clone https://github.com/MedusAI/MedusAIModels.git
cd MedusAIModels
poetry install
Quick Start
from medusaimodels import MedusAIModels
# Initialize for classification
client = MedusAIModels(model_type="classification", device="cuda")
# Load a model
result = client.load_model("path/to/model.pth")
# Train a model
training_result = client.train_model(
dataset_path="path/to/dataset",
epochs=10,
batch_size=32
)
# Make predictions
predictions = client.predict(input_data)
# Evaluate model
metrics = client.evaluate_model("path/to/test_dataset")
Supported Model Types
1. Classification
- Multi-class classification
- Multi-label classification
- Video classification
2. Detection
- Object detection with bounding boxes
- YOLO-based detection
- TorchVision detection models
3. Segmentation
- Instance segmentation
- Semantic segmentation
- Segmentation Models PyTorch integration
4. Keypoints
- Pose estimation
- Keypoint detection
- Human pose analysis
5. Video Processing
- Video classification
- Temporal analysis
- Action recognition
Dataset Structure Support
The library supports the dataset structures documented below:
- Classification: Multi-class and multi-label formats
- Detection: YOLO format with data.yaml configuration
- Segmentation: Instance and semantic segmentation formats
- Keypoints: COCO keypoint format
- Video: Video classification structure
Architecture
The library is organized into several key components:
src/medusaimodels/
├── impl/ # Implementation modules
├── interfaces/ # Abstract interfaces
├── process/ # Training and processing workflows
└── client.py # Main client interface
Implementation Modules (impl/)
- models/: Model implementations (classifiers, detectors, segmentors)
- datasets/: Dataset implementations for different tasks
- transforms/: Data transformation utilities
- metrics/: Evaluation metrics
Interfaces (interfaces/)
- models/: Abstract model interfaces
- data/: Data structure definitions
- dataset/: Dataset interface definitions
Process (process/)
- Train.py: Training pipeline implementation
- Dataloader.py: Data loading utilities
Development
Testing
# Run tests
poetry run pytest
# Run with coverage
poetry run pytest --cov=medusaimodels
# Run specific test file
poetry run pytest tests/test_client.py
Code Quality
# Format code
poetry run ruff format src tests
# Lint code
poetry run ruff check src tests
# Type checking
poetry run mypy src tests
Documentation
# Build documentation
poetry run sphinx-build docs docs/_build
# Serve documentation locally
poetry run sphinx-autobuild docs docs/_build
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For questions and support:
- Email: courriel@medusai.ca
- Documentation: https://MedusAIModels.readthedocs.io
- Issues: GitHub Issues
📁 Structure des Datasets pour le Service d'Entraînement
Ce projet repose sur plusieurs types de services d'entraînement liés à l'intelligence artificielle : classification, détection, estimation de keypoints et segmentation. Chaque tâche a une structure de dataset bien définie, facilitant l'entraînement des modèles.
0. Projet
Structure attendue :
projet/
│
├── train/
│ ├── donnée
│ ├── donnée
│
├── val
│ ├── donnée
│ ├── donnée
│
└── test/
│ ├── donnée
│ ├── donnée
1. Classification Multiclass
Structure attendue :
projet_classification_multiclasse/
│
├── train/
│ ├── classe_1/
│ │ ├── image_001.jpg
│ │ ├── image_002.jpg
│ │ └── ...
│ ├── classe_2/
│ │ ├── image_003.jpg
│ │ ├── image_004.jpg
│ │ └── ...
│ └── ...
│
├── val/
│ ├── classe_1/
│ │ ├── image_101.jpg
│ │ └── ...
│ ├── classe_2/
│ │ ├── image_103.jpg
│ │ └── ...
│ └── ...
│
└── test/
├── classe_1/
│ ├── image_201.jpg
│ └── ...
├── classe_2/
│ ├── image_203.jpg
│ └── ...
└── ...
Description : Chaque sous-dossier porte le nom d'une classe et contient les images associées. Une image appartient à une seule classe.
2. Classification Multilabel
Structure attendue :
projet_classification_multilabel/
│
├── train/
│ ├── images/
│ │ ├── image_001.jpg
│ │ ├── image_002.jpg
│ │ └── ...
│ │
│ └── labels/
│ ├── image_001.json
│ ├── image_002.json
│ └── ...
│
├── val/
│ ├── images/
│ │ ├── image_101.jpg
│ │ └── ...
│ │
│ └── labels/
│ ├── image_101.json
│ └── ...
│
├── test/
│ ├── images/
│ │ ├── image_201.jpg
│ │ └── ...
│ │
│ └── labels/
│ ├── image_201.json
│ └── ...
│
└── config.json
Description :
- Le dossier
images/contient les images à classer. - Le dossier
labels/contient des fichiers.jsonportant le même nom que les images. - Chaque fichier JSON contient un vecteur binaire (liste de 0 et 1) indiquant les classes associées à l'image.
- Le fichier
config.jsoncontient la liste complète des classes utilisées pour l'annotation
Structure de fichier config.json
{
"classes": ["Cat", "Dog", "Horse"]
}
Chaque fichier dans labels/ contient deux clés :
"labels": un vecteur binaire où1signifie que la classe est présente,0qu'elle est absente.
Exemple :
{
"labels": [1, 1, 0]
}
3. Détection d'Objets
Structure attendue :
projet_detection/
│
├── train/
│ ├── images/
│ │ ├── image_001.jpg
│ │ ├── image_002.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_001.txt
│ │ ├── image_002.txt
│ │ └── ...
│
├── val/
│ ├── images/
│ │ ├── image_101.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_101.txt
│ │ └── ...
│
├── test/
│ ├── images/
│ │ ├── image_201.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_201.txt
│ │ └── ...
│
├── data.yaml
Structure de fichier de data.yaml :
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8 # dataset root dir (absolute or relative; if relative, it's relative to default datasets_dir)
train: train/images # train images (relative to 'path') 4 images
val: val/images # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
Description :
- Chaque fichier
.txta le même nom que l'image et contient les annotations au format YOLO :<class_id> <x_center> <y_center> <width> <height>
4. Estimation des points clés (Keypoints)
Structure attendue :
Identique à la détection :
projet_keypoints/
│
├── train/
│ ├── images/
│ │ ├── image_001.jpg
│ │ ├── image_002.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_001.txt
│ │ ├── image_002.txt
│ │ └── ...
│
├── val/
│ ├── images/
│ │ ├── image_101.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_101.txt
│ │ └── ...
│
├── test/
│ ├── images/
│ │ ├── image_201.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_201.txt
│ │ └── ...
│
├── data.yaml
Structure de fichier de data.yaml :
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8-pose # dataset root dir (absolute or relative; if relative, it's relative to default datasets_dir)
train: train/images # train images (relative to 'path') 4 images
val: val/images # val images (relative to 'path') 4 images
test: # test images (optional)
# Keypoints
kpt_shape: [17, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
# Classes dictionary
names:
0: person
Description :
- Le fichier
.txtcontient les informations suivantes :<class_id> <x_center> <y_center> <width> <height> <kpt_x1> <kpt_y1> <v1> <kpt_x2> <kpt_y2> <v2> ... vest la visibilité du point (0: absent, 1: partiellement visible, 2: visible).
5. Segmentation d'Instances ou Sémantique
Structure attendue :
projet_segmentation/
│
├── train/
│ ├── images/
│ │ ├── image_001.jpg
│ │ ├── image_002.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_001.txt
│ │ ├── image_002.txt
│ │ └── ...
│
├── val/
│ ├── images/
│ │ ├── image_101.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_101.txt
│ │ └── ...
│
├── test/
│ ├── images/
│ │ ├── image_201.jpg
│ │ └── ...
│ ├── labels/
│ │ ├── image_201.txt
│ │ └── ...
│
├── data.yaml
Structure de fichier de data.yaml pour la segmentation d'instance:
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8-seg # dataset root dir (absolute or relative; if relative, it's relative to default datasets_dir)
train: train/images # train images (relative to 'path') 4 images
val: val/images # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
Description :
- Les fichiers
.txtcontiennent des polygones :<class_id> <x1> <y1> <x2> <y2> ... <xn> <yn>
6. Classification des vidéos
Structure attendue :
projet_classification_vidéos/
│
├── train/
│ ├── classe_1/
│ │ ├── image_001.mp4
│ │ ├── image_002.mp4
│ │ └── ...
│ ├── classe_2/
│ │ ├── image_003.mp4
│ │ ├── image_004.mp4
│ │ └── ...
│ └── ...
│
├── val/
│ ├── classe_1/
│ │ ├── image_101.mp4
│ │ └── ...
│ ├── classe_2/
│ │ ├── image_103.mp4
│ │ └── ...
│ └── ...
│
└── test/
├── classe_1/
│ ├── image_201.mp4
│ └── ...
├── classe_2/
│ ├── image_203.mp4
│ └── ...
└── ...
Description : Chaque sous-dossier porte le nom d'une classe et contient les vidéos associées.
Exemples d'utilisation (dossier /examples)
Le dossier /examples contient plusieurs scripts et sous-dossiers illustrant l'utilisation de la librairie MedusAIModels pour différents cas d'usage : classification, détection, segmentation, keypoints, vidéo, etc.
Structure du dossier /examples
datasets/: Exemples de manipulation, visualisation et tests sur différents types de datasets (classification, multilabel, détection, pose, segmentation, vidéo).- Ces scripts permettent de visualiser, explorer et transformer vos données.
- Vous pouvez voir les images, les annotations (bboxes, masques, keypoints, etc.), et le résultat des transformations appliquées (par exemple, rotation, redimensionnement, etc.).
- Ils sont idéaux pour déboguer vos jeux de données ou comprendre comment les transformations affectent vos images et labels.
torchTrain/: Scripts de tests d'entraînement PyTorch pour chaque tâche (classification, détection, segmentation, pose, vidéo) avec la librairie.Yolo/: Scripts spécifiques pour l'entraînement et l'utilisation de modèles YOLO (détection, segmentation, classification, pose).train.py: Exemple générique d'entraînement d'un modèle avec MedusAIModels.
Exécution des scripts d'exemple
1. Exemples de datasets
-
Exemples d'utilisation :
python examples/datasets/MultiClass.py - -
Ce que font ces scripts :
- Chargent le dataset et affichent des exemples d'images et d'annotations.
- Permettent d'appliquer et de visualiser des transformations (data augmentation, etc.).
- Aident à vérifier la qualité et la structure de vos données avant entraînement.
2. Entraînement PyTorch (torchTrain)
-
Exemples d'utilisation :
python examples/torchTrain/test_torchvision_classification.py --dataset_root /chemin/vers/dataset --output_dir ./output --model resnet18 --epochs 20 --batch_size 16 --pretrained python examples/torchTrain/test_torchvision_Multilabel.py --dataset_root /chemin/vers/dataset --output_dir ./output --model densenet121 --epochs 10 -
Ce que font ces scripts :
- Entraînent un modèle sur le dataset spécifié avec les paramètres choisis.
- Permettent de tester différents modèles, tailles de batch, nombre d'epochs, etc.
- Sauvegardent le modèle entraîné et parfois les métriques de validation.
3. Scripts YOLO
- Entraînement YOLO (détection, segmentation, classification, pose)
python examples/Yolo/YoloTrain.py --dataset /chemin/vers/yolo_dataset --model_type Detector --model_name yolov8n --epochs 20--model_typepeut êtreDetector,MulticlassClassifier,InstanceSegmentor,Keypointsselon la tâche.--model_name: nom du modèle YOLO (ex : yolov8n, yolov8s, ...)
Ce script illustre comment charger un dataset YOLO, choisir un modèle, entraîner et sauvegarder le modèle.
4. Script d'entraînement générique
- train.py Ce script permet d'entraîner un modèle à partir d'un fichier de configuration YAML décrivant le dataset, le modèle, les hyperparamètres, etc.
Pour chaque script, lancez-le avec --help pour voir toutes les options disponibles.
Ces exemples sont un excellent point de départ pour comprendre et tester les fonctionnalités de MedusAIModels sur vos propres données.