HyperAI

Maîtrisez Les Détails D'implémentation De MobileNetV3 Dans TorchVision Dans Un Seul Article

特色图像

TorchVision v0.9 ajoute une série de modèles adaptés aux mobiles.Il peut être utilisé pour gérer des tâches telles que la classification, la détection de cibles et la segmentation sémantique.

Cet article explorera en profondeur le code de ces modèles, partagera des détails d'implémentation notables, expliquera les principes de configuration et de formation de ces modèles et interprétera les compromis importants effectués par les autorités au cours du processus d'optimisation du modèle.

L’objectif de cet article est de présenter les détails techniques du modèle qui ne sont pas documentés dans les articles et référentiels originaux.

Architecture réseau

La mise en œuvre de l’architecture MobileNetV3 suit strictement les paramètres du document original.Prend en charge la personnalisation de l'utilisateur et fournit différentes configurations pour la classification des bâtiments, la détection des cibles et la segmentation sémantique des backbones.Sa conception structurelle est similaire à celle de MobileNetV2, et les deux partagent les mêmes blocs de construction.

Prêt à l'emploi dès la sortie de la boîte.Deux variantes officielles sont disponibles : Large et Small. Les deux sont construits avec le même code, la seule différence est la configuration (nombre de modules, taille, fonction d'activation, etc.).

Paramètres de configuration

Bien que les utilisateurs puissent personnaliser le paramètre InvertedResidual et le transmettre directement à la classe MobileNetV3, pour la plupart des applications,Les développeurs peuvent ajuster les configurations existantes en transmettant des paramètres à la méthode de création de modèle.Certains paramètres de configuration clés sont les suivants :

largeur_mult  Le paramètre est un multiplicateur qui détermine le nombre de pipelines de modèles. La valeur par défaut est 1. En ajustant la valeur par défaut, vous pouvez modifier le nombre de filtres convolutifs, y compris les première et dernière couches. Lors de la mise en œuvre, assurez-vous que le nombre de filtres est un multiple de 8. Il s'agit d'une astuce d'optimisation matérielle qui accélère le processus de vectorisation des opérations.

queue_réduite  Le paramètre est principalement utilisé pour l'optimisation de la vitesse d'exécution, ce qui réduit de moitié le nombre de pipelines dans le dernier module du réseau. Cette version est souvent utilisée dans les modèles de détection d'objets et de segmentation sémantique. Selon l'article lié à MobileNetV3, l'utilisation du paramètre reduced_tail peut réduire la latence de 15% sans affecter la précision.

dilaté  Les paramètres affectent principalement les trois derniers modules InvertedResidual du modèle. La convolution en profondeur de ces modules peut être convertie en convolution Atrous, qui est utilisée pour contrôler la taille du pas de sortie du module et améliorer la précision du modèle de segmentation sémantique.

Détails de mise en œuvre

La classe MobileNetV3 est responsable de la construction d'un réseau à partir de la configuration fournie. Les détails de mise en œuvre sont les suivants :

* Le dernier module convolutif étend la sortie du dernier module InvertedResidual de 6 fois. Cette implémentation peut s'adapter à différents paramètres de multiplicateur.

* Similaire au modèle MobileNetV2, il existe une couche Dropout avant la dernière couche linéaire du classificateur.

La classe InvertedResidual est le bloc de construction principal du réseau. Les détails de mise en œuvre qui doivent être notés sont les suivants :

* Si le pipeline d’entrée et le pipeline d’extension sont identiques, l’étape d’extension n’est pas requise. Cela se produit au niveau du premier module convolutif du réseau.

* Même si le pipeline étendu est le même que le canal de sortie, l'étape de projection est toujours requise.

* L'activation du module Depthwise a priorité sur la couche Squeeze-and-Excite, ce qui peut améliorer la précision dans une certaine mesure.

Schéma d'architecture du module MobileNetV3

Classification

Les points de référence et les détails de configuration, de formation et de quantification des modèles pré-entraînés sont expliqués ici.

Repères 

Initialiser le modèle pré-entraîné :

large = torchvision.models.mobilenet_v3_large(pretrained=True, width_mult=1.0,  reduced_tail=False, dilated=False)
small = torchvision.models.mobilenet_v3_small(pretrained=True)
quantized = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)
Comparaison détaillée des benchmarks entre les nouveaux et les anciens modèles

Comme le montre la figure, si l'utilisateur est prêt à sacrifier un peu de précision en échange d'une augmentation de vitesse d'environ 6 fois,MobileNetV3-Large peut alors remplacer ResNet50.

Notez que le temps d'inférence ici est mesuré sur le CPU.

 Processus de formation 

Tous les modèles pré-entraînés sont configurés comme des modèles non dilatés avec un multiplicateur de largeur de 1 et des queues complètes, et s'adaptent sur ImageNet. Les variantes grandes et petites sont formées avec les mêmes hyperparamètres et scripts.

 Formation de modèle rapide et stable 

