如何贡献 🚀
欢迎!我们很高兴您考虑为 Ultralytics 开源项目做出贡献。您的参与有助于提高我们代码仓库的质量,并使整个计算机视觉社区受益。
完整指南
如需了解全面的贡献指南,请参阅我们主要文档中的《 Ultralytics 官方贡献指南》。
观看:为Ultralytics做贡献
快速入门指南 🎯
准备好贡献了吗?请按照以下步骤操作:
- 阅读我们的行为准则 - 尊重、友善和专业
- Fork 您想要贡献的代码仓库
- 创建一个具有描述性名称的特性分支
- 按照编码标准进行更改
- 为新功能编写测试
- 提交包含清晰描述的 Pull Request
- 通过在您的 PR 中评论来签署 CLA
- 回复审阅者的反馈
有关详细的 PR 流程,请参阅 开发工作流程。
贡献指南 📋
行为准则 🤝
所有贡献者都必须遵守我们的行为准则,该准则基于贡献者公约。这确保了每个人都有一个受欢迎和包容的环境。尊重、友善和专业是我们社区的核心。
贡献者许可协议 (CLA) 📝
在我们可以合并您的PR之前,您必须签署我们的CLA。这项法律协议确保贡献已根据AGPL-3.0正确许可,从而保护您和项目。
提交PR后,CLA机器人将指导您。要签名,请评论:
CLA涵盖:
- 您贡献的版权和专利许可
- Ultralytics使用和分发您的作品的权利
- 您拥有贡献权利的声明
- 免责声明
查看完整的CLA文档以获取完整条款。
最佳实践 ✨
贡献代码时:
- 避免重复:尽可能重用现有代码
- 进行较小的更改:专注于修改,而不是大规模更改
- 简化:寻找简化的机会
- 考虑兼容性:避免破坏现有代码
- 使用一致的格式:遵循 Ruff Formatter
- 添加测试:为新功能添加测试
- 更新文档:保持 文档 最新
编码标准 📐
- 文档字符串:使用 Google 风格的文档字符串,并在括号中注明类型
- 行宽:最大 120 个字符
- 导入:使用
pathlib
代替os
- 测试:所有PR必须通过CI测试
- 类型提示:在有益的地方使用
请参阅开发工作流程,了解完整的编码标准。
贡献方式 🌟
代码贡献 💻
文档 📚
测试 🧪
社区支持 💬
- 在GitHub Discussions中回答问题
- 在Discord上帮助用户
- 审查拉取请求
- 问题分类
报告 Bug 🐞
通过GitHub Issues报告错误,帮助我们改进:
错误报告要求
- 检查现有问题,避免重复
- 创建最小可复现示例 (MRE) - 重现该问题的小型、独立的代碼
- 描述环境:操作系统、python版本、库版本、硬件 (CPU/GPU)
- 解释预期行为与实际行为,并提供错误消息和回溯
什么是一个好的最小可复现示例
最小可复现示例应:
- 隔离问题:删除不必要的代码
- 使用公共模型和数据集:例如,
yolov8n.pt
和coco8.yaml
- 包括依赖项:列出
yolo checks
或pip list
- 提供清晰的描述:预期行为与实际行为
- 正确格式化:使用带有三个反引号的代码块
- 可测试:其他人无需修改即可运行它
请参阅完整的MRE 指南,以获取详细说明。
审查拉取请求 👀
审查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 文本文件 - 在源文件顶部添加许可证声明
- 添加
-
发布源代码,包括:
-
清晰地说明:
- 在以下位置声明 AGPL-3.0 许可
README.md
- 包含安装说明
- 适当地署名 Ultralytics YOLO
- 在以下位置声明 AGPL-3.0 许可
有关示例结构,请参见Ultralytics 模板存储库。
我们的开发团队 👥
如有疑问,请随时联系团队成员:
姓名 | 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 |
柳帅(路易斯 | ShuaiLYU |
Abi Anderson | UltralyticsAbi |
Jin Xu | laodouya |
Zuzana Kontrikova | zkontri |
迈尔斯-迪恩斯 | 万里-丹斯-ultralytics数据分析 |
刘梦雨(梅森 | lmycross |
获取支持 💬
有问题或需要帮助吗?
- 在 GitHub 上开启 issue
- 加入 GitHub Discussions
- 在 Discord 上联系
- 查看文档
- 请访问帮助中心
- 浏览Ultralytics 博客,获取教程和指南
- 探索针对特定行业应用的解决方案
谢谢!🎉
感谢您对参与 Ultralytics 开源项目的兴趣。 您的参与对于塑造我们软件的未来以及建立一个充满活力、创新和协作的社区至关重要。
我们很高兴看到您的想法变为现实,并感谢您为推进目标检测技术所做的贡献。 让我们一起继续成长和创新! 🚀🌟
资源 📚
- 官方贡献指南 - 完整的贡献指南
- 开发工作流程 - PR流程和代码标准
- CI/测试 - 测试和质量检查
- 文档工作流程 - 编写文档
- 行为准则 - 社区标准
- CLA 文件 - 贡献者许可协议
- MRE 指南 - Bug 报告最佳实践
- Ultralytics 博客--教程和案例研究
- 社区活动- 网络研讨会和会议
- 客户案例- 现实世界中的应用