TensorFlow 2 与目标检测 API 相遇
2020 年 7 月 10 日
发表者:Vivek RathodJonathan Huang,Google Research


在今年早些时候的 TF Dev Summit 上,我们提到我们正在使更多 TF 生态系统兼容,以便您最喜欢的库和模型能够与 TF 2.x 协同工作。今天,我们很高兴地宣布 TF 目标检测 API (OD API) 正式支持 TensorFlow 2!

在过去的一年中,我们一直在迁移我们的 TF 目标检测 API 模型以使其与 TensorFlow 2 兼容。如果您是 目标检测 API GitHub 代码库 的常客,您可能已经看到了这些新模型的片段。我们的代码库提供了紧密的 Keras 集成、访问分布式策略、使用急切执行进行轻松调试;所有这些都是人们从 TensorFlow 2 代码库中期望得到的优点。具体来说,此版本包括
  • 用于训练/评估/导出的新二进制文件,它们与急切模式兼容。
  • 一套与 TF2 兼容的(基于 Keras 的)模型;这包括我们最受欢迎的 TF1 模型(例如,带 MobileNet 的 SSD、RetinaNet、Faster R-CNN、Mask R-CNN)的迁移,以及一些我们只维护 TF2 实现的新架构:(1)CenterNet - 基于 Zhou 等人最近的 Objects as Points 论文的简单有效的无锚点架构,以及(2)EfficientDet --- 近期在神经架构搜索的帮助下发现的 SOTA 模型系列。
  • COCO 预训练权重,用于所有模型,以 TF2 风格的基于对象的检查点提供
  • 访问 DistributionStrategies 以进行分布式训练:传统上,我们主要依赖异步训练来训练我们的 TF1 模型。我们现在支持同步训练作为主要策略;我们的 TF2 模型旨在使用同步多 GPU 和 TPU 平台进行训练
  • 急切模式兼容的 少量样本训练推理 的 Colab 演示
  • 对关键点估计的一流支持,包括多类估计、更多数据增强支持、更好的可视化效果和 COCO 评估。
如果您想立即上手,我们建议您查看我们闪亮的新 Colab 演示(用于 推理少量样本训练)。作为一个有趣的例子,我们包含了一个教程,演示了如何使用基于少量样本训练的微调来训练橡胶鸭子检测器(仅使用五个示例图像!)。

我们这次迁移的理念是展现 TF2 和 Keras 的所有优点,同时继续支持我们广泛的用户群,他们仍然使用 TF1。我们相信,可能会有很多团队在处理类似的迁移项目,因此我们认为这里关于我们思路和方法的一些话可能对非目标检测 TensorFlow 用户也有用。