La configuration correcte de RMSProp est essentielle pour accélérer le processus de formation et garantir la stabilité numérique. Les auteurs ont utilisé TensorFlow dans leurs expériences et ont utilisé un rmsprop_epsilon .

Normalement, cet hyperparamètre est utilisé pour éviter les dénominateurs nuls, sa valeur est donc faible, mais dans ce modèle particulier,Choisir la bonne valeur est important pour éviter l’instabilité numérique des pertes.

Un autre détail important est que, bien que les implémentations RMSProp de PyTorch et TensorFlow se comportent généralement de manière similaire, dans le contexte ici, il est important de noter les différences dans la façon dont les deux frameworks gèrent l'hyperparamètre epsilon.

Plus précisément, PyTorch ajoute epsilon en dehors du calcul de la racine carrée, tandis que TensorFlow ajoute epsilon à l'intérieur.Cela signifie que lorsque les utilisateurs transplantent les hyperparamètres de cet article, ils doivent ajuster la valeur epsilon, qui peut être exprimée comme PyTorch_eps=sqrt(TF_eps)  pour calculer une approximation raisonnable.

Améliorer la précision du modèle en ajustant les hyperparamètres et en améliorant le processus de formation 

Après avoir configuré l'optimiseur pour obtenir une formation rapide et stable, vous pouvez commencer à optimiser la précision du modèle. Certaines technologies peuvent aider les utilisateurs à atteindre cet objectif.

Tout d’abord, pour éviter le surapprentissage,Vous pouvez utiliser AutoAugment et RandomErasing pour augmenter les données.En outre, il est également très important d’utiliser la validation croisée pour ajuster des paramètres tels que la décroissance du poids et pour faire la moyenne des poids des différents points de contrôle d’époque après la formation. Enfin, l’utilisation de méthodes telles que le lissage des étiquettes, la profondeur aléatoire et l’injection de bruit LR peut également améliorer la précision globale d’au moins 1,5%.

Base de référence des hyperparamètres de style MobileNetV2

Notez qu'une fois la précision définie atteinte, les performances du modèle seront vérifiées sur l'ensemble de validation.Ce processus permet de détecter le surapprentissage.

 Quantification 

Des poids quantifiés ont été fournis pour le backend QNNPACK de la variante MobileNetV3-Large, ce qui lui permet de fonctionner 2,5 fois plus rapidement. Pour quantifier le modèle,La formation sensible à la quantification (QAT) est utilisée ici.

Notez que QAT permet de modéliser l'impact de la quantification et d'ajuster les poids afin d'améliorer la précision du modèle.Par rapport aux résultats quantifiés du modèle simplement entraîné, la précision est améliorée de 1,8% :

Détection d'objets

Cette section fournira d'abord une base de référence des modèles publiés, puis discutera de la manière dont MobileNetV3-Large Backbone est utilisé avec le détecteur FasterRCNN dans le Feature Pyramid Network pour la détection d'objets.

Il explique également comment le réseau est formé et réglé, et où des compromis doivent être faits.(Cette section ne couvre pas les détails de son utilisation avec SSDlite).

Repères 

Initialiser le modèle :

high_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True) 
low_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)
Comparaison de référence entre les nouveaux et les anciens modèles

Comme vous pouvez le voir, si l’utilisateur est prêt à sacrifier un peu de précision pour une vitesse d’entraînement 5 fois plus rapide,R-CNN haute résolution plus rapide avec dorsale FPN MobileNetV3-Large, qui peut remplacer le modèle ResNet50 équivalent.

Détails de mise en œuvre 

Le détecteur utilise une dorsale de type FPN qui extrait les caractéristiques de différentes convolutions du modèle MobileNetV3.Par défaut, le modèle pré-entraîné utilise la sortie du 13e module InvertedResidual et la sortie de la convolution avant la couche de pooling. L'implémentation prend également en charge l'utilisation de plusieurs étapes de sortie.

Toutes les cartes de caractéristiques extraites du réseau sont projetées dans 256 pipelines par le module FPN.Cela peut augmenter considérablement la vitesse du réseau.Ces cartes de caractéristiques fournies par la dorsale FPN seront utilisées par le détecteur FasterRCNN pour fournir des prédictions de boîtes et de classes à différentes échelles.

Processus de formation et de réglage 

Actuellement, le service officiel fournit deux modèles pré-entraînés qui peuvent effectuer la détection de cibles à différentes résolutions. Les deux modèles ont été formés sur l’ensemble de données COCO en utilisant les mêmes hyperparamètres et scripts.

Le détecteur haute résolution est formé avec des images de 800 à 1333 px, tandis que le détecteur basse résolution adapté aux mobiles est formé avec des images de 320 à 640 px.

