Le réseau de neurones convolutifs à graphe dynamique (DGCNN) est une architecture de pointe conçue pour le traitement des nuages de points 3D. En extrayant à la fois les caractéristiques locales et les relations globales via des structures de graphes mises à jour dynamiquement, ce modèle excelle dans la reconnaissance de formes tridimensionnelles. Il est particulièrement prisé dans les domaines de la vision par ordinateur, de la robotique et des véhicules autonomes.
La mise en place de l'environnement nécessite la récupération du code source et l'installation des dépendances fondamentales. Voici un script d'initialisation pour automatiser cette étape :
#!/bin/bash
# Script d'initialisation de l'environnement DGCNN
REPOSITORY="https://gitcode.com/gh_mirrors/dg/dgcnn"
WORKSPACE="dgcnn_workspace"
git clone ${REPOSITORY} ${WORKSPACE}
cd ${WORKSPACE}/pytorch
# Installation des dépendances fondamentales
pip install torch==2.1.0 numpy==1.26.0 scikit-learn==1.3.0
Entraînement du modèle de classification
L'implémentation PyTorch offre un point d'entrée centralisé. Plutôt que d'exécuter des commandes brutes, nous pouvons orchestrer le processus via un script Python pour une meilleure traçabilité et une intégration plus aisée dans des pipelines CI/CD.
import subprocess
import sys
def initier_entrainement():
nom_experience = "classification_nuage_v1"
arguments = [
sys.executable, "main.py",
"--exp_name", nom_experience,
"--model", "dgcnn",
"--batch_size", "16",
"--epochs", "150",
"--num_points", "2048",
"--lr", "0.1",
"--use_sgd"
]
subprocess.run(arguments, check=True)
if __name__ == "__main__":
initier_entrainement()
Spécification des paramètres
| Paramètre | Description | Valeur par défaut / Modifiée |
|---|---|---|
--model |
Architecture du réseau à utiliser | dgcnn |
--batch_size |
Nombre d'échantillons par lot | 16 (ajusté) |
--epochs |
Nombre de cycles d'entraînement complets | 150 (ajusté) |
--num_points |
Points échantillonnés par nuage | 2048 (ajusté) |
--lr |
Taux d'apprentissage initial | 0.1 |
--use_sgd |
Activation de l'optimiseur SGD | True |
Le script principal orchestre plusieurs étapes cruciales : le chargement du jeu de données ModelNet40, l'instanciation du réseau DGCNN, la configuration de l'optimiseur SGD, ainsi que la boucle d'entraînement alternant phases d'apprentissage et de validation. Les poids du modèle offrant les meilleures métriques sont automatiquement persistés sur le disque.
Évaluation et inférence
Une fois l'entraînement convergé, l'évaluation des performances se fait en chargeant les poids sauvegardés pour calculer les métriques de précision.
import subprocess
import sys
def evaluer_modele():
chemin_modele = "checkpoints/classification_nuage_v1/models/model.t7"
commande_eval = [
sys.executable, "main.py",
"--eval", "True",
"--model_path", chemin_modele
]
subprocess.run(commande_eval, check=True)
if __name__ == "__main__":
evaluer_modele()
Cette procédure calcule et affiche la précision globale ainsi que la précision moyenne par classe, permettant de quantifier la capacité de généralisation du modèle sur des données invisibles.
Structure du code source
Pour une personnalisation avancée, il est essentiel de comprendre l'organisation des modules :
model.py: Définition des modules neuronaux, y compris les opérations EdgeConv et la structure globale du DGCNN.data.py: Pipelines de chargement, d'augmentation et de normalisation des nuages de points 3D.util.py: Fonctions utilitaires pour le calcul des fonctions de perte (Loss) et la gestion des journaux d'entraînement.
Optimisations et bonnes pratiques
- Densité du nuage de points : Augmenter la valeur de
--num_pointsenrichit la représentation géométrique mais impacte proportionnellement la consommation mémoire et le temps de calcul. - Ajustement du taux d'apprentissage : Pour l'optimiseur SGD, un taux de 0.1 avec un momentum de 0.9 est recommandé. Si vous privilégiez Adam, conservez une valeur autour de 1e-3.
- Transfert Learning : L'initialisation des poids via un modèle pré-entraîné (ex:
pretrained/model.1024.t7) réduit considérablement le temps de convergence sur des jeux de données spécifiques ou de petite taille.