使用 Cloud TPU 在 30 分钟内训练和提供实时移动目标检测器
2018 年 7 月 13 日
发布者 Sara RobinsonAakanksha ChowdheryJonathan Huang

如果您能够更快地训练和提供您的目标检测模型,那会怎么样?我们已经听到了您的反馈,今天我们很高兴地宣布支持在 Cloud TPU 上训练目标检测模型,模型量化,以及添加新模型,包括 RetinaNet 和 RetinaNet 的 MobileNet 改编版。您可以查看 AI 博客上的发布公告。在这篇文章中,我们将指导您使用迁移学习在 Cloud TPU 上训练量化宠物品种检测器。
pet breed detector
整个过程 - 从训练到在 Android 上进行设备上推理 - 需要 30 分钟,在 Google Cloud 上的成本不到 5 美元。完成后,您将拥有一个 Android 应用程序(iOS 教程即将推出!),该应用程序可以实时检测猫狗品种,并且您的手机上只需要不到 12 兆字节的空间。请注意,除了在云端训练目标检测模型外,您还可以选择在自己的硬件或Colab 中运行训练。

设置您的环境

我们将首先设置训练和提供模型所需的一些库和先决条件。请注意,此设置过程可能比训练和提供模型本身花费更长时间。为方便起见,您可以使用Dockerfile,它提供了从源代码安装 Tensorflow 并下载本教程所需的数据集和模型的依赖项。如果您决定使用 Docker,您仍然应该完成“Google Cloud 设置”部分,然后跳到“将数据集上传到 GCS”部分。Dockerfile 还将为 Tensorflow Lite 部分构建 Android 依赖项。有关更多信息,请参阅附带的README 文件。

Google Cloud 设置

首先,在Google Cloud 控制台创建一个项目,并为该项目启用结算。我们将使用 Cloud Machine Learning Engine 在 Cloud TPU 上运行我们的训练作业。ML Engine 是 Google Cloud 的 TensorFlow 托管平台,它简化了训练和提供 ML 模型的过程。要使用它,请为刚刚创建的项目启用必要的 API

其次,我们将创建一个 Google Cloud Storage 存储桶,用于存储模型的训练和测试数据,以及我们的训练作业的模型检查点。

请注意,本教程中的所有命令都假定您正在运行 Ubuntu。在本教程中,我们将使用 Google Cloud gcloud CLI 来执行许多命令,以及使用 Cloud Storage gsutil CLI 与我们的 GCS 存储桶进行交互。如果您没有安装这些内容,您可以在此处安装 gcloud 并在此处安装 gsutil

运行以下命令将您的当前项目设置为刚刚创建的项目,将 YOUR_PROJECT_NAME 替换为您的项目名称
gcloud config set project YOUR_PROJECT_NAME
然后,我们将使用以下命令创建一个 Cloud Storage 存储桶。请注意,存储桶名称必须是全局唯一的,因此如果您选择的第一个名称已被占用,则可能会出现错误。
gsutil mb gs://YOUR_UNIQUE_BUCKET_NAME
这可能会提示您首先运行 gcloud auth login,之后您需要提供发送到浏览器的验证代码。

然后设置两个环境变量以简化本教程中的命令
export PROJECT="YOUR_PROJECT_ID"
export YOUR_GCS_BUCKET="YOUR_UNIQUE_BUCKET_NAME"
接下来,要让我们的 Cloud TPU 访问我们的项目,我们需要添加一个特定于 TPU 的服务帐户。首先,使用以下命令获取服务帐户的名称
curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
    https://ml.googleapis.com/v1/projects/${PROJECT}:getConfig
当此命令完成后,复制 tpuServiceAccount 的值(它看起来像 [email protected]),然后将其保存为环境变量
export TPU_ACCOUNT=your-service-account
最后,将 ml.serviceAgent 角色授予您的 TPU 服务帐户
gcloud projects add-iam-policy-binding $PROJECT  \
    --member serviceAccount:$TPU_ACCOUNT --role roles/ml.serviceAgent

安装 Tensorflow

如果您没有安装 TensorFlow,请按照此处的步骤操作。要遵循本教程的设备上部分,您需要使用 Bazel 从源代码安装 TensorFlow,请按照此处的说明进行操作。编译 TensorFlow 可能需要一段时间。如果您只想遵循本教程的 Cloud TPU 训练部分,则无需从源代码编译 TensorFlow,并且可以通过 pip、Anaconda 等安装发布版本。

