文 / Vivek Rathod 和 Jonathan Huang,Google Research
正如我们在今年早些时候举办的 TensorFlow 开发者峰会上所述,我们正在打造更具兼容性的 TF 生态系统,这样您就能够将喜爱的库和模型与 TF 2.x 一起搭配使用。今天,我们很高兴地宣布,TF Object Detection API (OD API) 现已正式支持 TensorFlow 2!
过去一年间,我们对 TF Object Detection API 模型进行了迁移,以便能兼容 TensorFlow 2。如果您经常访问 Object Detection API GitHub 代码库,那么您很可能已经看到过部分新模型。我们的代码库提供 Keras 的深度集成、可访问的分布策略以及方便 Eager Execution 调试;所有能想到的小惊喜均可在 TensorFlow 2 代码库中找到。
具体而言,此版本包含以下内容:
-
兼容 Eager 模式的全新训练、评估、导出二进制文件。
-
一套与 TF2 兼容(基于 Keras)的模型;其中包括迁移后最热门的 TF1 模型(例如 SSD-MoblieNet、RetinaNet、Faster R-CNN 和 Mask R-CNN),以及一些只支持在 TF2 中实现的新架构:(1) CenterNet:基于 Zhou 等人发表的论文《将对象作为点》 (Objects as Points) 得到的一种简单有效的无锚点架构;以及 (2) EfficientDet:近期由神经架构搜索发现得到的最前沿 (SOTA) 模型家族。
-
COCO 预训练权重:可用于所有以基于对象的检查点(TF2 代码风格)形式提供的模型。
-
访问 分布策略 (DistributionStrategies) 进行分布式训练:以往,TF1 模型主要依靠异步训练。而现在我们支持将同步训练作为主要策略;我们的 TF2 模型可使用同步多 GPU 和 TPU 平台进行训练。
-
与 Eager 模式兼容的小样本训练和推理的 Colab 演示。
-
对关键点估测的出色支持:包括多类估测、更多数据的增强支持、更好的可视化效果和 COCO 评估。
如果您想立即尝试这些内容,建议您查看我们全新的 Colab 演示(适用于 推理 和 小样本训练 )。我们在其中加入了一个有趣的示例,是一个演示如何使用基于微调的小样本训练(仅使用五个示例图像!)来训练橡胶鸭子检测器的教程。
通过此次迁移,我们希望在继续支持 TF1 庞大用户群的同时,也可充分发挥 TF2 和 Keras 的优势。可能有很多团队正在努力执行类似的迁移项目,因此我们认为,有必要将我们的思维过程和方法分享出来。即使那些不使用 TensorFlow 对象检测模型的用户,也能从中获得帮助。
目前,使用我们的代码库的用户有三类:(1) 希望利用新功能(Eager 模式训练、分布策略)和新模型的新用户;(2) 想要迁移到 TF2 的现有 TF1 用户;以及 (3) 暂时不希望迁移的现有 TF1 用户。为支持所有的三类用户,我们制定了许多策略,以下是详细介绍:
-
同时在 TF1 和 TF2 中使用重构底层核心和元架构。我们意识到代码库中的绝大部分内容都可以在 TF1 和 TF2 之间共享(例如边界框算法、损失函数、输入流水线、可视化代码等);我们已尽力确保代码能够无限制地在 TF1 或者 TF2 中运行。
-
将特征提取器/主干网络视为特定于 TF1 或 TF2 的对象。我们将继续维护通过 tf-slim 实现的 TF1 主干网络,并引入通过 Keras 实现的 TF2 主干网络。然后,根据用户运行的 TensorFlow 版本,启用或禁用这些模型。
-
利用由社区维护的现有主干网络实现。我们的模型依赖于 Keras 应用 集合(一套由社区维护的封闭式架构)中的实现,而不是通过 Keras 来重新实现主干网络架构(例如 MobileNet 或 ResNet)。我们还验证了,新的 Keras 主干网络准确率能达到或者超出 tf-slim 主干网络(至少在 OD API 已有的模型中是这样的结果)。
-
增加单元测试范围,以覆盖 GPU/TPU、TF1 和 TF2。鉴于我们现在需要确保在多个平台(GPU 和 TPU)以及跨 TF 版本上的功能可用性,我们新设计了一个灵活的单元测试框架。该框架可以在所有四种设置 ({GPU, TPU}x{TF1, TF2}) 下测试 OD API,并且允许禁用某些测试(例如输入流水线未在 TPU 设置下测试)。
-
分离 TF1 和 TF2 的前端二进制文件(训练循环、导出器) 。我们利用各种 分布策略 ,以新的 TF2 训练和导出二进制文件的形式为 TF2 模型添加了一个单独的且能够在 Eager 模式下运行的入口点。
-
无需更改前端配置语言。为了让用户尽可能轻松地从 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。此外,我们正在致力于为研究人员提供集成度更高的端到端体验,如:更为易于使用的模型,我们即将迈出的第一步便是推出统一计算机视觉库,敬请期待。
与往常一样,您可以随时通过 GitHub 向我们提出问题和提供反馈。我们衷心感谢开源社区的开发者们提供的帮助。另外,如果此前您是 TensorFlow Object Detection API 的 TF1.x 用户,而 TF2 流水线尚不支持您非常喜欢的某个功能,那么我们建议您在 GitHub 上积极分享自己的想法与建议,这将有助于我们在继续发布功能/模型时确定优先级。
致谢
本次发布是 Google Research 中多个团队密切合作的成果。我们要着重说明以下人员所做的贡献:首先,特别感谢 Tomer Kaftan 和 Liangyanhui,他们是这个项目的发起者,并在起步阶段完成了大部分的繁重工作。* 其次,我们要感谢以下 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
中文:TensorFlow 微信公众号