La raison pour laquelle deux ensembles distincts de poids pré-entraînés sont fournis est que l'entraînement du détecteur directement sur des images plus petites est plus efficace que le passage des petites images à un modèle haute résolution pré-entraîné.Cela entraînera une augmentation de la précision de 5 mAP.

Les deux dorsales sont initialisées avec les poids sur ImageNet, et les trois dernières étapes de leurs poids sont affinées pendant la formation.

Des optimisations de vitesse supplémentaires peuvent être effectuées pour les modèles adaptés aux mobiles en ajustant le seuil RPN NMS.Sacrifier la précision de 0,2 mAP peut augmenter la vitesse du processeur du modèle d'environ 45%. Les détails de l'optimisation sont les suivants :

Diagramme de prédiction du modèle FPN Faster R-CNN MobileNetV3-Large

Segmentation sémantique

Cette section fournit d'abord quelques benchmarks de modèles pré-entraînés publiés, puis explique comment le backbone MobileNetV3-Large est combiné avec des têtes de segmentation telles que LR-ASPP, DeepLabV3 et FCN pour la segmentation sémantique.

Le processus de formation du réseau sera également expliqué et certaines techniques d'optimisation alternatives seront proposées pour les applications critiques en termes de vitesse.

Repères

Initialiser le modèle pré-entraîné :

lraspp = torchvision.models.segmentation.lraspp_mobilenet_v3_large(pretrained=True) 
deeplabv3 = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
Comparaison détaillée des benchmarks entre les nouveaux et les anciens modèles

Comme le montre la figure, DeepLabV3 avec le backbone MobileNetV3-Large est une alternative viable à FCN et ResNet50 dans la plupart des applications.Tout en conservant une précision similaire, la vitesse de course est augmentée de 8,5 fois.De plus, les performances du réseau LR-ASPP dans tous les indicateurs dépassent celles du FCN dans les mêmes conditions.

Détails de mise en œuvre

Cette section décrit les détails importants de la mise en œuvre de la tête de segmentation testée. Notez que tous les modèles décrits dans cette section utilisent la dorsale MobileNetV3-Large dilatée.

LR-ASPP

LR-ASPP est une version simplifiée du modèle de pooling de pyramide spatiale Atrous réduit proposé par les auteurs de l'article MobileNetV3. Contrairement à d’autres modèles de segmentation dans TorchVision,Il n'utilise pas de perte auxiliaire, mais utilise des fonctionnalités de bas et de haut niveau avec des pas de sortie de 8 et 16 respectivement.

Différente de la couche AveragePooling 49×49 et de la taille de pas variable utilisée dans l'article, la couche AdaptiveAvgPool2d est utilisée ici pour traiter les fonctionnalités globales.

Cela peut fournir aux utilisateurs une méthode d’implémentation générale qui peut être exécutée sur plusieurs ensembles de données.Enfin, avant de renvoyer la sortie, une interpolation bilinéaire est toujours effectuée pour garantir que les dimensions des images d'entrée et de sortie correspondent exactement.

DeepLabV3 et FCN 

La combinaison de MobileNetV3 avec DeepLabV3 et FCN est très similaire à la combinaison d'autres modèles, et l'évaluation des étapes de ces méthodes est la même que celle de LR-ASPP.

Il convient de noter qu'aucune fonctionnalité de haut ou de bas niveau n'est utilisée ici.Au lieu de cela, une perte normale est ajoutée aux cartes de caractéristiques avec une foulée de sortie de 16, et une perte auxiliaire est ajoutée aux cartes de caractéristiques avec une foulée de sortie de 8.

FCN est inférieur à LR-ASPP en termes de vitesse et de précision, il n'est donc pas pris en compte ici. Les poids pré-entraînés sont toujours disponibles avec seulement des modifications mineures du code.

Processus de formation et de réglage

Voici deux modèles pré-entraînés MobileNetV3 qui peuvent être utilisés pour la segmentation sémantique :LR-ASPP et DeepLabV3.Les piliers de ces modèles ont été initialisés avec des poids ImageNet et formés de bout en bout.

Les deux architectures ont été formées sur l'ensemble de données COCO en utilisant le même script et des hyperparamètres similaires.

En règle générale, lors de l’inférence, les images sont redimensionnées à 520 pixels. Une optimisation de vitesse facultative consiste à créer une configuration de modèle basse résolution à l'aide de poids pré-entraînés haute résolution et à réduire la taille d'inférence à 320 pixels.Cela augmentera le temps d'exécution du processeur d'environ 60%, tout en sacrifiant quelques points mIoU.

Chiffres détaillés optimisés
Exemple de prédiction de modèle LR-ASPP MobileNetV3-Large

Les détails d'implémentation de MobileNetV3 résumés ci-dessus sont résumés dans ce numéro. J’espère que cela pourra vous donner une meilleure compréhension et connaissance de ce modèle.