安装 TensorFlow 对象检测

如果这是您第一次使用 TensorFlow 对象检测,欢迎!要安装它,请按照此处的说明进行操作。

安装完对象检测后,请务必通过运行以下命令测试您的安装
python object_detection/builders/model_builder_test.py
如果安装成功,您应该看到以下输出
Ran 18 tests in 0.079s

OK

设置数据集

为了简化操作,我们将使用与我们关于训练目标检测模型的上一篇文章相同的宠物品种数据集。此数据集包含大约 7,400 张图像 - 37 种不同的猫狗品种约有 200 张图像。每个图像都有一个相关的注释文件,其中包含特定宠物在图像中所在位置的边界框坐标。我们无法将这些图像和注释直接提供给我们的模型;我们需要将它们转换为模型可以理解的格式。为此,我们将使用 TFRecord 格式。

为了直接开始训练,我们已经将 pet_faces_train.recordpet_faces_val.record 文件公开提供,您可以从这里获取。您可以使用公共 TFRecord 文件,或者如果您想自己生成它们,请按照此处的步骤操作。

您可以使用以下命令下载并解压缩公共 TFRecord 文件
mkdir /tmp/pet_faces_tfrecord/
cd /tmp/pet_faces_tfrecord/
curl "http://download.tensorflow.org/models/object_detection/pet_faces_tfrecord.tar.gz" | tar xzf -
请注意,这些 TFRecord 文件是分片的,因此在解压缩它们后,您将拥有 10 个 pet_faces_train.record 文件和 10 个 pet_faces_val.record 文件

将数据集上传到 GCS

将您的 TFRecord 文件在本地提供后,将它们复制到您 GCS 存储桶中的 /data 子目录下
gsutil -m cp -r /tmp/pet_faces_tfrecord/pet_faces* gs://${YOUR_GCS_BUCKET}/data/
将您的 TFRecord 文件放入 GCS 后,回到本地机器上的 models/research 目录。接下来,您将在 GCS 存储桶中添加 pet_label_map.pbtxt 文件。这将我们检测到的 37 种宠物品种中的每一种都映射到一个整数,以便我们的模型能够以数值格式理解它们。从 models/research 目录运行以下命令
gsutil cp object_detection/data/pet_label_map.pbtxt gs://${YOUR_GCS_BUCKET}/data/pet_label_map.pbtxt
此时,您应该在 GCS 存储桶的 /data 子目录中拥有 21 个文件:用于训练和测试的 20 个分片 TFRecord 文件以及标签映射文件。

使用 SSD MobileNet 检查点进行迁移学习

从头开始训练模型以识别宠物品种需要数千张每个宠物品种的训练图像以及数小时或数天的训练时间。为了加快速度,我们可以使用迁移学习 - 一种过程,我们将使用已在大量数据上训练以执行类似任务的模型的权重,然后在我们自己的数据上训练该模型,微调来自预训练模型的层。

我们可以使用许多模型,这些模型已针对识别图像中的各种对象进行训练。我们可以使用这些训练模型的检查点,然后将其应用于我们自定义的目标检测任务。这是有效的,因为对于机器来说,识别图像中包含桌子、椅子或猫等基本对象的像素与识别图像中包含特定宠物品种的像素没有太大区别。

在此示例中,我们将使用针对移动设备推理进行了优化的目标检测模型 SSD with MobileNet。首先,下载并解压缩在 COCO 数据集上预训练的最新的 MobileNet 检查点。要查看对象检测 API 支持的所有模型的列表,请查看模型库。解压缩检查点后,将 3 个文件复制到您的 GCS 存储桶中。运行以下命令下载检查点并将其复制到您的存储桶中
cd /tmp
curl -O http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync_2018_07_03.tar.gz
tar xzf ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync_2018_07_03.tar.gz

gsutil cp /tmp/ssd_mobilenet_v1_0.75_depth_300x300_coco14_sync_2018_07_03/model.ckpt.* gs://${YOUR_GCS_BUCKET}/data/
当我们训练模型时,它将使用这些检查点作为训练的起点。现在您应该在 GCS 存储桶中拥有 24 个文件。我们几乎可以运行我们的训练作业了,但是我们需要一种方法来告诉 ML Engine 我们的数据和模型检查点在哪里。我们将使用配置文件来实现这一点,我们将在下一步中设置该文件。我们的配置文件提供了模型的超参数、训练数据的路径、测试数据和初始模型检查点。

