为 detectron2 做贡献

问题

我们使用 GitHub 问题跟踪公共错误和问题。请确保在报告任何问题时遵循以下之一 问题模板.

Facebook 有一个 漏洞赏金计划 用于安全漏洞的安全披露。在这种情况下,请按照该页面上的概述流程操作,不要发布公共问题。

拉取请求

我们积极欢迎拉取请求。

但是,如果您添加任何重大功能(例如 > 50 行),请确保在发送 PR 之前与维护者讨论您的动机和提案。这样做是为了节省您的时间,这样您就不会花时间在我们将不会接受的 PR 上。

我们并不总是接受新功能,我们会考虑以下因素

  1. 是否可以在不修改 detectron2 的情况下实现相同的功能。detectron2 的设计使得您可以从外部实现许多扩展,例如 项目 中的扩展。

    • 如果 detectron2 的某些部分不够可扩展,您也可以提出一个更通用的问题来改进它。此类功能请求可能对更多用户有用。

  2. 该功能是否对大量用户潜在有用(例如,有影响力的检测论文、流行的数据集、显著的加速、广泛有用的实用程序),或者只对一小部分用户有用(例如,鲜为人知的论文、非目标检测领域中的改进、社区中不太流行的技巧、处理非标准类型数据的代码)

    • 默认情况下,在这些模型、数据集、新任务在社区中获得显著普及之前,不会添加到 detectron2 中。我们有时会在 projects/ 中接受此类功能,或者作为 projects/README.md 中的链接。

  3. 所提出的解决方案的设计/接口是否良好。这可以在 PR 之前在问题中进行讨论,或者以草案 PR 的形式进行讨论。

  4. 所提出的解决方案是否会给不需要此功能的用户带来额外的精神/实际负担。

  5. 所提出的解决方案是否会破坏现有的 API。

要向现有函数/类 Func 添加功能,始终有两种方法:(1) 向 Func 添加新参数;(2) 编写新的 Func_with_new_feature。为了满足上述标准,我们通常更喜欢方法 (2),因为

  1. 它不涉及修改或可能破坏现有代码。

  2. 它不会给不需要新功能的用户增加负担。

  3. 向函数/类添加新参数在未来所有可能的新的研究思想方面不可扩展。

发送 PR 时,请执行以下操作

  1. 如果 PR 包含多个正交更改,请将其拆分为多个 PR。

  2. 如果您添加了需要测试的代码,请添加测试。

  3. 对于需要实验的 PR(例如添加新模型或新方法),您不需要更新模型库,但请在 PR 的描述中提供实验结果。

  4. 如果更改了 API,请更新文档。

  5. 我们在 python 中使用 Google 风格文档字符串

  6. 确保您的代码使用 ./dev/linter.sh 进行 lint 检查。

贡献者许可协议 (“CLA”)

为了接受您的拉取请求,我们需要您提交 CLA。您只需要这样做一次就可以处理 Facebook 的任何开源项目。

在此完成您的 CLA:https://code.facebook.com/cla

许可证

通过为 detectron2 做贡献,您同意您的贡献将在此源代码树根目录中的 LICENSE 文件下获得许可。