Présentation du Projet EfficientAD
EfficientAD est un système de détection d'anomalies visuelles basé sur l'apprentissage profond, implémentant la méthode décrite dans l'article "EfficientAD: Accurate Visual Anomaly Detection at Millisecond Latencies". Ce projet combine une précision élevée avec une vitesse d'inférence de l'ordre du milliseconde, le rendant adapté aux applications industrielles comme le contrôle qualité et l'analyse d'images médicales.
Caractéristiques Principales
- Détection Précise : Atteint un taux de précision de 99.1% sur le jeu de données Mvtec AD
- Inférence Rapide : Latence de 4.4 millisecondes sur un GPU A6000
- Modèles Légers : Disponible en versions small et medium
- Utilisation Immédiate : Fournit des workflows complets d'entraînement et d'inférence
Configuration de l'Environnement
Prérequis Système
- Python 3.10
- PyTorch 1.13.0
- torchvision 0.14.0
- GPU compatible CUDA (recommandé)
Installation des Dépendances
pip install torch==1.13.0 torchvision==0.14.0 tifffile==2021.7.30 tqdm==4.56.0 scikit-learn==1.2.2
Pour l'évaluation sur le jeu de données Mvtec AD, installez également :
pip install numpy==1.18.5 Pillow==7.0.0 scipy==1.7.1 tabulate==0.8.7
Préparatino des Jeux de Données
Téléchargement de Mvtec AD
mkdir mvtec_ad_dataset
cd mvtec_ad_dataset
wget https://www.mydrive.ch/shares/38536/3830184030e49fe74747669442f0f282/download/420938113-1629952094/mvtec_anomaly_detection.tar.xz
tar -xf mvtec_anomaly_detection.tar.xz
cd ..
Téléchargement de Mvtec LOCO
mkdir mvtec_loco_dataset
cd mvtec_loco_dataset
wget https://www.mydrive.ch/shares/48237/1b9106ccdfbb09a0c414bd49fe44a14a/download/430647091-1646842701/mvtec_loco_anomaly_detection.tar.xz
tar -xf mvtec_loco_anomaly_detection.tar.xz
cd ..
Analyse des Modules Clés
Architecture du Modèle
Le projet comprend trois composants réseau principaux :
- Réseau Enseignant (Teacher Network) : Utilise une architecture PDN pré-entraînée, gelée pendant l'entraînement, servant de référence pour les caractéristiques normales.
- Réseau Étudiant (Student Network) : Structure similaire à l'enseignant mais avec des canaux de sortie doublés, apprenant à imiter l'enseignant sur les échantillons normaux.
- Auto-encodeur : Reconstruit les images d'entrée et fournit un signal supplémentaire pour la détection d'anomalies.
Processus d'Entraînement
L'entraînement utilise une stratégie d'apprentissage multi-tâches :
- Perte de divergence étudiant-enseignant
- Perte de reconstruction de l'auto-encodeur
- Perte de pénalité pour éviter les solutions triviales
# Boucle d'entraînement principale
for epoch, (input_student, input_ae), penalty_input in zip(
train_progress, data_loader_train, data_loader_penalty):
# Calcul des pertes
divergence_loss = compute_divergence(input_student, teacher_features)
reconstruction_loss = compute_reconstruction(input_ae)
penalty_loss = compute_penalty(input_student)
total_loss = divergence_loss + reconstruction_loss + penalty_loss
Guide d'Utilisation
Entraînement et Inférence de Base
Utilisez le script principal pour l'entraînement :
python efficientad.py --dataset mvtec_ad --subdataset bottle
Paramètres de Configuration
--dataset: Type de jeu de données (mvtec_ad ou mvtec_loco)--subdataset: Nom du sous-ensemble spécifique--model_size: Taille du modèle (small ou medium)--weights: Chemin vers les poids pré-entraînés--imagenet_train_path: Chemin vers les données d'entraînement ImageNet
Évaluation du Modèle
python mvtec_ad_evaluation/evaluate_experiment.py --dataset_base_dir './mvtec_ad_dataset/' --anomaly_maps_dir './output/1/anomaly_maps/mvtec_ad/' --output_dir './output/1/metrics/mvtec_ad/' --evaluated_objects bottle
Performances
Précision de Détection
| Modèle | Jeu de Données | Résultats Officiels | Résultats Projet |
|---|---|---|---|
| EfficientAD-M | Mvtec AD | 99.1 | 99.1 |
| EfficientAD-M | VisA | 98.1 | 98.2 |
| EfficientAD-S | Mvtec AD | 98.8 | 99.0 |
Vitesse d'Inférence
| Modèle | GPU | Vitesse Officielle | Vitesse Projet |
|---|---|---|---|
| EfficientAD-M | A6000 | 4.5 ms | 4.4 ms |
Utilisation Avancée
Reproduction des Résultats de l'Article
python efficientad.py --dataset mvtec_ad --subdataset bottle --model_size medium --weights models/teacher_medium.pth --imagenet_train_path ./ILSVRC/Data/CLS-LOC/train
Jeux de Données Personnalisés
Organisez vos données selon cette structure :
dataset_custom/
├── subset_name/
├── train/
│ └── good/
└── test/
├── good/
└── defect_categories/
Structure du Projet
EfficientAD/
├── models/ # Poids des modèles pré-entraînés
├── results/ # Fichiers de résultats expérimentaux
├── efficientad.py # Script principal d'entraînement et d'inférence
├── common.py # Fonctions communes et définitions de modèles
├── benchmark.py # Tests de performance
├── pretraining.py # Script de pré-entraînement
└── README.md # Documentation du projet
Résolution des Problèmes Courants
- Manque de Mémoire : Réduire la taille des lots ou utiliser un modèle plus petit.
- Instabilité d'Entraînement : Ajuster le taux d'apprentissage ou activer le clipping des gradients.
- Conflits de Dépendances : Utiliser des environnements virtuels pour isoler les projets.
Recommandations Pratiques
- Prétraitement : Assurez-vous que les images d'entrée ont une taille de 256×256 pixels.
- Choix du Modèle : Sélectionnez la version small ou medium selon les besoins en précision et vitesse.
- Configuration Matérielle : Un GPU avec support CUDA est recommandé pour des performances optimales.
- Ajustement des Hyperparamètres : Adaptez les étapes d'entraînement et le taux d'apprentissage à votre tâche spécifique.