Maison >Périphériques technologiques >IA >Affinerie SAM 2 sur un ensemble de données personnalisé: tutoriel
Meta's Segment quoi que ce soit le modèle 2 (SAM 2) est la dernière innovation de la technologie de segmentation. Il s'agit du premier modèle unifié de Meta qui peut segmenter des objets dans les images et les vidéos en temps réel.
Mais pourquoi affiner Sam 2 s'il peut déjà segmenter quelque chose?
Alors que SAM 2 est puissant prêt à l'emploi, ses performances sur les tâches rares ou spécifiques au domaine peuvent ne pas toujours répondre aux attentes. Le réglage fin vous permet d'adapter SAM2 à vos besoins spécifiques, améliorant sa précision et son efficacité pour votre cas d'utilisation particulier.
Dans cet article, je vous guiderai étape par étape à travers le processus de réglage fin de SAM 2.
SAM2 est un modèle de fondation développé par Meta pour une segmentation visuelle rapide dans les images et les vidéos. Contrairement à son prédécesseur, SAM, qui s'est principalement concentré sur les images statiques, SAM2 est conçu pour gérer également les complexités de la segmentation vidéo.
SAM2 - Tâche, modèle et données (Source: Ravi et al., 2024)
Il utilise une architecture de transformateur avec la mémoire de streaming, permettant un traitement vidéo en temps réel. La formation de SAM 2 impliquait un ensemble de données vastes et varié avec le nouvel ensemble de données SA-V, qui comprend plus de 600 000 annotations de masquets couvrant 51 000 vidéos.
Son moteur de données, qui permet la collecte de données interactifs et l'amélioration du modèle, donne au modèle la possibilité de segmenter quoi que ce soit possible. Ce moteur permet à Sam 2 d'apprendre et de s'adapter en continu, ce qui le rend plus efficace pour gérer les données nouvelles et difficiles. Cependant, pour les tâches spécifiques au domaine ou les objets rares, un réglage fin est essentiel pour atteindre des performances optimales.
Dans le contexte de SAM 2, le réglage fin est le processus de formation ultérieure du modèle SAM 2 pré-formé sur un ensemble de données spécifique pour améliorer ses performances pour une tâche ou un domaine particulier. Alors que SAM 2 est un outil puissant formé sur un ensemble de données large et diversifié, sa nature à usage général peut ne pas toujours donner des résultats optimaux pour des tâches spécialisées ou rares.
Par exemple, si vous travaillez sur un projet d'imagerie médicale qui nécessite l'identification de types de tumeurs spécifiques, les performances du modèle peuvent échouer en raison de sa formation généralisée.
le processus de réglage fin
Fonctionment SAM 2 aborde cette limitation en vous permettant d'adapter le modèle à votre ensemble de données spécifique. Ce processus améliore la précision du modèle et le rend plus efficace pour votre cas d'utilisation unique.
Voici les principaux avantages du réglage fin de Sam 2:
Pour commencer avec le réglage fin Sam 2, vous devrez avoir les conditions suivantes en place:
logiciel et autres exigences:
La qualité de votre ensemble de données est cruciale pour affiner le modèle SAM 2. Des images ou des vidéos annotées de haute qualité avec des masques de segmentation précises sont essentielles pour obtenir des performances optimales. Des annotations précises permettent au modèle d'apprendre les fonctionnalités correctes, conduisant à une meilleure précision de segmentation et à la robustesse dans les applications du monde réel.
La première étape consiste à acquérir l'ensemble de données, qui forme l'épine dorsale du processus de formation. Nous avons fourni nos données de Kaggle, une plate-forme fiable qui fournit une gamme diversifiée d'ensembles de données. À l'aide de l'API Kaggle, nous avons téléchargé les données au format requise, en nous assurant que les images et les masques de segmentation correspondants étaient facilement disponibles pour un traitement ultérieur.
Après avoir téléchargé les ensembles de données, nous avons effectué les étapes suivantes:
Étant donné que le modèle SAM2 nécessite une entrée dans des formats spécifiques, nous avons converti les données comme suit:
Les images et les masques traités sont ensuite organisés en dossiers respectifs pour un accès facile pendant le processus de réglage fin. De plus, les chemins vers ces images et masques sont écrits dans un fichier CSV (Train.csv) pour faciliter le chargement des données pendant la formation.
La dernière étape impliquait de valider l'ensemble de données pour garantir sa précision:
Voici un ordinateur portable rapide pour vous guider via le code pour la création de l'ensemble de données. Vous pouvez soit passer par ce chemin de création de données, soit utiliser directement n'importe quel ensemble de données disponible en ligne dans le même format que celui mentionné dans les pré-requis.
Segment tout le modèle 2 contient plusieurs composants, mais la capture ici pour un réglage fin plus rapide est de former uniquement des composants légers, tels que le décodeur de masque et l'encodeur rapide, plutôt que le modèle entier. Les étapes pour affiner ce modèle sont les suivantes:
Pour démarrer le processus de réglage fin, nous devons installer la bibliothèque SAM-2, ce qui est crucial pour le modèle du segment tout (SAM2). Ce modèle est conçu pour gérer efficacement diverses tâches de segmentation. L'installation consiste à cloner le référentiel SAM-2 de GitHub et à installer les dépendances nécessaires.
!git clone https://github.com/facebookresearch/segment-anything-2 %cd /content/segment-anything-2 !pip install -q -e .
Cet extrait de code garantit que la bibliothèque SAM2 est correctement installée et prête à être utilisée dans notre flux de travail fin.
Une fois la bibliothèque SAM-2 installée, l'étape suivante consiste à acquérir l'ensemble de données que nous utiliserons pour un réglage fin. Nous utilisons un ensemble de données disponible sur Kaggle, en particulier un ensemble de données de segmentation thoracique contenant des images et des masques de poumons, de cœur et de trachée.
L'ensemble de données contient:
Image de l'ensemble de données CT SCAN
Dans ce blog, nous n'utiliserons que des images et des masques de poumons pour la segmentation. L'API Kaggle nous permet de télécharger des ensembles de données directement dans notre environnement. Nous commençons par télécharger le fichier kaggle.json de Kaggle pour accéder facilement à n'importe quel ensemble de données.
Pour obtenir kaggle.json, accédez à l'onglet Paramètres sous votre profil utilisateur et sélectionnez Créer un nouveau jeton. Cela déclenchera le téléchargement de Kaggle. JSON, un fichier contenant vos informations d'identification API.
!git clone https://github.com/facebookresearch/segment-anything-2 %cd /content/segment-anything-2 !pip install -q -e .
décompressez les données:
# get dataset from Kaggle from google.colab import files files.upload() # This will prompt you to upload the kaggle.json file !mkdir -p ~/.kaggle !mv kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json !kaggle datasets download -d polomarco/chest-ct-segmentation
Avec l'ensemble de données prêt, commençons le processus de réglage fin. Comme je l'ai mentionné précédemment, la clé ici est de ne pas affiner uniquement les composants légers de SAM2, tels que le décodeur de masque et le codeur rapide, plutôt que l'ensemble du modèle. Cette approche est plus efficace et nécessite moins de ressources.
Pour le processus de réglage fin, nous devons commencer avec des poids de modèle SAM2 pré-formés. Ces poids, appelés «points de contrôle», sont le point de départ pour une formation plus approfondie. Les points de contrôle ont été formés sur un large éventail d'images, et en les affinés sur notre ensemble de données spécifiques, nous pouvons obtenir de meilleures performances sur nos tâches cibles.
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
Dans cette étape, nous téléchargeons divers points de contrôle SAM-2 qui correspondent à différentes tailles de modèle (par exemple, minuscules, petits, base_plus, grands). Le choix du point de contrôle peut être ajusté en fonction des ressources de calcul disponibles et de la tâche spécifique à portée de main.
Avec l'ensemble de données téléchargé, l'étape suivante consiste à le préparer à la formation. Cela implique de diviser l'ensemble de données en ensembles de formation et de test et de créer des structures de données qui peuvent être introduites dans le modèle SAM 2 pendant le réglage fin.
!wget -O sam2_hiera_tiny.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt" !wget -O sam2_hiera_small.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt" !wget -O sam2_hiera_base_plus.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt" !wget -O sam2_hiera_large.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt"
Nous avons divisé l'ensemble de données en un ensemble de formation (80%) et un ensemble de tests (20%) pour nous assurer que nous pouvons évaluer les performances du modèle après la formation. Les données de formation seront utilisées pour affiner le modèle SAM 2, tandis que les données de test seront utilisées pour l'inférence et l'évaluation.
Après avoir divisé votre ensemble de données en ensembles de formation et de test, l'étape suivante consiste à créer des masques binaires, à sélectionner des points clés dans ces masques et à visualiser ces éléments pour s'assurer que les données sont correctement traitées.
1. Images de lecture et de redimensionnement: Le processus commence par sélectionner au hasard une image et son masque correspondant à partir de l'ensemble de données. L'image est convertie du format BGR au RVB, qui est le format de couleur standard pour la plupart des modèles d'apprentissage en profondeur. L'annotation correspondante (masque) est lue en mode gris. Ensuite, l'image et le masque d'annotation sont redimensionnés à une dimension maximale de 1024 pixels, en maintenant le rapport d'aspect pour garantir que les données s'inscrivent dans les exigences d'entrée du modèle et réduisent la charge de calcul.
!git clone https://github.com/facebookresearch/segment-anything-2 %cd /content/segment-anything-2 !pip install -q -e .
2. Binarisation des masques de segmentation: le masque d'annotation multi-classes (qui pourrait avoir plusieurs classes d'objets étiquetées avec différentes valeurs de pixels) est convertie en masque binaire. Ce masque met en évidence toutes les régions d'intérêt pour l'image, simplifiant la tâche de segmentation à un problème de classification binaire: objet vs arrière-plan. Le masque binaire est ensuite érodé à l'aide d'un noyau 5x5.
L'érosion réduit légèrement la taille du masque, ce qui aide à éviter les effets des limites lors de la sélection des points. Cela garantit que les points sélectionnés sont bien dans l'intérieur de l'objet plutôt que près de ses bords, qui peuvent être bruyants ou ambigus.
Les points clés sont sélectionnés à partir du masque érodé. Ces points agissent comme des invites pendant le processus de réglage fin, guidant le modèle sur l'endroit où concentrer son attention. Les points sont sélectionnés au hasard à l'intérieur des objets pour s'assurer qu'ils sont représentatifs et non influencés par des limites bruyantes.
# get dataset from Kaggle from google.colab import files files.upload() # This will prompt you to upload the kaggle.json file !mkdir -p ~/.kaggle !mv kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json !kaggle datasets download -d polomarco/chest-ct-segmentation
3. Visualisation: Cette étape est cruciale pour vérifier que les étapes de prétraitement des données ont été exécutées correctement. En inspectant visuellement les points sur le masque binarisé, vous pouvez vous assurer que le modèle recevra des contributions appropriées pendant la formation. Enfin, le masque binaire est remodelé et formaté correctement (avec des dimensions adaptées à l'entrée du modèle), et les points sont également remodelés pour une utilisation ultérieure dans le processus de formation. La fonction renvoie l'image traitée, le masque binaire, les points sélectionnés et le nombre de masques trouvés.
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
Le code ci-dessus renvoie la figure suivante contenant l'image d'origine de l'ensemble de données avec son masque binarisé et son masque binarisé avec des points.
image originale, masque binarisé et masque binarisé avec des points pour l'ensemble de données.
Fonctionnement du modèle SAM2 implique plusieurs étapes, y compris le chargement du modèle, la configuration de l'optimiseur et du planificateur, et la mise à jour itérative des poids du modèle en fonction des données d'entraînement.
Chargez les points de contrôle du modèle:
!wget -O sam2_hiera_tiny.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt" !wget -O sam2_hiera_small.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt" !wget -O sam2_hiera_base_plus.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt" !wget -O sam2_hiera_large.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt"
Nous commençons par construire le modèle SAM2 en utilisant les points de contrôle pré-formés. Le modèle est ensuite enveloppé dans une classe de prédicteur, ce qui simplifie le processus de définition des images, de codages d'invites et de masques de décodage.
Nous configurons plusieurs hyperparamètres pour nous assurer que le modèle apprend efficacement, tels que le taux d'apprentissage, la décroissance du poids et les étapes d'accumulation de gradient. Ces hyperparamètres contrôlent le processus d'apprentissage, y compris la vitesse à laquelle le modèle met à jour ses poids et comment il évite le sur-ajustement. N'hésitez pas à jouer avec ceux-ci.
!git clone https://github.com/facebookresearch/segment-anything-2 %cd /content/segment-anything-2 !pip install -q -e .
L'optimiseur est responsable de la mise à jour des poids du modèle, tandis que le planificateur ajuste le taux d'apprentissage pendant la formation pour améliorer la convergence. En amenant ces paramètres, nous pouvons atteindre une meilleure précision de segmentation.
Le processus de réglage fin réel est itératif, où à chaque étape, un lot d'images et de masques pour les poumons uniquement est passé par le modèle, et la perte est calculée et utilisée pour mettre à jour les poids du modèle.
# get dataset from Kaggle from google.colab import files files.upload() # This will prompt you to upload the kaggle.json file !mkdir -p ~/.kaggle !mv kaggle.json ~/.kaggle/ !chmod 600 ~/.kaggle/kaggle.json !kaggle datasets download -d polomarco/chest-ct-segmentation
À chaque itération, le modèle traite un lot d'images, calcule les masques de segmentation et les compare à la vérité au sol pour calculer la perte. Cette perte est ensuite utilisée pour ajuster les poids du modèle, améliorant progressivement les performances du modèle. Après une formation pour environ 3000 époques, nous obtenons une précision (IOU - Intersection par un syndicat) d'environ 72%.
Le modèle peut ensuite être utilisé pour l'inférence, où il prédit des masques de segmentation sur de nouvelles images invisibles. Commencez par les fonctions Read_images et Get_points pour obtenir l'image d'inférence et son masque avec les points clés.
!unzip chest-ct-segmentation.zip -d chest-ct-segmentation
Ensuite, chargez les exemples d'images que vous souhaitez pour l'inférence, ainsi que des poids nouvellement affinés, et effectuez le réglage de l'inférence Torch.no_grad ().
!wget -O sam2_hiera_tiny.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt" !wget -O sam2_hiera_small.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt" !wget -O sam2_hiera_base_plus.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt" !wget -O sam2_hiera_large.pt "https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt"
Dans cette étape, nous utilisons le modèle affiné pour générer des masques de segmentation pour les images de test. Les masques prévus sont ensuite visualisés à côté des images originales et des masques de vérité au sol pour évaluer les performances du modèle.
Image de segmentation finale sur les données de test
Fonction d'adaptation SAM2 offre un moyen pratique d'améliorer ses capacités pour des tâches spécifiques. Que vous travailliez sur l'imagerie médicale, les véhicules autonomes ou l'édition vidéo, le réglage fin vous permet d'utiliser SAM2 pour vos besoins uniques. En suivant ce guide, vous pouvez adapter SAM2 pour vos projets et obtenir des résultats de segmentation de pointe.
Pour les cas d'utilisation plus avancés, considérons le réglage des composants supplémentaires de SAM2, tels que l'encodeur d'image. Bien que cela nécessite plus de ressources, il offre une plus grande flexibilité et améliorations des performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!