使用 Cloud TPU 在 Cloud ML Engine 上训练量化模型

机器学习模型具有两个不同的计算组件:训练推理。在这个例子中,我们利用 Cloud TPU 来加速训练。在配置文件中有一些与 TPU 训练相关的行。在 TPU 上训练时,我们可以使用更大的批次大小,因为 TPU 更容易处理大型数据集(在您自己的数据集上试验批次大小时,确保使用 8 的倍数,因为数据需要平均分配到 8 个 TPU 内核)。使用更大的批次大小,我们可以减少训练步骤的数量(在这个例子中,我们使用 2000)。我们在这个训练作业中使用的焦点损失函数,在配置文件中的以下几行中定义,也非常适合 TPU
loss {
  classification_loss {
    weighted_sigmoid_focal {
      alpha: 0.75,
      gamma: 2.0
    }
  }
此损失函数计算数据集每个示例的损失,然后重新加权它们,为较难的误分类示例分配更多的相对权重。这种逻辑比其他训练作业中使用的难例挖掘操作更适合 TPU。您可以在Lin 等人(2017)中了解有关焦点损失的更多信息。

回想一下,在上面,初始化一个预训练模型检查点然后添加我们自己的训练数据被称为迁移学习。配置文件中的以下几行告诉我们的模型我们将进行迁移学习
fine_tune_checkpoint: "gs://your-bucket/data/model.ckpt"
fine_tune_checkpoint_type: "detection"
我们还需要考虑我们的模型在训练完成后如何使用。假设我们的宠物检测器成为全球热门,被世界各地的动物爱好者和宠物店使用。我们需要一种可扩展的方式来以低延迟处理这些推理请求。机器学习模型的输出是一个包含我们模型训练权重的二进制文件 - 这些文件通常很大,但由于我们将在移动设备上直接提供此模型,因此我们需要将其尽可能地缩小。

这就是模型量化的用武之地。量化将我们模型中的权重和激活压缩为 8 位定点表示。配置文件中的以下几行将生成一个量化模型
graph_rewriter {
  quantization {
    delay: 1800
    activation_bits: 8
    weight_bits: 8
  }
}
通常,量化模型将以全精度训练一定数量的步骤,然后切换到量化训练。上面的delay数字告诉 ML Engine 在 1800 个训练步骤后开始量化我们的权重和激活。

要告诉 ML Engine 在哪里查找我们的训练和测试文件以及模型检查点,您需要更新我们为您创建的配置文件中的几行,以指向您的存储桶。从研究目录中,找到object_detection/samples/configs/ssd_mobilenet_v1_0.75_depth_quantized_300x300_pets_sync.config。使用您在 GCS 存储桶中的数据目录的完整路径更新所有PATH_TO_BE_CONFIGURED字符串。例如,配置文件的train_input_reader部分将如下所示(确保将YOUR_GCS_BUCKET替换为您存储桶的名称)
train_input_reader: {
  tf_record_input_reader {
    input_path: "gs://YOUR_GCS_BUCKET/data/pet_faces_train*"
  }
  label_map_path: "gs://YOUR_GCS_BUCKET/data/pet_label_map.pbtxt"
}
然后将这个量化配置文件复制到您的 GCS 存储桶中
gsutil cp object_detection/samples/configs/ssd_mobilenet_v1_0.75_depth_quantized_300x300_pets_sync.config gs://${YOUR_GCS_BUCKET}/data/pipeline.config
在 Cloud ML Engine 上启动我们的训练作业之前,我们需要打包对象检测 API、pycocotools 和 TF Slim。我们可以使用以下命令来完成(从research/目录运行,注意括号是命令的一部分)
bash object_detection/dataset_tools/create_pycocotools_package.sh /tmp/pycocotools
python setup.py sdist
(cd slim && python setup.py sdist)
我们准备训练我们的模型了!要开始训练,运行以下 gcloud 命令
gcloud ml-engine jobs submit training `whoami`_object_detection_`date +%s` \
--job-dir=gs://${YOUR_GCS_BUCKET}/train \
--packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz,/tmp/pycocotools/pycocotools-2.0.tar.gz \
--module-name object_detection.model_tpu_main \
--runtime-version 1.8 \
--scale-tier BASIC_TPU \
--region us-central1 \
-- \
--model_dir=gs://${YOUR_GCS_BUCKET}/train \
--tpu_zone us-central1 \
--pipeline_config_path=gs://${YOUR_GCS_BUCKET}/data/pipeline.config
注意,如果您收到一条错误消息,说没有可用的 Cloud TPU,建议您简单地在另一个区域中重试(Cloud TPU 目前在 us-central1-b、us-central1-c、europe-west4-a 和 asia-east1-c 可用)。

在我们启动训练作业后,立即运行以下命令来启动评估作业
gcloud ml-engine jobs submit training `whoami`_object_detection_eval_validation_`date +%s` \
--job-dir=gs://${YOUR_GCS_BUCKET}/train \
--packages dist/object_detection-0.1.tar.gz,slim/dist/slim-0.1.tar.gz,/tmp/pycocotools/pycocotools-2.0.tar.gz \
--module-name object_detection.model_main \
--runtime-version 1.8 \
--scale-tier BASIC_GPU \
--region us-central1 \
-- \
--model_dir=gs://${YOUR_GCS_BUCKET}/train \
--pipeline_config_path=gs://${YOUR_GCS_BUCKET}/data/pipeline.config \
--checkpoint_dir=gs://${YOUR_GCS_BUCKET}/train
训练和评估都应该在大约 30 分钟内完成。在它们运行的同时,您可以使用 TensorBoard 来查看模型的准确率。要启动TensorBoard,运行以下命令
tensorboard --logdir=gs://${YOUR_GCS_BUCKET}/train
注意,您可能需要先运行gcloud auth application-default login

导航到localhost:6006以查看您的 TensorBoard 输出。在这里,您将看到一些用于分析模型准确性的通用 ML 指标。注意,这些图表只绘制了 2 个点,因为模型在很少的步骤中快速训练(如果您之前使用过 TensorBoard,您可能习惯在这里看到更多曲线)。这里的第一点是在训练过程的早期,最后一个点显示了最后一步(第 2000 步)的指标。

首先,让我们看看 0.5 IOU 的平均精度均值([email protected])的图表
screenshot of TensorBoard
平均精度均值衡量我们模型对所有 37 个标签的正确预测的百分比。IoU 是对象检测模型特有的,代表交并比。这衡量了我们模型生成的边界框和真实边界框之间的重叠,以百分比表示。此图表正在测量我们的模型返回的正确边界框和标签的百分比,其中“正确”在这种情况下指的是与相应的真实框重叠 50% 或更多的边界框。训练结束后,我们的模型达到了 82% 的平均精度均值。

接下来,查看 TensorBoard 中的图像选项卡
images tab in TensorBoard
在左边的图像中,我们看到模型对这张图像的预测,在右边我们看到正确的真实框。边界框非常准确,但我们的模型在这特定情况下对标签的预测不正确。没有哪个 ML 模型是完美的。😉

在移动设备上使用 TensorFlow Lite 运行

此时,您已经拥有了一个经过全面训练的宠物检测器,您可以使用它在浏览器中测试您自己的图像,而无需使用任何设置,只需使用这个 Colab 笔记本即可。要在手机上实时运行此模型,需要做一些额外的工作 - 在本节中,我们将向您展示如何使用TensorFlow Lite来获得更小的模型,并让您利用为移动设备优化的操作。TensorFlow Lite 是 TensorFlow 的轻量级解决方案,适用于移动设备和嵌入式设备。它支持低延迟和小二进制文件大小的设备上机器学习推理。TensorFlow Lite 使用许多技术来实现这一点,例如允许更小、更快(定点数学)模型的量化内核。

如上所述,在本节中,您将需要使用提供的Dockerfile,或从源代码构建 TensorFlow(带有 GCP 支持)并安装bazel 构建工具。注意,如果您只想完成本教程的第二部分而不训练模型,我们已经提供了一个预训练模型在这里

为了使这些命令更容易运行,让我们设置一些环境变量
export CONFIG_FILE=gs://${YOUR_GCS_BUCKET}/data/pipeline.config
export CHECKPOINT_PATH=gs://${YOUR_GCS_BUCKET}/train/model.ckpt-2000
export OUTPUT_DIR=/tmp/tflite
我们首先获取一个具有兼容操作的 TensorFlow 冻结图,我们可以将其用于 TensorFlow Lite。首先,您需要安装这些 python 库。然后要获取冻结图,使用此命令从models/research目录运行export_tflite_ssd_graph.py脚本
python object_detection/export_tflite_ssd_graph.py \
--pipeline_config_path=$CONFIG_FILE \
--trained_checkpoint_prefix=$CHECKPOINT_PATH \
--output_directory=$OUTPUT_DIR \
--add_postprocessing_op=true
/tmp/tflite目录中,您现在应该看到两个文件:tflite_graph.pbtflite_graph.pbtxt示例冻结图在这里)。注意,add_postprocessing标志使模型能够利用定制的优化检测后处理操作,这可以被认为是tf.image.non_max_suppression的替代品。确保不要将export_tflite_ssd_graph与同一目录中的export_inference_graph混淆。两个脚本都输出冻结图:export_tflite_ssd_graph将输出我们可以直接输入 TensorFlow Lite 的冻结图,这也是我们将要使用的那个。

