MedusAIModels (0.1.1)

Published 2025-09-16 03:08:50 +02:00 by MedusTechnical

Installation

pip install --index-url  MedusAIModels

About 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

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For questions and support:


📁 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 .json portant 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.json contient 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ù 1 signifie que la classe est présente, 0 qu'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 .txt a 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 .txt contient les informations suivantes :
    <class_id> <x_center> <y_center> <width> <height> <kpt_x1> <kpt_y1> <v1> <kpt_x2> <kpt_y2> <v2> ...
    
  • v est 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 .txt contiennent 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_type peut être Detector, MulticlassClassifier, InstanceSegmentor, Keypoints selon 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.

Requirements

Requires Python: >=3.10,<3.13
Details
PyPI
2025-09-16 03:08:50 +02:00
49
medusai
MIT
235 KiB
Assets (2)
Versions (3) View all
0.1.2 2025-10-01
0.1.1 2025-09-16
0.1.0 2025-08-31