我们代码库的用户现在分为三类:(1)希望利用新功能(急切模式训练、分布式策略)和新模型的新用户,(2)希望迁移到 TF2 的现有 TF1 用户,以及(3)希望暂时不迁移的现有 TF1 用户。为了支持所有三类用户,我们遵循了许多下面详细介绍的策略
  • 重构低级核心和元架构以在 TF1 和 TF2 中同时工作。我们意识到我们的代码库中的大部分可以在 TF1 和 TF2 中共享(例如,边界框算术、损失函数、输入管道、可视化代码等);在可能的情况下,我们已尽力确保我们的代码对是在 TF1 下运行还是在 TF2 下运行保持不可知状态。
  • 将特征提取器/骨干视为特定于 TF1 或 TF2。我们继续维护我们的 TF1 骨干,这些骨干是在 tf-slim 中实现的,并引入了在 Keras 中实现的 TF2 骨干。然后,根据用户运行的 TensorFlow 版本,这些模型将被启用或禁用。
  • 利用社区维护的现有骨干实现。我们的模型没有在 Keras 中重新实现骨干架构(例如 MobileNet 或 ResNet),而是依赖于 Keras 应用程序 集合中的实现 - 一组社区维护的预置架构。我们还验证了我们新的 Keras 骨干在准确性上保持或超过了可比较的 tf-slim 骨干的准确性(至少对于那些已经存在于 OD API 中的模型而言)。
  • 增加单元测试覆盖率以涵盖 GPU/TPU、TF1 和 TF2。鉴于我们现在需要确保在多个平台(GPU 和 TPU)以及跨 TF 版本上的功能,我们设计了一个新的灵活的单元测试框架,该框架在所有四种设置下测试 OD API 函数({GPU, TPU}x{TF1, TF2}),同时允许禁用某些测试(例如,输入管道不在 TPU 上进行测试)
  • 为 TF1 和 TF2 分开前端二进制文件(训练循环、导出器)。我们在 TF2 模型中添加了一个单独的入口点(以新的 TF2 训练和导出二进制文件形式),这些二进制文件可以在急切模式下运行,利用各种 DistributionStrategies
  • 前端配置语言没有变化。为了使我们的用户尽可能轻松地从 TF1 迁移到 TF2,我们努力确保使用 OD API 配置语言的模型规范在 TF1 和 TF2 中生成等效的模型架构,并且模型可以在两种 TF 版本下训练到相同的数值性能水平。例如,如果您有一个现有的基于 ResNet-50 的 RetinaNet 模型配置,该配置可以使用 TF1 二进制文件进行训练,那么要使用 TF2 二进制文件训练相同的模型,您只需更改配置中特征提取器的名称(在本例中,从 ssd_resnet50_v1_fpn 更改为 ssd_resnet50_v1_fpn_keras);所有其他超参数规范将保持不变。
此版本只是使 TF 生态系统与 TF2 兼容并更易于使用的示例之一。在接下来的几个月里,我们将继续将大型代码库从 TF1 迁移到 TF2。此外,我们正在努力为寻找易于使用的建模方法的研究人员提供 TF 生态系统中更集成、端到端的体验,从即将推出的统一计算机视觉库开始。

与往常一样,请随时通过 GitHub 向我们提出问题和反馈。我们感谢来自开源社区的帮助。特别是,如果您是 TensorFlow 目标检测 API 的先前 TF1.x 用户,并且您非常喜欢但在 TF2 管道中没有看到支持的功能,我们鼓励您告诉我们,因为这可能有助于我们在继续发布功能/模型时确定优先级。

致谢

此版本是 Google Research 内多个团队之间紧密合作的结果。我们特别想突出以下个人的贡献:首先,要特别感谢 Tomer Kaftan 和 Yanhui Liang 启动了整个工作并完成了大部分早期艰苦的工作。我们还要感谢我们主要的 OD API 贡献者:Vighnesh Birodkar、Ronny Votel、Zhichao Lu、Yu-hui Chen、Sergi Caelles Prat、Jordi Pont-Tuset、Austin Myers。我们还感谢许多其他贡献者,包括:Sudheendra Vijayanarasimhan、Sara Beery、Shan Yang、Anjali Sridhar、Karmel Allison、Allen Lavoie、Lu He、Yixin Shi、Derek Chow、David Ross、Pengchong Jin、Jaeyoun Kim、Jing Li、Mingxing Tan、Dan Kondratyuk 和 Tina Tian。最后,我们还要感谢我们的实习生和夏季代码学生对他们的贡献:Kathy Ruan、Kaushik Shivakumar、Yiming Shi、Vishnu Banna、Akhil Chinnakotla 和 Anirudh Vegesana。
下一篇文章
TensorFlow 2 meets the Object Detection API

发表者:Vivek RathodJonathan Huang,Google Research


在今年早些时候的 TF Dev Summit 上,我们提到我们正在使更多 TF 生态系统兼容,以便您最喜欢的库和模型能够与 TF 2.x 协同工作。今天,我们很高兴地宣布 TF 目标检测 API (OD API) 正式支持 TensorFlow 2!

在过去的一年中,我们一直在迁移我们的 TF 目标检测 API m…