接下来,我们将使用 TensorFlow Lite 通过使用TOCO(TensorFlow Lite 优化转换器)来获取优化后的模型。这将通过以下命令将生成的冻结图(tflite_graph.pb)转换为 TensorFlow Lite flatbuffer 格式(detect.tflite)。从 tensorflow/ 目录运行此命令
bazel run -c opt tensorflow/contrib/lite/toco:toco -- \
--input_file=$OUTPUT_DIR/tflite_graph.pb \
--output_file=$OUTPUT_DIR/detect.tflite \
--input_shapes=1,300,300,3 \
--input_arrays=normalized_input_image_tensor \
--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3'  \
--inference_type=QUANTIZED_UINT8 \
--mean_values=128 \
--std_values=128 \
--change_concat_input_ranges=false \
--allow_custom_ops
此命令在将每个相机图像帧调整大小到 300x300 像素后,获取输入张量normalized_input_image_tensor。量化模型的输出命名为'TFLite_Detection_PostProcess''TFLite_Detection_PostProcess:1''TFLite_Detection_PostProcess:2''TFLite_Detection_PostProcess:3',并代表四个数组:detection_boxes、detection_classes、detection_scores 和 num_detections。此命令中使用的其他标志的文档在这里。如果运行成功,您现在应该在/tmp/tflite目录中看到第三个文件,名为detect.tflite示例 tflite 文件在这里)。此文件包含图形和所有模型参数,可以通过 TensorFlow Lite 解释器在 Android 设备上运行,其大小应该小于 4 Mb。

