磐创AI分享
来源 | TensorFlow
作者 | Vivek Rathod 和 Jonathan Huang,Google Research
正如我们在今年早些时候举办的 TensorFlow 开发者峰会上所述,我们正在打造更具兼容性的 TF 生态系统,这样您就能够将喜爱的库和模型与 TF 2.x 一起搭配使用。今天,我们很高兴地宣布,TF Object Detection API (OD API) 现已正式支持 TensorFlow 2!
- TF Object Detection API https://github.com/tensorflow/models/tree/master/research/object_detection
过去一年间,我们对 TF Object Detection API 模型进行了迁移,以便能兼容 TensorFlow 2。如果您经常访问 Object Detection API GitHub 代码库,那么您很可能已经看到过部分新模型。我们的代码库提供 Keras 的深度集成、可访问的分布策略以及方便 Eager Execution 调试;所有能想到的小惊喜均可在 TensorFlow 2 代码库中找到。
- TensorFlow 2 https://tensorflow.google.cn/guide/effective_tf2
- Object Detection API GitHub 代码库https://github.com/tensorflow/models/tree/master/research/object_detection
具体而言,此版本包含以下内容:
- 兼容 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 评估。
- 分布策略 https://tensorflow.google.cn/guide/distributed_training
如果您想立即尝试这些内容,建议您查看我们全新的 Colab 演示(适用于推理和小样本训练)。我们在其中加入了一个有趣的示例,是一个演示如何使用基于微调的小样本训练(仅使用五个示例图像!)来训练橡胶鸭子检测器的教程。
- 推理https://github.com/tensorflow/models/blob/master/research/object_detection/colab_tutorials/inference_tf2_colab.ipynb
- 小样本训练https://github.com/tensorflow/models/blob/master/research/object_detection/colab_tutorials/eager_few_shot_od_training_tf2_colab.ipynb
通过此次迁移,我们希望在继续支持 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-slim https://github.com/google-research/tf-slim
- Keras 应用 https://tensorflow.google.cn/api_docs/python/tf/keras/applications
- 分布策略 https://tensorflow.google.cn/guide/distributed_training
我们致力于增强 TF 生态系统中 TF2 的兼容性并简化其使用流程,本次发布只是我们研究过程中取得的进展之一。在接下来的几个月里,我们会继续将大型代码库从 TF1 迁移到 TF2。此外,我们正在致力于为研究人员提供集成度更高的端到端体验,如:更为易于使用的模型,我们即将迈出的第一步便是推出统一计算机视觉库,敬请期待。
与往常一样,您可以随时通过 GitHub 向我们提出问题和提供反馈。我们衷心感谢开源社区的开发者们提供的帮助。另外,如果此前您是 TensorFlow Object Detection API 的 TF1.x 用户,而 TF2 流水线尚不支持您非常喜欢的某个功能,那么我们建议您在 GitHub 上积极分享自己的想法与建议,这将有助于我们在继续发布功能/模型时确定优先级。
- GitHub https://github.com/tensorflow/models/issues
致谢
本次发布是 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。