Présentation
Ce tutoriel explique comment exécuter le modèle Mask RCNN à l'aide de Cloud TPU avec l'ensemble de données COCO.
Le système Mask RCNN est un réseau de neurones profond conçu pour la détection d'objets et la segmentation d'images, l'une des étapes les plus difficiles pour la vision par ordinateur.
Le modèle Mask RCNN génère des cadres de délimitation et des masques de segmentation pour chaque instance d'un objet dans l'image. Le modèle est basé sur le réseau de pyramides à caractéristiques (FPN) et sur un réseau backbone ResNet50.
Ce tutoriel utilise Tensorflow Keras APIs
pour entraîner le modèle. L'API Keras est une API TensorFlow de haut niveau. Il s'agit de la méthode recommandée pour créer et exécuter un modèle de machine learning sur Cloud TPU. Cette API simplifie le processus de développement des modèles en masquant la plupart des mises en œuvre de bas niveau, ce qui facilite le basculement entre le TPU et d'autres plates-formes telles que le GPU ou le processeur.
Les instructions ci-dessous supposent que vous savez comment exécuter un modèle sur Cloud TPU. Si vous débutez avec Cloud TPU, consultez le guide de démarrage rapide pour en savoir plus.
Si vous prévoyez d'effectuer l'entraînement sur une tranche de pod TPU, consultez la section Entraîner sur des pods TPU pour comprendre les modifications de paramètres requises pour les tranches de pods.
Objectifs
- Créer un bucket Cloud Storage pour stocker votre ensemble de données et la sortie du modèle
- Préparer l'ensemble de données COCO
- Configurer une VM Compute Engine et un nœud Cloud TPU pour l'entraînement et l'évaluation
- Exécuter les tâches d'entraînement et d'évaluation sur un seul Cloud TPU ou sur un pod Cloud TPU
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- Instance
- Cloud TPU
- Cloud Storage
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.
Avant de commencer
Avant de commencer ce tutoriel, vérifiez que votre projet Google Cloud est correctement configuré.
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.
Ce tutoriel utilise des composants facturables de Google Cloud. Consultez la grille tarifaire de Cloud TPU pour estimer vos coûts. Veillez à nettoyer les ressources que vous avez créées lorsque vous avez terminé, afin d'éviter des frais inutiles.
Si vous prévoyez d'entraîner un modèle sur une tranche de pod TPU, consultez la section Entraînement sur les pods TPU pour comprendre les modifications de paramètres nécessaires pour les tranches de pods.
Configurer vos ressources
Cette section fournit des informations sur la configuration des ressources Cloud Storage, de VM et Cloud TPU pour ce tutoriel.
Ouvrez une fenêtre Cloud Shell.
Créez une variable d'environnement pour l'ID de votre projet.
export PROJECT_ID=project-id
Configurez l'outil de ligne de commande
gcloud
pour utiliser le projet dans lequel vous souhaitez créer une Cloud TPU.gcloud config set project ${PROJECT_ID}
La première fois que vous exécutez cette commande dans une nouvelle VM Cloud Shell, une page
Authorize Cloud Shell
s'affiche. Cliquez surAuthorize
en bas de la page pour permettre àgcloud
d'effectuer des appels d'API GCP avec vos identifiants.Créez un compte de service pour le projet Cloud TPU.
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
La commande renvoie un compte de service Cloud TPU au format suivant :
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Créez un bucket Cloud Storage à l'aide de la commande suivante :
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
Ce bucket Cloud Storage stocke les données que vous utilisez pour entraîner votre modèle, ainsi que les résultats de l'entraînement. L'outil
ctpu up
utilisé dans ce tutoriel définit les autorisations par défaut pour le compte de service Cloud TPU que vous avez configuré à l'étape précédente. Si vous souhaitez utiliser des autorisations plus précises, vérifiez les autorisations de niveau d'accès.L'emplacement du bucket doit se trouver dans la même région que votre machine virtuelle (VM) et votre nœud TPU. Les VM et les nœuds TPU sont situés dans des zones spécifiques, qui sont des subdivisions au sein d'une région.
Lancez une VM Compute Engine à l'aide de la commande
ctpu up
.$ ctpu up --project=${PROJECT_ID} \ --zone=europe-west4-a \ --vm-only \ --disk-size-gb=300 \ --machine-type=n1-standard-8 \ --name=mask-rcnn-tutorial \ --tf-version=2.4.1
Description des options de commande
project
- ID de votre projet GCP
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
vm-only
- Crée la VM sans créer de Cloud TPU. Par défaut, la commande
ctpu up
crée une VM et un Cloud TPU. disk-size-gb
- Taille du disque dur en Go de la VM créée par la commande
ctpu up
. machine-type
- Type de machine de la VM Compute Engine à créer.
name
- Nom de la ressource Cloud TPU à créer.
tf-version
- La version de Tensorflow que
ctpu
installe sur la VM.
La configuration que vous avez spécifiée apparaît. Saisissez y pour approuver ou n pour annuler.
Une fois l'exécution de la commande
ctpu up
terminée, vérifiez que l'invite de l'interface système est passée deusername@projectname
àusername@vm-name
. Cette modification indique que vous êtes maintenant connecté à votre VM Compute Engine.gcloud compute ssh mask-rcnn-tutorial --zone=europe-west4-a
À mesure que vous appliquez ces instructions, exécutez chaque commande commençant par
(vm)$
dans la fenêtre de session de la VM.
Installer les packages supplémentaires
L'application d'apprentissage Mask RCNN nécessite plusieurs packages supplémentaires. Installez-les maintenant :
(vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
Préparer les données
Ajoutez une variable d'environnement pour votre bucket de stockage. Remplacez bucket-name par le nom de votre bucket.
(vm)$ export STORAGE_BUCKET=gs://bucket-name
Ajoutez une variable d'environnement pour le répertoire de données.
(vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
Ajoutez une variable d'environnement pour le répertoire de modèle.
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn
Exécutez le script
download_and_preprocess_coco.sh
pour convertir l'ensemble de données COCO en fichiers TFRecord (*.tfrecord
), ce qui correspond au format attendu par l'application d'entraînement.(vm)$ sudo bash /usr/share/tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
Cela installe les bibliothèques requises et exécute le script de prétraitement. Un certain nombre de fichiers
*.tfrecord
est alors créé dans votre répertoire de données.Copiez les données dans votre bucket Cloud Storage
Après avoir converti les données en TFRecord, copiez-les depuis le stockage local vers votre bucket Cloud Storage à l'aide de la commande
gsutil
. Vous devez également copier les fichiers d'annotation. Ces fichiers vous aident à valider les performances du modèle.(vm)$ gsutil -m cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
(vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
Configurer et démarrer l'entraînement de Cloud TPU
Exécutez la commande suivante pour créer un Cloud TPU.
(vm)$ ctpu up --project=${PROJECT_ID} \ --tpu-only \ --tpu-size=v3-8 \ --zone=europe-west4-a \ --name=mask-rcnn-tutorial \ --tf-version=2.4.1
Description des options de commande
project
- ID de votre projet GCP
tpu-only
- Crée un Cloud TPU uniquement. Par défaut, la commande
ctpu up
crée une VM et un Cloud TPU. tpu-size
- Type du Cloud TPU à créer.
zone
- Zone dans laquelle vous prévoyez de créer votre Cloud TPU.
name
- Nom de la ressource Cloud TPU à créer.
tf-version
- La version de Tensorflow que
ctpu
installe sur la VM.
La configuration que vous avez spécifiée apparaît. Saisissez y pour approuver ou n pour annuler.
Le message suivant s'affiche :
Operation success; not ssh-ing to Compute Engine VM due to --tpu-only flag
. Vous pouvez ignorer ce message puisque vous avez déjà effectué la propagation de clé SSH.Ajoutez une variable d'environnement pour le nom du Cloud TPU.
(vm)$ export TPU_NAME=mask-rcnn-tutorial
Exécuter l'entraînement et l'évaluation
Le script suivant exécute un exemple d'entraînement de dix étapes seulement et dure environ six minutes sur un TPU v3-8. L'entraînement à la conversion nécessite environ 22 500 étapes et environ 6 heures sur un TPU v3-8.
Ajoutez des variables d'environnement obligatoires :
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models" (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07 (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-* (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-* (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
Exécutez la commande suivante pour entraîner le modèle Mask-RCNN :
(vm)$ python3 /usr/share/models/official/vision/detection/main.py \ --strategy_type=tpu \ --tpu=${TPU_NAME} \ --model_dir=${MODEL_DIR} \ --mode=train \ --model=mask_rcnn \ --params_override="{train: { total_steps: 10, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000} }"
Réglage Description tpu
Spécifie le nom du Cloud TPU. Cette valeur est définie en spécifiant la variable d'environnement ( TPU_NAME
).model_dir
Spécifie le répertoire dans lequel sont stockés les points de contrôle et les résumés lors de l'entraînement du modèle. Si ce dossier est absent, le programme le crée. Lorsque vous utilisez Cloud TPU, le chemin model_dir
doit être un chemin Cloud Storage (gs://...). Vous pouvez réutiliser un dossier existant pour charger les données de point de contrôle actuelles et stocker des points de contrôle supplémentaires si les points de contrôle précédents ont été créés avec des TPU de même taille et la même version de TensorFlow.RESNET_CHECKPOINT
Spécifie un point de contrôle pré-entraîné. Mask-RCNN nécessite l'utilisation d'un modèle de classification d'images pré-entraîné (tel que ResNet) en tant que réseau backbone. Cet exemple utilise un point de contrôle pré-entraîné créé à l'aide du modèle de démonstration ResNet. Si vous le souhaitez, vous pouvez également entraîner votre propre modèle ResNet et spécifier un point de contrôle à partir du répertoire de celui-ci. Exécutez l'évaluation :
(vm)$ python3 /usr/share/models/official/vision/detection/main.py \ --strategy_type=tpu \ --tpu=${TPU_NAME} \ --model_dir=${MODEL_DIR} \ --checkpoint_path=${MODEL_DIR} \ --mode=eval_once \ --model=mask_rcnn \ --params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"
Réglage Description tpu
Spécifie le nom du Cloud TPU. Cette valeur est définie en spécifiant la variable d'environnement ( TPU_NAME
).model_dir
Spécifie le répertoire dans lequel sont stockés les points de contrôle et les résumés lors de l'entraînement du modèle. Si ce dossier est absent, le programme le crée. Lorsque vous utilisez Cloud TPU, le chemin model_dir
doit être un chemin Cloud Storage (gs://...). Vous pouvez réutiliser un dossier existant pour charger les données de point de contrôle actuelles et stocker des points de contrôle supplémentaires si les points de contrôle précédents ont été créés avec des TPU de même taille et la même version de TensorFlow.
Vous pouvez maintenant terminer ce tutoriel et nettoyer vos ressources GCP. Vous pouvez également choisir d'explorer plus avant l'exécution du modèle dans un pod Cloud TPU.
Mise à l'échelle de votre modèle avec les pods Cloud TPU
Vous pouvez obtenir des résultats plus rapidement en adaptant votre modèle aux pods Cloud TPU. Le modèle Mask RCNN est totalement compatible et peut fonctionner avec les tranches de pod suivantes :
- v2-32
- v3-32
Lorsque vous utilisez des pods TPU Cloud, vous devez d'abord entraîner le modèle à l'aide d'un pod, puis utiliser un seul appareil Cloud TPU pour évaluer le modèle.
Entraîner avec les pods Cloud TPU
Si vous avez déjà supprimé votre instance Compute Engine, créez-en une nouvelle en suivant les étapes décrites dans la section Configurer vos ressources.
L'exemple d'entraînement ci-dessous ne nécessite que 20 étapes et dure environ 10 minutes sur un nœud TPU v3-32. L'entraînement à la conversion nécessite environ 11 250 étapes et environ 2 heures sur un pod TPU v3-32.
Supprimez la ressource Cloud TPU que vous avez créée pour entraîner le modèle sur un appareil Cloud TPU unique.
(vm)$ ctpu delete --tpu-only --zone=europe-west4-a --name=mask-rcnn-tutorial
Exécutez la commande
ctpu up
à l'aide du paramètretpu-size
pour spécifier la tranche de pod que vous souhaitez utiliser. Par exemple, la commande suivante utilise une tranche de pod v3-32.(vm)$ ctpu up --project=${PROJECT_ID} \ --tpu-only \ --tpu-size=v3-32 \ --zone=europe-west4-a \ --name=mask-rcnn-tutorial \ --tf-version=2.4.1
Mettez à jour les variables d'environnement TPU_NAME et MODEL_DIR.
(vm)$ export TPU_NAME=mask-rcnn-tutorial (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn-pods
Commencez le script d'entraînement.
(vm)$ python3 /usr/share/models/official/vision/detection/main.py \ --strategy_type=tpu \ --tpu=${TPU_NAME} \ --model_dir=${MODEL_DIR} \ --mode=train \ --model=mask_rcnn \ --params_override="{train: { batch_size: 128, iterations_per_loop: 500, total_steps: 20, learning_rate: {'learning_rate_levels': [0.008, 0.0008], 'learning_rate_steps': [10000, 13000] }, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}} }"
Réglage Description tpu
Spécifie le nom du Cloud TPU. Cette valeur est définie en spécifiant la variable d'environnement ( TPU_NAME
).model_dir
Spécifie le répertoire dans lequel sont stockés les points de contrôle et les résumés lors de l'entraînement du modèle. Si ce dossier est absent, le programme le crée. Lorsque vous utilisez Cloud TPU, le chemin model_dir
doit être un chemin Cloud Storage (gs://...). Vous pouvez réutiliser un dossier existant pour charger les données de point de contrôle actuelles et stocker des points de contrôle supplémentaires si les points de contrôle précédents ont été créés avec des TPU de même taille et la même version de TensorFlow.RESNET_CHECKPOINT
Spécifie un point de contrôle pré-entraîné. Mask-RCNN nécessite l'utilisation d'un modèle de classification d'images pré-entraîné (tel que ResNet) en tant que réseau backbone. Cet exemple utilise un point de contrôle pré-entraîné créé à l'aide du modèle de démonstration ResNet. Si vous le souhaitez, vous pouvez également entraîner votre propre modèle ResNet et spécifier un point de contrôle à partir du répertoire de celui-ci.
Évaluer le modèle
Au cours de cette étape, vous utilisez un seul nœud Cloud TPU pour évaluer le modèle entraîné ci-dessus par rapport à l'ensemble de données COCO. L'évaluation dure environ 10 minutes.
Supprimez la ressource Cloud TPU que vous avez créée pour entraîner le modèle sur un pod.
(vm)$ ctpu delete --project=${PROJECT_ID} \ --tpu-only \ --zone=europe-west4-a \ --name=mask-rcnn-tutorial
Lancez un nouvel appareil TPU pour exécuter la tâche d'évaluation.
(vm)$ ctpu up --project=${PROJECT_ID} \ --tpu-only \ --tpu-size=v3-8 \ --zone=europe-west4-a \ --tf-version=2.4.1 \ --name=mask-rcnn-tutorial
Mettez à jour la variable d'environnement "TPU_NAME".
(vm)$ export TPU_NAME=mask-rcnn-tutorial
Commencez l'évaluation.
(vm)$ python3 /usr/share/models/official/vision/detection/main.py \ --strategy_type=tpu \ --tpu=mask-rcnn-tutorial \ --model_dir=${MODEL_DIR} \ --checkpoint_path=${MODEL_DIR} \ --mode=eval_once \ --model=mask_rcnn \ --params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et les ressources individuelles.
Nettoyez l'instance de VM Compute Engine et les ressources Cloud TPU.
Déconnectez-vous de l'instance Compute Engine, si vous ne l'avez pas déjà fait :
(vm)$ exit
Votre invite devrait maintenant être
username@projectname
, indiquant que vous êtes dans Cloud Shell.Dans votre VM ou Cloud Shell, exécutez
ctpu delete
avec les options--name
et--zone
que vous avez utilisées lors de la configuration de Cloud TPU pour supprimer votre Cloud TPU :$ ctpu delete --project=${PROJECT_ID} \ --name=mask-rcnn-tutorial \ --zone=europe-west4-a
Exécutez la commande suivante pour vérifier que la VM Compute Engine et Cloud TPU ont été arrêtés :
$ ctpu status --project=${PROJECT_ID} \ --name=mask-rcnn-tutorial \ --zone=europe-west4-a
La suppression peut prendre plusieurs minutes. Si vous n'avez plus d'instances allouées, une réponse de ce type s'affiche :
2018/04/28 16:16:23 WARNING: Setting zone to "europe-west4-a" No instances currently exist. Compute Engine VM: -- Cloud TPU: --
Exécutez
gsutil
comme indiqué, en remplaçant bucket-name par le nom du bucket Cloud Storage que vous avez créé pour ce tutoriel :$ gsutil rm -r gs://bucket-name
Étape suivante
Dans ce tutoriel, vous avez entraîné le modèle Mask-RCNN à l'aide d'un exemple d'ensemble de données. Les résultats de cet entraînement ne sont pas utilisables pour l'inférence dans la plupart des cas. Afin d'utiliser un modèle pour l'inférence, vous pouvez entraîner les données sur un ensemble de données accessible au public ou sur votre propre ensemble de données. Les modèles entraînés sur des appareils Cloud TPU nécessitent des ensembles de données au format TFRecord.
Vous pouvez utiliser l'exemple d'outil de conversion d'ensemble de données pour convertir un ensemble de données de classification d'images au format TFRecord. Si vous n'utilisez pas de modèle de classification d'images, vous devez convertir vous-même votre ensemble de données au format TFRecord. Pour en savoir plus, consultez la section TFRecord et tf.Example.
Réglages d'hyperparamètres
Pour améliorer les performances du modèle avec votre ensemble de données, vous pouvez régler ses hyperparamètres. Vous trouverez des informations sur les hyperparamètres communs à tous les modèles compatibles avec des TPU sur GitHub. Des informations sur les hyperparamètres spécifiques au modèle sont disponibles dans le code source de chaque modèle. Pour en savoir plus sur ces réglages, consultez les pages Présentation des réglages d'hyperparamètres, Utiliser le service de réglage d'hyperparamètres et Régler les hyperparamètres.
Inférence
Une fois que vous avez entraîné votre modèle, vous pouvez l'utiliser pour l'inférence (également appelée prédiction). AI Platform est une solution basée sur le cloud permettant de développer, d'entraîner et de déployer des modèles de machine learning. Une fois un modèle déployé, vous pouvez utiliser le service AI Platform Prediction.
- En savoir plus sur
ctpu
, y compris sur la façon de l'installer sur un ordinateur local. - Découvrez les outils TPU dans TensorBoard.