RepDistiller est un cadre open source en PyTorch conçu pour l’expérimentation systématique de méthodes avancées de distillation de connaissances. Il intègre des implémentations reproductibles de douze appproches récentes, dont la distillation contrastive de représentations (CRD), publiée à ICLR 2020, et fournit des résultats normalisés sur le jeu de données CIFAR-100.
Principes fondamentaux de la distillation
La distillation de connaissances consiste à transférer les capacités d’un modèle « enseignant » volumineux vers un modèle « étudiant » plus léger, tout en préservant une précision compétitive. Ce processus repose sur l’exploitation de signaux intermédiaires — tels que les logits lissés, les activations cachées ou les relations entre échantillons — plutôt que sur les seules étiquettes discrètes.
Architecture logicielle
Le projet suit une organisation modulaire claire :
- distillers/ : Implémentations indépendantes des stratégies (ex.
ContrastiveDistiller,AttentionMimic,RelationalLearner) - architectures/ : Définitions paramétrables de réseaux (ResNet variants, ShuffleNetV2, MobileNetV3, VGG simplifié)
- trainers/ : Boucles d’entraînement génériques avec gestion des pertes composites
- utils/ : Outils pour la sauvegarde, la journalisation et l’évaluation fine
Installation rapide
Le cadre est compatible avec PyTorch ≥ 1.7 et Python ≥ 3.8. Pour démarrer :
git clone https://gitcode.com/gh_mirrors/re/RepDistiller
cd RepDistiller
pip install -r requirements.txt
# Téléchargement des modèles enseignants pré-entraînés
bash scripts/get_teachers.sh
Méthodes évaluées
Chaque méthode est encapsulée dans une classe dérivée de BaseDistiller. Les douze approches couvrent divers paradigmes :
- KD : Minimisation de la divergence KL entre distributions de probabilités lissées
- FitNet : Régression des cartes d’activation intermédiaires via un réseau auxiliaire
- AT : Alignement des cartes d’attention calculées sur les sorties convolutives
- SP : Conservation de la structure de similarité pair-à-pair dans l’espace latent
- CC : Concordance des matrices de corrélation entre couches correspondantes
- VID : Contrainte d’information variationnelle sur les représentations intermédiaires
- RKD : Apprentissage des distances angulaires et euclidiennes entre échantillons
- PKT : Transport optimal entre distributions probabilistes de features
- AB : Distillation des frontières d’activation via des fonctions de seuil adaptatives
- FT : Factorisation tensorielle des activations pour transfert de motifs structurés
- FSP : Préservation des produits scalaires entre paires de couches
- NST : Transfert de la sélectivité neuronale mesurée par entropie conditionnelle
Lancement d’une expérience
Exécution d’un entraînement étudiant avec distillation contrastive :
python trainers/distill_runner.py \
--teacher-path save/models/wrn40x2_cifar100/epoch_200.pth \
--student-arch shufflenetv2_x1_0 \
--distiller crd \
--alpha 0.0 \
--beta 0.95 \
--temperature 4.0 \
--batch-size 128 \
--trial-id crd_v1
Les paramètres --alpha et --beta permettent de combiner plusieurs objectifs (ex. KD + CRD) sans modification du code source.
Résultats quantitatifs sur CIFAR-100
Précision top-1 (%) moyenne sur 3 exécutions indépendantes :
Même famille d’architectures
| Configuration | Enseignant / Étudiant | KD | AT | RKD | CRD |
|---|---|---|---|---|---|
| WideResNet | 75.61 / 73.26 | 74.92 | 74.08 | 73.35 | 75.48 |
| ResNet x4 | 79.42 / 72.50 | 73.33 | 73.44 | 71.90 | 75.51 |
| VGG | 74.64 / 70.36 | 72.98 | 71.43 | 71.48 | 73.94 |
Architectures hétérogènes
| Combinaison | Enseignant / Étudiant | KD | SP | NST | CRD |
|---|---|---|---|---|---|
| VGG13 → MobileNetV2 | 74.64 / 64.60 | 67.37 | 66.30 | 58.16 | 69.73 |
| ResNet32x4 → ShuffleNetV2 | 79.42 / 71.82 | 74.45 | 74.56 | 74.68 | 75.65 |
| WRN-40-2 → ShuffleNetV1 | 75.61 / 70.50 | 74.83 | 74.52 | 74.89 | 76.05 |
Recommandations opérationnelles
Les résultats confirment que CRD offre une robustesse supérieure face aux écarts architecturaux. Pour une mise en œuvre efficace :
- Utiliser CRD comme point de départ lors de la distillation entre architectures dissemblables
- Activer des pertes hybrides (ex.
--alpha 0.3 --beta 0.7) pour équilibrer fidélité aux étiquettes et transfert sémantique - Ajuster la température de lissage (
--temperature) selon la complexité du modèle enseignant - Optimiser les taux d’apprentissage spécifiques aux modules distillateurs via des groupes de paramètres distincts
Entraînement personnalisé de l’enseignant
Pour former un modèle enseignant depuis zéro, exécuter :
python trainers/teacher_trainer.py \
--arch resnet50 \
--dataset cifar100 \
--epochs 300 \
--lr 0.1 \
--scheduler cosine \
--save-dir save/models/resnet50_cifar100
Ce script gère automatiquement le redimensionnement du taux d’apprentissage en fonction du nombre de GPU utilisés.