使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
本文档演示如何使用 Cloud TPU 和 COCO 数据集运行 ShapeMask 模型。
以下说明假设您已熟悉如何在 Cloud TPU 上运行模型。如果您刚开始接触 Cloud TPU,可以参阅快速入门,了解基本介绍。
如果您计划在 TPU Pod 切片上训练,请参阅在 TPU Pod 上训练,以了解 Pod 切片所需的参数更改。
目标
- 准备 COCO 数据集
- 创建 Cloud Storage 存储桶以保存数据集和模型输出
- 设置 TPU 资源以进行训练和评估
- 在单个 Cloud TPU 或 Cloud TPU Pod 上运行训练和评估
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Compute Engine
- Cloud TPU
- Cloud Storage
您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用。
准备工作
在开始学习本教程之前,请检查您的 Google Cloud 项目是否已正确设置。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Go to project selector
-
确保您的 Google Cloud 项目已启用结算功能。
本演示使用 Google Cloud 的收费组件。请查看 Cloud TPU 价格页面估算您的费用。请务必在使用完您创建的资源以后清理这些资源,以免产生不必要的费用。
Cloud TPU 单设备训练
本部分介绍如何为单一设备训练设置 Cloud Storage、虚拟机和 Cloud TPU 资源。
如果您计划在 TPU Pod 切片上训练,请参阅在 TPU Pod 上训练,以了解在 Pod 切片上训练所需的更改。
- 在 Cloud Shell 中,为项目 ID 创建变量。
export PROJECT_ID=project-id
- 配置 Google Cloud CLI 以使用要在其中创建 Cloud TPU 的项目。
gcloud config set project ${PROJECT_ID}
当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示 Authorize Cloud Shell
页面。点击页面底部的 Authorize
以允许 gcloud
使用您的凭据进行 GCP API 调用。
- 为 Cloud TPU 项目创建服务账号。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
该命令将返回以下格式的 Cloud TPU 服务账号:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
准备 COCO 数据集
本教程使用 COCO 数据集。该数据集在 Cloud Storage 存储桶上需要采用 TFRecord 格式以用于训练。
存储桶位置必须与虚拟机 (VM) 和 TPU 节点位于同一区域。虚拟机和 TPU 节点位于特定地区,即区域内的细分。
此 Cloud Storage 存储桶存储您用于训练模型的数据和训练结果。本教程中使用的 gcloud compute tpus execution-groups
工具会为您在上一步中设置的 Cloud TPU 服务账号设置默认权限。如果您需要更精细的权限,请查看访问级层权限。
如果您已位于位于以下位置的 Cloud Storage 存储桶上的 COCO 数据集:区域您将用于训练模型,则可以启动 TPU 资源并准备 Cloud TPU 以进行训练。否则,请按照以下步骤准备该数据集。
- 在 Cloud Shell 中,使用您的项目 ID 配置
gcloud
。
export PROJECT_ID=project-idgcloud config set project ${PROJECT_ID}
- 在 Cloud Shell 中,使用以下命令创建 Cloud Storage 存储桶:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
- 启动 Compute Engine 虚拟机实例。
此虚拟机实例将仅用于下载和预处理 COCO 数据集。在 instance-name 中填写您选择的名称。
$ gcloud compute tpus execution-groups create \\--vm-only \\--name=instance-name \\--zone=europe-west4-a \\--disk-size=300 \\--machine-type=n1-standard-16 \\--tf-version=2.12.0
命令标志说明
`vm-only`仅创建虚拟机。默认情况下,`gcloud compute tpus execution-groups` 命令会同时创建虚拟机和 Cloud TPU。`name`要创建的 Cloud TPU 的名称。`zone`您计划在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。`disk-size`通过 `gcloud compute tpus execution-groups` 命令创建的虚拟机的硬盘大小(以 GB 为单位)。`machine-type`要创建的 Compute Engine 虚拟机的[机器类型](https://cloud.google.com/compute/docs/machine-types?hl=zh-cn)。`tf-version`TensorFlow `gcloud compute tpus execution-groups` 的版本会安装在虚拟机上。
- 如果您未自动登录 Compute Engine 实例,请通过运行以下
ssh
命令进行登录。登录虚拟机后,shell 提示符会从username@projectname
更改为username@vm-name
:
$ gcloud compute ssh instance-name --zone=europe-west4-a
- 设置两个变量,一个用于先前创建的存储桶,另一个用于保存存储桶中的训练数据 (DATA_DIR) 的目录。
(vm)$ export STORAGE_BUCKET=gs://bucket-name(vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
- 安装预处理数据所需的软件包。
(vm)$ sudo apt-get install -y python3-tk && \pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow && \pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
- 运行
download_and_preprocess_coco.sh
脚本,将 COCO 数据集转换为训练应用所需的一组 TFRecord (*.tfrecord
)。
(vm)$ git clone https://github.com/tensorflow/tpu.git(vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
这会安装所需的库,然后运行预处理脚本。它会在您的本地数据目录中输出很多 *.tfrecord
文件。COCO 下载和转换脚本大约需要 1 小时才能完成。
- 将数据复制到 Cloud Storage 存储桶
将数据转换为 TFRecord 后,使用 gsutil
命令将其从本地存储空间复制到 Cloud Storage 存储桶。您还必须复制注解文件。这些文件有助于验证模型的性能。
(vm)$ gsutil -m cp ./data/dir/coco/ *.tfrecord ${DATA_DIR}
(vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/ *.json ${DATA_DIR}
-
清理虚拟机资源
将 COCO 数据集转换为 TFRecord 并将其复制到 Cloud Storage 存储桶的 DATA_DIR 后,您便可以删除 Compute Engine 实例。
与 Compute Engine 实例断开连接:
(vm)$ exit
您的提示符现在应为 username@projectname
,表明您位于 Cloud Shell 中。
- 删除您的 Compute Engine 实例。
$ gcloud compute instances delete instance-name--zone=europe-west4-a
启动 TPU 资源并训练模型
- 使用
gcloud
命令启动 TPU 资源。使用的命令取决于您使用的是 TPU 虚拟机还是 TPU 节点。如需详细了解这两种虚拟机架构,请参阅系统架构。
TPU 虚拟机
$ gcloud compute tpus tpu-vm create shapemask-tutorial \
--zone=europe-west4-a \
--accelerator-type=v3-8 \
--version=tpu-vm-tf-2.16.1-pjrt
命令标志说明
`zone`您计划在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。`accelerator-type`加速器类型指定要创建的 Cloud TPU 的版本和大小。如需详细了解每个 TPU 版本支持的加速器类型,请参阅 [TPU 版本](https://cloud.google.com/tpu/docs/system-architecture-tpu-vm?hl=zh-cn#versions)。`version`Cloud TPU [软件版本](https://cloud.google.com/tpu/docs/supported-tpu-versions?hl=zh-cn#tpu_software_versions)。
TPU 节点
$ gcloud compute tpus execution-groups create \--zone=europe-west4-a \--name=shapemask-tutorial \--accelerator-type=v3-8 \--machine-type=n1-standard-8 \--disk-size=300 \--tf-version=2.12.0
命令标志说明
`zone`您计划在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。`name`TPU 名称。如果未指定,则默认为您的用户名。`accelerator-type`要创建的 Cloud TPU 的[类型](https://cloud.google.com/tpu/docs/supported-tpu-configurations?hl=zh-cn)。`machine-type`要创建的 Compute Engine 虚拟机的[机器类型](https://cloud.google.com/compute/docs/machine-types?hl=zh-cn)。`disk-size`Compute Engine 虚拟机的根卷大小(以 GB 为单位)。`tf-version`TensorFlow `gcloud` 的版本会安装在虚拟机上。如需详细了解 `gcloud` 命令,请参阅 [gcloud 参考文档](https://cloud.google.com/sdk/gcloud/reference?hl=zh-cn)。
- 如果您未自动登录 Compute Engine 实例,请通过运行以下
ssh
命令进行登录。登录虚拟机后,shell 提示符会从username@projectname
更改为username@vm-name
:
TPU 虚拟机
gcloud compute tpus tpu-vm ssh shapemask-tutorial --zone=europe-west4-a
TPU 节点
gcloud compute ssh shapemask-tutorial --zone=europe-west4-a
在您继续按照这些说明操作时,请在虚拟机会话窗口中运行以 (vm)$
开头的每个命令。
- 安装 TensorFlow 要求。
TPU 虚拟机
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
TPU 节点
(vm)$ pip3 install -r /usr/share/models/official/requirements.txt
- 训练脚本需要额外的软件包。立即安装:
TPU 虚拟机
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
TPU 节点
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
- 设置存储桶名称变量。将 bucket-name 替换为存储桶的名称:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
- 设置 Cloud TPU 名称变量。
TPU 虚拟机
(vm)$ export TPU_NAME=local
TPU 节点
(vm)$ export TPU_NAME=shapemask-tutorial
- 设置
PYTHONPATH
环境变量:
TPU 虚拟机
(vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
TPU 节点
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
- 切换至存储模型的目录。
TPU 虚拟机
(vm)$ cd /usr/share/tpu/models/official/legacy/detection
TPU 节点
(vm)$ cd /usr/share/models/official/legacy/detection
- 添加一些必需的环境变量:
(vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07(vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco(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(vm)$ export SHAPE_PRIOR_PATH=gs://cloud-tpu-checkpoints/shapemask/kmeans_class_priors_91x20x32x32.npy(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/shapemask
- 创建 TPU 时,如果将
--version
参数设置为以-pjrt
结尾的版本,请设置以下环境变量以启用 PJRT 运行时:
(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true(vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
- 训练 ShapeMask 模型:
以下脚本在 v3-8 TPU 上运行一个示例训练,其中将仅训练 100 个步骤,完成大约需要 10 分钟。在 v3-8 TPU 上,训练到收敛需要大约 22500 个步骤和大约 6 小时。
(vm)$ python3 main.py \--strategy_type=tpu \--tpu=${TPU_NAME} \--model_dir=${MODEL_DIR} \--mode=train \--model=shapemask \--params_override="{train: {total_steps: 100, learning_rate: {init_learning_rate: 0.08, learning_rate_levels: [0.008, 0.0008], learning_rate_steps: [15000, 20000], }, checkpoint: { path: ${RESNET_CHECKPOINT},prefix: resnet50}, train_file_pattern: ${TRAIN_FILE_PATTERN}}, shapemask_head: {use_category_for_mask: true, shape_prior_path: ${SHAPE_PRIOR_PATH}}, shapemask_parser: {output_size: [640, 640]}}"
命令标志说明
`strategy_type`要在 TPU 上训练 Shapemask 模型,您必须将 `distribution_strategy` 设置为 `tpu`。`tpu`Cloud TPU 的名称。这是使用 `TPU_NAME` 环境变量设置的。`model_dir`在模型训练期间存储检查点和摘要的目录。如果指定的文件夹不存在,此程序会自行创建。 使用 Cloud TPU 时,`model_dir` 必须是 Cloud Storage 路径 (`gs://...`)。您可以重复使用现有的文件夹来加载当前检查点数据和存储其他检查点,只要先前的检查点是使用相同大小的 Cloud TPU 和相同 TensorFlow 版本创建的即可。`mode`设置为 `train` 可训练模型,设置为 `eval` 可评估模型。`params_override`一个 JSON 字符串,会替换默认脚本参数。如需详细了解脚本参数,请参阅 `/usr/share/models/official/legacy/detection/main.py`。训练完成后,系统将显示如下所示的消息:Train Step: 100/100 / loss = {'total_loss': 10.815635681152344,
'loss': 10.815635681152344, 'retinanet_cls_loss': 1.4915691614151,
'l2_regularization_loss': 4.483549118041992,
'retinanet_box_loss': 0.013074751943349838,
'shapemask_prior_loss': 0.17314358055591583,
'shapemask_coarse_mask_loss': 1.953366756439209,
'shapemask_fine_mask_loss': 2.216097831726074, 'model_loss': 6.332086086273193,
'learning_rate': 0.021359999} / training metric = {'total_loss': 10.815635681152344,
'loss': 10.815635681152344, 'retinanet_cls_loss': 1.4915691614151,
'l2_regularization_loss': 4.483549118041992,
'retinanet_box_loss': 0.013074751943349838,
'shapemask_prior_loss': 0.17314358055591583,
'shapemask_coarse_mask_loss': 1.953366756439209,
'shapemask_fine_mask_loss': 2.216097831726074,
'model_loss': 6.332086086273193, 'learning_rate': 0.021359999}
- 运行脚本以评估 ShapeMask 模型。此过程在 v3-8 TPU 上大约需要 10 分钟:
(vm)$ python3 main.py \--strategy_type=tpu \--tpu=${TPU_NAME} \--model_dir=${MODEL_DIR} \--checkpoint_path=${MODEL_DIR} \--mode=eval_once \--model=shapemask \--params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 }, shapemask_head: {use_category_for_mask: true, shape_prior_path: ${SHAPE_PRIOR_PATH}}, shapemask_parser: {output_size: [640, 640]}}"
命令标志说明
`strategy_type`如需在 TPU 上训练 Shapemask 模型,您必须将 `distribution_strategy` 设置为 `tpu`。`tpu`Cloud TPU 的名称。这是使用 `TPU_NAME` 环境变量设置的。`model_dir`在模型训练期间存储检查点和摘要的目录。如果指定的文件夹不存在,此程序会自行创建。 使用 Cloud TPU 时,`model_dir` 必须是 Cloud Storage 路径 (`gs://...`)。您可以重复使用现有的文件夹来加载当前检查点数据和存储其他检查点,只要先前的检查点是使用相同大小的 Cloud TPU 和相同 TensorFlow 版本创建的即可。`mode`设置为 `train` 可训练模型,设置为 `eval` 可评估模型。`params_override`一个 JSON 字符串,会替换默认脚本参数。如需详细了解脚本参数,请参阅 `/usr/share/models/official/legacy/detection/main.py`。评估完成后,系统将显示类似如下内容的消息:DONE (t=5.47s).Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.000Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.000Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.000Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
您现已完成单设备训练和评估。请按照以下步骤删除当前的单设备 TPU 资源。
- 与 Compute Engine 实例断开连接:
(vm)$ exit
您的提示符现在应为 username@projectname
,表明您位于 Cloud Shell 中。
- 删除 TPU 资源。
TPU 虚拟机
$ gcloud compute tpus tpu-vm delete shapemask-tutorial \\
--zone=europe-west4-a
命令标志说明
`zone`您的 Cloud TPU 所在的[可用区](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。
TPU 节点
$ gcloud compute tpus execution-groups delete shapemask-tutorial \\
--tpu-only \\
--zone=europe-west4-a
命令标志说明
`tpu-only`仅删除 Cloud TPU。虚拟机仍然可用。`zone`包含要删除的 TPU 的[可用区](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。此时,您可以结束本教程并[清理](#cleanup),也可以继续并探索在 Cloud TPU Pod 上运行模型。
使用 Cloud TPU Pod 扩缩模型
在 Cloud TPU Pod 上训练模型可能需要对训练脚本进行一些更改。如需了解详情,请参阅在 TPU Pod 上训练。
TPU Pod 训练
-
打开一个 Cloud Shell 窗口。
打开 Cloud Shell
-
为项目 ID 创建一个变量。
export PROJECT_ID=project-id
- 配置 Google Cloud CLI 以使用要在其中创建 Cloud TPU 的项目。
gcloud config set project ${PROJECT_ID}
当您第一次在新的 Cloud Shell 虚拟机中运行此命令时,系统会显示 Authorize Cloud Shell
页面。点击页面底部的 Authorize
以允许 gcloud
使用您的凭据进行 GCP API 调用。
-
为 Cloud TPU 项目创建服务账号。
通过服务账号,Cloud TPU 服务可以访问其他 Google Cloud Platform 服务。
gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
该命令将返回以下格式的 Cloud TPU 服务账号:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
- 使用以下命令创建 Cloud Storage 存储桶,或使用您之前为项目创建的存储桶。
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
-
如果您之前已准备的 COCO 数据集并将其移至存储桶,则可以再次使用它来进行 Pod 训练。如果您尚未准备好 COCO 数据集,请立即准备并返回此页面以设置 Pod 训练。
-
启动 Cloud TPU Pod
本教程指定 v3-32 Pod。如需了解其他 Pod 选项,请参阅 TPU 版本。
TPU 虚拟机
$ gcloud compute tpus tpu-vm create shapemask-tutorial \
--zone=europe-west4-a \
--accelerator-type=v3-32 \
--version=tpu-vm-tf-2.16.1-pod-pjrt
命令标志说明
`zone`您计划在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。`accelerator-type`加速器类型指定要创建的 Cloud TPU 的版本和大小。如需详细了解每个 TPU 版本支持的加速器类型,请参阅 [TPU 版本](https://cloud.google.com/tpu/docs/system-architecture-tpu-vm?hl=zh-cn#versions)。`version`Cloud TPU [软件版本](https://cloud.google.com/tpu/docs/supported-tpu-versions?hl=zh-cn#tpu_software_versions)。
TPU 节点
$ gcloud compute tpus execution-groups create \--zone=europe-west4-a \--name=shapemask-tutorial \--accelerator-type=v3-32 \--machine-type=n1-standard-8 \--disk-size=300 \--tf-version=2.12.0
命令标志说明
`zone`您计划在其中创建 Cloud TPU 的[区域](https://cloud.google.com/tpu/docs/types-zones?hl=zh-cn)。`name`TPU 名称。如果未指定,则默认为您的用户名。`accelerator-type`要创建的 Cloud TPU 的[类型](https://cloud.google.com/tpu/docs/supported-tpu-configurations?hl=zh-cn)。`machine-type`要创建的 Compute Engine 虚拟机的[机器类型](https://cloud.google.com/compute/docs/machine-types?hl=zh-cn)。`disk-size`Compute Engine 虚拟机的根卷大小(以 GB 为单位)。`tf-version`TensorFlow `gcloud` 的版本会安装在虚拟机上。
- 如果您未自动登录 Compute Engine 实例,请通过运行以下
ssh
命令进行登录。登录虚拟机后,shell 提示符会从username@projectname
更改为username@vm-name
:
TPU 虚拟机
gcloud compute tpus tpu-vm ssh shapemask-tutorial --zone=europe-west4-a
TPU 节点
gcloud compute ssh shapemask-tutorial --zone=europe-west4-a
在您继续按照这些说明操作时,请在虚拟机会话窗口中运行以 (vm)$
开头的每个命令。
- 安装 TensorFlow 要求。
TPU 虚拟机
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
TPU 节点
(vm)$ pip3 install -r /usr/share/models/official/requirements.txt
- 训练脚本需要额外的软件包。立即安装:
TPU 虚拟机
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
TPU 节点
(vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
- 设置以下环境变量,将 bucket-name 替换为 Cloud Storage 存储桶的名称:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
训练应用应该能够访问 Cloud Storage 中的训练数据。在训练期间,训练应用还会使用您的 Cloud Storage 存储桶来存储检查点。
- 更新所需的训练变量。
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/shapemask-pods
(vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
(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
(vm)$ export SHAPE_PRIOR_PATH=gs://cloud-tpu-checkpoints/shapemask/kmeans_class_priors_91x20x32x32.npy
- 设置一些所需的环境变量:
TPU 虚拟机
(vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
(vm)$ export TPU_LOAD_LIBRARY=0
TPU 节点
(vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
- 切换至存储模型的目录。
TPU 虚拟机
(vm)$ cd /usr/share/tpu/models/official/legacy/detection
TPU 节点
(vm)$ cd /usr/share/models/official/legacy/detection
- 启动 Pod 训练。
该示例训练仅运行 20 个步骤,在 v3-32 TPU 节点上完成大约需要 10 分钟。在 v3-32 TPU Pod 上,训练到收敛需要大约 11250 个步骤和大约 2 小时。
(vm)$ python3 main.py \--strategy_type=tpu \--tpu=${TPU_NAME} \--model_dir=${MODEL\_DIR} \--mode=train \--model=shapemask \--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}}, shapemask_head: {use_category_for_mask: true, shape_prior\path: ${SHAPE_PRIOR_PATH}} }"
命令标志说明
`strategy_type`如需在 TPU 上训练 Shapemask 模型,您必须将 `distribution_strategy` 设置为 `tpu`。`tpu`Cloud TPU 的名称。这是使用 `TPU_NAME` 环境变量设置的。`model_dir`在模型训练期间存储检查点和摘要的目录。如果指定的文件夹不存在,此程序会自行创建。 使用 Cloud TPU 时,`model_dir` 必须是 Cloud Storage 路径 (`gs://...`)。您可以重复使用现有的文件夹来加载当前检查点数据和存储其他检查点,只要先前的检查点是使用相同大小的 Cloud TPU 和相同 TensorFlow 版本创建的即可。`mode`设置为 `train` 可训练模型,设置为 `eval` 可评估模型。`params_override`一个 JSON 字符串,会替换默认脚本参数。如需详细了解脚本参数,请参阅 `/usr/share/models/official/legacy/detection/main.py`。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
- 断开与 Compute Engine 实例的连接(如果您尚未这样做):
(vm)$ exit
您的提示符现在应为 username@projectname
,表明您位于 Cloud Shell 中。
- 删除您的 Cloud TPU 和 Compute Engine 资源。 用于删除资源的命令取决于您使用的是 TPU 虚拟机还是 TPU 节点。如需了解详情,请参阅系统架构。
TPU 虚拟机
$ gcloud compute tpus tpu-vm delete shapemask-tutorial \
--zone=europe-west4-a
TPU 节点
$ gcloud compute tpus execution-groups delete shapemask-tutorial \
--zone=europe-west4-a
- 通过运行
gcloud compute tpus execution-groups list
验证资源是否已删除。删除操作可能需要几分钟时间才能完成。以下命令的输出不应包含本教程中创建的任何 TPU 资源:
$ gcloud compute tpus execution-groups list --zone=europe-west4-a
- 如下所示运行
gsutil
,将 bucket-name 替换为您为本教程创建的 Cloud Storage 存储桶的名称:
$ gsutil rm -r gs://bucket-name
后续步骤
使用其他图像大小进行训练
您可以使用更大的神经网络(例如,ResNet-101 而不是 ResNet-50)进行探索。较大的输入图片和更强大的神经网络将生成耗时更长但更精确的模型。
使用其他基础
或者,您也可以探索如何利用自己的数据集预训练 ResNet 模型,并以此为基础训练 ShapeMask 模型。再进行一些工作,您就可以用新的神经网络来替换 ResNet。最后,如果您有兴趣实现自己的对象检测模型,则可以基于该骨干网进行进一步的实验。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
文章来源:google cloud
推荐阅读
- 在 Cloud TPU 上训练 RetinaNet (TF 2.x)
- 在 Cloud TPU 上训练 EfficientNet (TF 2.x)
- 使用 PyTorch 在 Cloud TPU 上训练 Resnet50
更多芯擎AI开发板干货请关注芯擎AI开发板专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。