Guide Technique pour la Détection d'Anomalies Visuelles avec EfficientAD

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 :

  1. Perte de divergence étudiant-enseignant
  2. Perte de reconstruction de l'auto-encodeur
  3. 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

  1. Prétraitement : Assurez-vous que les images d'entrée ont une taille de 256×256 pixels.
  2. Choix du Modèle : Sélectionnez la version small ou medium selon les besoins en précision et vitesse.
  3. Configuration Matérielle : Un GPU avec support CUDA est recommandé pour des performances optimales.
  4. Ajustement des Hyperparamètres : Adaptez les étapes d'entraînement et le taux d'apprentissage à votre tâche spécifique.

Étiquettes: EfficientAD AnomalyDetection DeepLearning PyTorch ComputerVision

Publié le 18 juin à 22h41