在 Android 上运行我们的模型

要在设备上运行我们的最终模型,我们需要使用提供的 Dockerfile,或者安装 Android NDK 和 SDK。当前推荐的 Android NDK 版本是14b,可以在NDK 存档页面上找到。请注意,当前版本的 Bazel 与 NDK 版本 15 及更高版本不兼容。Android SDK 和构建工具可以单独下载,也可以作为Android Studio的一部分使用。要构建 TensorFlow Lite Android 演示,构建工具需要 API >= 23(但它将在 API >= 21 的设备上运行)。更多详细信息请参见TensorFlow Lite Android 应用页面

在尝试获取您刚训练的宠物模型之前,首先使用其默认模型运行演示应用程序,该模型是在 COCO 数据集上训练的。要构建演示应用程序,从 tensorflow 目录运行此 bazel 命令
bazel build -c opt --config=android_arm{,64} --cxxopt='--std=c++11' \
//tensorflow/contrib/lite/examples/android:tflite_demo
上面的 apk 将为 64 位架构构建,您可以用--config=android_arm替换它以支持 32 位。现在通过Android 调试桥 (adb) 将演示安装到启用调试的 Android 手机上
adb install bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk
尝试运行此入门应用程序(称为 TFLDetect)并将相机对准人、家具、汽车、宠物等。正常工作的测试应用程序应该看起来像这样。您将看到检测到对象的周围有框,以及它们的标签。正常工作的测试应用程序是使用 COCO 数据集训练的。

