如何贡献 🚀
欢迎!我们很高兴您考虑为 Ultralytics 开源项目做出贡献。您的参与有助于提高我们代码仓库的质量,并使整个计算机视觉社区受益。
完整指南
有关全面的贡献指南,另请参阅我们主要文档中的Ultralytics官方贡献指南。
观看:为 Ultralytics 做贡献
快速入门指南 🎯
准备好贡献了吗?请按照以下步骤操作:
- 阅读我们的行为准则 - 尊重、友善和专业
- Fork 你想要贡献的仓库
- 创建一个具有描述性名称的特性分支
- 按照编码标准进行更改
- 为新功能编写测试
- 提交包含清晰描述的 pull request
- 签署 CLA,在你的 PR 中评论
- 回复审阅者的反馈意见
有关详细的PR流程,请参阅开发工作流程。
贡献指南 📋
行为准则 🤝
所有贡献者都必须遵守我们的行为准则,该准则基于贡献者公约。这确保了每个人都能在一个热情和包容的环境中工作。尊重、友善和专业是我们社区的核心。
贡献者许可协议 (CLA) 📝
在合并您的PR之前,您必须签署我们的CLA(贡献者许可协议)。这项法律协议确保贡献内容已根据AGPL-3.0获得适当许可,从而保护您和项目。
提交PR后,CLA机器人将指导您完成签署。要签署,请评论:
CLA涵盖:
- 您贡献内容的版权和专利许可
- Ultralytics使用和分发您的作品的权利
- 您拥有贡献内容权利的声明
- 免责声明
请查看完整的CLA文档以了解完整的条款。
最佳实践 ✨
贡献代码时:
- 避免重复:尽可能重用现有代码
- 进行较小的更改:专注于修改,而不是大规模的更改
- 简化:寻找简化的机会
- 考虑兼容性:避免破坏现有代码
- 使用一致的格式:遵循Ruff Formatter
- 添加测试:为新功能添加测试
- 更新文档:保持文档的及时性
编码标准 📐
- 文档字符串:使用Google风格的文档字符串,并在括号中注明类型
- 行宽:最多120个字符
- 导入:使用
pathlib代替os - 测试:所有PR都必须通过CI测试
- 类型提示:在有益的地方使用
请参阅开发工作流程,了解完整的编码标准。
贡献方式 🌟
代码贡献 💻
文档 📚
测试 🧪
社区支持 💬
- 回答GitHub Discussions中的问题。
- 在Discord上帮助用户。
- 审查 pull requests。
- 问题分类。
问题报告 🐞
通过 GitHub Issues 报告错误,帮助我们改进:
Bug报告要求
- 检查现有问题以避免重复。
- 创建 最小可复现示例 (MRE) - 重现该问题的小型、独立的程式码。
- 描述环境:操作系统、Python 版本、库版本、硬件 (CPU/GPU)。
- 解释预期行为与实际行为,并提供错误消息和回溯。
如何撰写优秀的MRE
最小可复现示例应:
- 隔离问题:删除不必要的程式码。
- 使用公共模型和数据集例如:
yolov8n.pt和coco8.yaml - 包含依赖项例如:包含
yolo checks或pip list - 提供清晰的描述:预期行为与实际行为
- 格式正确:使用带有三个反引号的代码块
- 可测试:其他人无需修改即可运行
有关详细说明,请参阅完整的 MRE 指南。
审查Pull Requests 👀
审查 PR 是有价值的贡献:
- 检查单元测试:验证新功能的测试
- 审查文档:确保文档已更新
- 评估性能:考虑对速度/内存的影响
- 验证 CI 测试:确认所有测试均通过
- 提供建设性的反馈:具体且有帮助
- 认可贡献:感谢贡献者
许可信息 📜
AGPL-3.0 许可
Ultralytics 的存储库使用 AGPL-3.0。这有助于提高开放性、透明度和协作改进。
在你的项目中使用YOLO
如果您在项目中使用 Ultralytics YOLO 模型或代码,则 AGPL-3.0 要求您的整个衍生作品也必须在 AGPL-3.0 下开源。
为什么合规性很重要:
- 保持软件开放以造福社区
- 使用 AGPL-3.0 代码时的法律要求
- 促进协作和透明度
替代方案: 如果您不想开源您的项目,请获得 企业许可证。
如何遵守AGPL-3.0
在 AGPL-3.0 下公开发布完整的源代码:
-
选择起点:
-
为你的项目授权许可:
- 添加
LICENSE包含完整 AGPL-3.0 文本的 - 文件在内
- 添加
-
在源文件顶部添加许可声明
-
如果可重新分发,则包括训练数据
- README/
README/ - 在
- 中声明 AGPL-3.0 许可
- README/
包含设置说明
我们的开发团队 👥
如有疑问,请随时联系团队成员寻求指导:
| 姓名 | GitHub 个人资料 |
|---|---|
| Abrish Sabri | asabri97 |
| Abirami Vina | abirami-vina |
| Alexis Schutzger | picsalex |
| Burhan Qaddoumi | Burhan-Q |
| Fatih Akyon | fcakyon |
| Francesco Mattioli | ambitious-octopus |
| Giovanni Dal Zillio | ggg-dz-ultralytics |
| Glenn Jocher | glenn-jocher |
| Hannah Streif | HannahStreif |
| Jake Qian | fengqianjake |
| Jing Qiu | Laughing-q |
| Joey Tjon | NoCodeJoey |
| Jordan Cooper | JCoops1 |
| Kasim Acikbas | kayselmecnun |
| Kirill Viarbitski | Kverbitski |
| Kiryl Oblikau | munknex |
| Kristian Sommer | sokrisba |
| Lakshantha Dissanayake | lakshanthad |
| Marius Keiser | Skillnoob |
| Mohammed Yasin | Y-T-G |
| Muhammad Rizwan Munawar | RizwanMunawar |
| Mykola Boiko | mykolaxboiko |
| Nicolai Nielsen | niconielsen32 |
| Nuvola Ladi | NLadi |
| Onuralp Sezer | onuralpszr |
| Pablo Karnbaum | pablokarnbaum |
| Paula Derrenger | pderrenger |
| Prateek Bhatnagar | prateek-ultralytics |
| Rick Hou | Bovey0809 |
| Ryan Leonel Somali | ryanleonels |
| Sergiu Waxmann | sergiuwaxmann |
| Thomas Chuang | chuang091 |
| William Beaven | william-beaven |
| Yogendra Singh | yogendrasinghx |
| Tigran Hakobyan | tthakz |
| Zinnia Pourdad | zinnialp |
| Shuai (Louis) Lyu | ShuaiLYU |
| Abi Anderson | UltralyticsAbi |
| Jin Xu | laodouya |
| Zuzana Kontrikova | zkontri |
| Miles Deans | miles-deans-ultralytics |
| Mengyu (Mason) Liu | lmycross |
| 克雷格·麦克斯韦尔 | 克雷格-发货 |
| 安德烈·巴尼卡 | ultralytics |
获取支持 💬
有问题或需要帮助吗?
- 在 GitHub 上开启一个 issue
- 加入 GitHub Discussions
- 在 Discord 上联系
- 查看文档
- 访问帮助中心
- 浏览 Ultralytics 博客,获取教程和指南
- 探索 解决方案,了解特定行业的应用
感谢您!🎉
感谢您对 Ultralytics 开源项目贡献的兴趣。 您的参与对于塑造我们软件的未来以及建立充满活力的创新和协作社区至关重要。
我们很高兴看到您的想法变为现实,并感谢您对推进目标detect技术的承诺。 让我们一起继续成长和创新! 🚀🌟
资源 📚
- 官方贡献指南 - 完整的贡献指南
- 开发工作流程 - PR 流程和代码标准
- CI/测试 - 测试和质量检查
- 文档工作流程 - 编写文档
- 行为准则 - 社区标准
- CLA 文档 - 贡献者许可协议
- MRE 指南 - Bug 报告最佳实践
- Ultralytics 博客 - 教程和案例研究
- 社区活动 - 网络研讨会和会议
- 客户案例 - 真实世界的应用
