Résumé
Nous abordons le problème de la perte d'informations dans les réseaux profonds via le concept d'Informations Gradient Programmables (PGI). Cette méthode génère des gradients fiables pour la mise à jour des poids en préservant les caractéristiques cruciales. Nous proposons également l'architecture GELAN, optimisée pour l'efficacité et la précision. Nos expériences sur COCO démontrent des gains significatifs en précision et efficaccité.
Introduction
Les architectures profondes modernes souffrent de la perte d'informations lors de la transformation des données, impactant la qualité de l'apprentissage. PGI résout ce problème en maintenant des gradients fiables même pour les modèles légers.
Architecture GELAN
GELAN combine une planification de chemin de gradient avec des opérateurs convolutionnels standards. Son design permet :
- Une agrégation hiérarchique efficace
- Un équilibre paramètres/précision
- Une extensibilité aux divers blocs de calcul
# Exemple structure GELAN
class BlockConv(nn.Module):
def __init__(self, entree, sortie):
super().__init__()
self.conv = nn.Conv2d(entree, sortie, 3, padding=1)
self.activation = nn.SiLU()
def forward(self, x):
return self.activation(self.conv(x))
class GELAN(nn.Module):
def __init__(self, config):
super().__init__()
self.chemins = nn.ModuleList([BlockConv(cfg['in'], cfg['out']) for cfg in config])
def forward(self, x):
res = []
for chemin in self.chemins:
x = chemin(x)
res.append(x)
return torch.cat(res, dim=1)
PGI : Mécanisme Clé
PGI introduit trois composants interagissant pendant l'entraînement :
- Branche principale : Architecture finale d'inférence
- Branche réversible auxiliaire : Générateur de gradients fiables (retirée à l'inférence)
- Informations auxiliaires multi-niveaux : Supervision sémantique programmable
### Résultats Expérimentaux
Comparaison sur COCO :
| Modèle | AP (%) | Paramètres (M) |
|---|---|---|
| YOLOv7 | 45.8 | 36.3 |
| YOLOv9 (Ours) | 48.2 | 28.7 |
L'analyse des cartes de caractéristiques montre une meilleure rétention d'informations avec GELAN (Figure 1).
### Implémentation
L'intégration de PGI et GELAN suit schéma :
# Pseudo-code intégration
class YOLOv9(nn.Module):
def __init__(self):
super().__init__()
self.backbone = GELAN(config_backbone)
self.pgi_branch = PGIReversibleBranch()
self.neck = PAN()
self.head = DetectionHead()
def forward(self, x, train=False):
features = self.backbone(x)
if train:
grad_info = self.pgi_branch(x)
return self.head(self.neck(features)), grad_info
return self.head(self.neck(features))