一旦您让通用检测器正常工作,用您自定义的宠物检测器替换它就相当简单。我们只需要将应用程序指向我们的新 detect.tflite 文件并为它提供新标签的名称即可。具体来说,我们将使用以下命令将 TensorFlow Lite flatbuffer 复制到应用程序资产目录
cp /tmp/tflite/detect.tflite \
tensorflow/contrib/lite/examples/android/app/src/main/assets
我们现在将编辑 BUILD 文件以指向这个新模型。首先,打开 BUILD 文件tensorflow/contrib/lite/examples/android/BUILD。然后找到 assets 部分,将行"@tflite_mobilenet_ssd_quant//:detect.tflite"(默认指向 COCO 预训练模型)替换为您 TFLite 宠物模型的路径“//tensorflow/contrib/lite/examples/android/app/src/main/assets:detect.tflite”。最后,更改 assets 部分中的最后一行以使用新的标签映射。您最终的 assets 部分应如下所示
assets = [
   "//tensorflow/contrib/lite/examples/android/app/src/main/assets:labels_mobilenet_quant_v1_224.txt",
     "@tflite_mobilenet//:mobilenet_quant_v1_224.tflite",
     "@tflite_conv_actions_frozen//:conv_actions_frozen.tflite",
     "//tensorflow/contrib/lite/examples/android/app/src/main/assets:conv_actions_labels.txt",
     "@tflite_mobilenet_ssd//:mobilenet_ssd.tflite",
     "//tensorflow/contrib/lite/examples/android/app/src/main/assets:detect.tflite",
     "//tensorflow/contrib/lite/examples/android/app/src/main/assets:box_priors.txt",
     "//tensorflow/contrib/lite/examples/android/app/src/main/assets:pets_labels_list.txt",
],
我们还需要告诉我们的应用程序使用新的标签映射。为此,请在文本编辑器中打开 tensorflow/contrib/lite/examples/android/app/src/main/java/org/tensorflow/demo/DetectorActivity.java 文件并找到 TF_OD_API_LABELS_FILE 的定义。将此路径更新为指向您的宠物标签映射文件:“file:///android_asset/pets_labels_list.txt”。请注意,我们已经为您提供了 pets_labels_list.txt 文件。DetectorActivity.java 的这一新部分(大约在第 50 行)现在应该如下所示。
// Configuration values for the prepackaged SSD model.
private static final int TF_OD_API_INPUT_SIZE = 300;
private static final boolean TF_OD_API_IS_QUANTIZED = true;
private static final String TF_OD_API_MODEL_FILE = "detect.tflite";
private static final String TF_OD_API_LABELS_FILE = "file:///android_asset/pets_labels_list.txt";
复制完 TensorFlow Lite 文件并编辑完 BUILD 和 DetectorActivity.java 文件后,使用以下命令重建和重新安装您的应用程序。
bazel build -c opt --config=android_arm{,64} --cxxopt='--std=c++11' \
//tensorflow/contrib/lite/examples/android:tflite_demo
adb install -r bazel-bin/tensorflow/contrib/lite/examples/android/tflite_demo.apk
现在是最好的部分:找到最近的狗或猫,尝试检测它。在 Pixel 2 上,我们每秒获得超过 15 帧。

入门

想要使用您自己的训练数据在 Cloud TPU 上训练对象检测模型吗?深入了解对象检测文档 这里。要标记您自己的图像库,请查看 这些资源 以生成其他知名数据集的 TFRecord 文件。我们很乐意收到您的贡献和反馈。在本文发表评论,或在 GitHub 上提交 PR 或 issue。

感谢所有为本次发布做出贡献的人:Derek Chow、Aakanksha Chowdhery、Jonathan Huang、Zhichao Lu、Vivek Rathod、Ronny Votel、Pengchong Jin、Xiangxin Zhu 以及以下同事的指导和建议:Vasu Agrawal、Sourabh Bajaj、Chiachen Chou、Tom Jablin、Wenzhe Li、Tsung-Yi Lin、Hernan Moraldo、Kevin Murphy、Sara Robinson、Andrew Selle、Shashi Shekhar、Yash Sonthalia、Zak Stone、Pete Warden、Menglong Zhu。
下一篇文章
Training and serving a realtime mobile object detector in 30 minutes with Cloud TPUs

发布者:Sara RobinsonAakanksha ChowdheryJonathan Huang

如果您能够更快地训练和提供对象检测模型,会怎么样?我们听到了您的反馈,今天我们很高兴地宣布支持在 Cloud TPU 上训练对象检测模型、模型量化以及添加新的模型,包括 RetinaNet 和 RetinaNet 的 MobileNet 改编。您可以查看…