Ultralytics オープンソースプロジェクトへの貢献
ようこそ私たちは、あなたが私たちの Ultralyticsオープンソースプロジェクトへの貢献をご検討いただいていることに感激しています。あなたの参加は、私たちのリポジトリの品質を向上させるだけでなく、コンピュータビジョンコミュニティ全体に利益をもたらします。このガイドは、あなたが始めるのに役立つ明確なガイドラインとベストプラクティスを提供します。
見るんだ: Ultralytics リポジトリへの貢献方法|Ultralytics モデル、データセット、ドキュメンテーションUltralytics
🤝 行動規範
誰もが歓迎され、包容力のある環境を確保するために、すべての貢献者は行動規範を遵守しなければなりません。尊敬、優しさ、プロ意識が私たちのコミュニティの中心です。
🚀 プルリクエストによる貢献
プルリクエスト(PR)の形での貢献を大いに歓迎します。レビュープロセスをできるだけスムーズにするために、以下の手順に従ってください:
- リポジトリをフォークします:まず、関連するUltralytics リポジトリ(例:ultralyticsultralytics)をGitHubアカウントにフォークします。
- ブランチを作る: フォークしたリポジトリに新しいブランチを作成し、変更を反映したわかりやすい名前を付けます (例、
fix-issue-123
,add-feature-xyz
). - 変更を加える:改善や修正を実装します。あなたのコードがプロジェクトのスタイル・ガイドラインを遵守し、新たなエラーや警告が発生しないことを確認してください。
- 変更をテストする:投稿する前に、変更をローカルでテストし、期待通りに動作し、リグレッションが発生しないことを確認しましょう。新しい機能を導入する場合は、テストを追加しましょう。
- 変更をコミットする: 簡潔で説明的なコミットメッセージで変更をコミットしてください。変更が特定の問題に対処している場合は、その問題番号を含めてください (例、
Fix #123: Corrected calculation error.
). - プルリクエストを作成する: 自分のブランチから
main
ブランチを作成します。明確なタイトルと、変更の目的と範囲を説明する詳細な説明を記述してください。
📝 CLA署名
わたしたちがあなたのプルリクエストをマージする前に、あなたはわたしたちのコントリビュータライセンス契約(CLA)に署名しなければなりません。この法的合意は、あなたの貢献が適切にライセンスされ、プロジェクトがAGPL-3.0 ライセンスのもとで配布され続けることを保証します。
プルリクエストを送信すると、CLAボットが署名プロセスを案内します。CLAに署名するには、PRにコメントを追加するだけです:
I have read the CLA Document and I sign the CLA
✍️Googleドキュメントストリング
新しい関数やクラスを追加する場合は Googleドキュメント・ストリング 明確で標準化された文書のために。入力と出力の両方を必ず囲む types
を括弧で囲む(例. (bool)
, (np.ndarray)
).
ドクストリングの例
この例は、標準的なGoogledocstringフォーマットを示しています。読みやすくするために、関数の説明、引数、戻り値、例を明確に分けていることに注意してください。
def example_function(arg1, arg2=4):
"""
Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
(bool): True if arguments are equal, False otherwise.
Examples:
>>> example_function(4, 4) # True
>>> example_function(1, 2) # False
"""
return arg1 == arg2
この例では、名前付きリターン変数を文書化する方法を示します。名前付きリターンを使用すると、特に複雑な関数の場合、コードがより自己文書化され、理解しやすくなります。
def example_function(arg1, arg2=4):
"""
Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
equals (bool): True if arguments are equal, False otherwise.
Examples:
>>> example_function(4, 4) # True
"""
equals = arg1 == arg2
return equals
この例では、複数の値を返す関数を文書化する方法を示します。それぞれの戻り値は、わかりやすくするために、型と説明を別々に記述する必要があります。
def example_function(arg1, arg2=4):
"""
Example function demonstrating Google-style docstrings.
Args:
arg1 (int): The first argument.
arg2 (int): The second argument.
Returns:
equals (bool): True if arguments are equal, False otherwise.
added (int): Sum of both input arguments.
Examples:
>>> equals, added = example_function(2, 2) # True, 4
"""
equals = arg1 == arg2
added = arg1 + arg2
return equals, added
注意:Python 複数の値をタプルとして返すとしても(例. return masks, scores
)、わかりやすく、より良いツール統合のために、常に各値を別々に文書化してください。複数の値を返す関数を文書化する場合
✅ 良い - 各リターン値を個別に文書化する:
Returns:
(np.ndarray): Predicted masks with shape HxWxN.
(list): Confidence scores for each instance.
❌ 悪い - 要素を入れ子にしたタプルとして文書化しない:
Returns:
(tuple): Tuple containing:
- (np.ndarray): Predicted masks with shape HxWxN.
- (list): Confidence scores for each instance.
この例では、GoogledocstringとPython 型ヒントを組み合わせています。型ヒントを使う場合、docstringの引数セクションの型情報は関数のシグネチャで既に指定されているので省略できます。
def example_function(arg1: int, arg2: int = 4) -> bool:
"""
Example function demonstrating Google-style docstrings.
Args:
arg1: The first argument.
arg2: The second argument.
Returns:
True if arguments are equal, False otherwise.
Examples:
>>> example_function(1, 1) # True
"""
return arg1 == arg2
小規模または単純な機能の場合は、1行のdocstringで十分な場合があります。大文字で始まりピリオドで終わる、簡潔で完全な文章でなければなりません。
def example_small_function(arg1: int, arg2: int = 4) -> bool:
"""Example function with a single-line docstring."""
return arg1 == arg2
GitHub Actions CI テスト
すべてのプルリクエストは、マージする前にGitHub Actions の 継続的インテグレーション(CI) テストに合格する必要があります。これらのテストには、リンティング、ユニットテスト、その他のチェックが含まれ、あなたの変更がプロジェクトの品質基準を満たしていることを確認します。CI の出力を確認し、問題があれば対処しましょう。
コード貢献のベストプラクティス
Ultralytics プロジェクトにコードを貢献する際には、以下のベストプラクティスを念頭に置いてください:
- コードの重複を避ける:可能な限り既存のコードを再利用し、不要な引数を最小限に抑える。
- より小さく、焦点を絞った変更を行う:大規模な変更ではなく、的を絞った変更に重点を置く。
- 可能な限り単純化する:コードを単純化したり、不要な部分を削除する機会を探す。
- 互換性を考慮する:変更を加える前に、Ultralytics使用している既存のコードを壊す可能性があるかどうかを検討する。
- 一貫した書式を使用する: Ruff Formatterのようなツールは、文体の一貫性を保つのに役立ちます。
- 適切なテストを追加する:新機能が期待通りに動作することを確認するためのテストを含める。
プルリクエストのレビュー
プルリクエストをレビューすることも、貢献するための貴重な方法です。PRをレビューするとき
- ユニットテストをチェックする:PRに新機能や変更点のテストが含まれていることを確認する。
- 文書の更新を確認する:変更が反映された文書が更新されていることを確認する。
- パフォーマンスへの影響を評価する:変更がパフォーマンスにどのような影響を与えるかを検討する。
- CIテストの検証すべての継続的インテグレーションのテストがパスしていることを確認する。
- 建設的なフィードバックを提供する:問題や懸念について、具体的で明確なフィードバックを提供する。
- 努力を認める:前向きな共同作業の雰囲気を維持するために、著者の努力を認める。
バグの報告
私たちは、プロジェクトの品質と信頼性を向上させるために、バグ報告を非常に重視しています。GitHub Issuesでバグを報告する場合:
- 既存の問題をチェックするバグがすでに報告されていないか、まず検索してください。
- 最小限の再現可能な例を提供する:問題を一貫して再現する、自己完結型の小さなコード・スニペットを作成する。これは効率的なデバッグのために非常に重要です。
- 環境について説明してください: オペレーティング・システム、Python バージョン、関連するライブラリのバージョン(例、
torch
,ultralytics
)、ハードウェア(CPU/GPU). - 予想された行動と実際の行動を説明する:予想されたことと実際に起こったことを明確に述べる。エラーメッセージやトレースバックも含める。
ライセンス
Ultralytics 、リポジトリにGNU Affero General Public License v3.0 (AGPL-3.0)を使用しています。このライセンスは、ソフトウェア開発における開放性、透明性、共同改善を促進します。このライセンスは、すべてのユーザーがソフトウェアを使用、変更、共有する自由を保証し、コラボレーションとイノベーションの強力なコミュニティを育成します。
私たちは、Ultralytics オープンソースコミュニティに効果的かつ倫理的に貢献するために、すべての貢献者がAGPL-3.0 ライセンスの条項を熟知することを推奨します。
🌍AGPL-3.0もとで、あなたのYOLO プロジェクトをオープンソースにしましょう。
あなたのプロジェクトでUltralytics YOLO モデルまたはコードを使用していますか?AGPL-3.0 ライセンスは、あなたの派生作品全体もAGPL-3.00でオープンソース化することを要求しています。これにより、オープンソースの基盤の上に構築された修正や大規模なプロジェクトがオープンであり続けることが保証されます。
なぜAGPL-3.0 準拠が重要なのか
- ソフトウェアをオープンに保つ:改良と派生作品がコミュニティに利益をもたらすようにする。
- 法的要件: AGPL-3.0 ライセンスされたコードを使うことは、あなたのプロジェクトをその条項に拘束します。
- コラボレーションを促進する:共有と透明性を奨励する。
プロジェクトをオープンソースにしたくない場合は、エンタープライズ・ライセンスの取得をご検討ください。
AGPL-3.0準拠する方法
準拠とは、あなたのプロジェクトの対応するソースコード全体を AGPL-3.0 ライセンスのもとで公に利用可能とすることを意味します。
-
出発点を選ぶ:
- Ultralytics YOLOフォークする: Ultralytics YOLO リポジトリに密接にビルドする場合は、Ultralytics YOLO リポジトリを直接フォークする。
- Ultralytics テンプレートを使用する: Ultralytics テンプレートリポジトリを使用して、YOLO統合するクリーンでモジュール化されたセットアップを開始します。
-
プロジェクトのライセンスを取得する:
- 追加
LICENSE
の全文を含む。 AGPL-3.0 ライセンス. - 各ソースファイルの先頭に、ライセンスを示す表示を追加する。
- 追加
-
ソースコードを公開する:
- あなたの プロジェクト全体のソースコード GitHubなどで)一般に公開されている。これには以下が含まれる:
- YOLO モデルまたはコードを組み込んだ、より大規模なアプリケーションまたはシステム。
- オリジナルのUltralytics YOLO コードに加えられた修正。
- トレーニング、検証、推論のためのスクリプト。
- モデルのウェイトを変更または微調整した場合。
- 設定ファイル環境設定 (
requirements.txt
,Dockerfiles
). - ウェブアプリケーションの一部であれば、バックエンドとフロントエンドのコード。
- あなたが修正したサードパーティのライブラリ。
- トレーニングデータ(再トレーニングが必要な場合)。
- あなたの プロジェクト全体のソースコード GitHubなどで)一般に公開されている。これには以下が含まれる:
-
文書で明確に:
- 更新
README.md
に、プロジェクトがAGPL-3.00でライセンスされていることを明記する。 - ソースコードからプロジェクトをセットアップ、ビルド、実行する方法についての明確な指示を含める。
- Ultralytics YOLO 適切に属性化し、次のようにリンクする。 原リポジトリ.例
This project utilizes code from [Ultralytics YOLO](https://github.com/ultralytics/ultralytics), licensed under AGPL-3.0.
- 更新
リポジトリの構造例
実用的な構造例については、Ultralytics テンプレートリポジトリを参照してください:
my-yolo-project/
│
├── LICENSE # Full AGPL-3.0 license text
├── README.md # Project description, setup, usage, license info & attribution
├── pyproject.toml # Dependencies (or requirements.txt)
├── scripts/ # Training/inference scripts
│ └── train.py
├── src/ # Your project's source code
│ ├── __init__.py
│ ├── data_loader.py
│ └── model_wrapper.py # Code interacting with YOLO
├── tests/ # Unit/integration tests
├── configs/ # YAML/JSON config files
├── docker/ # Dockerfiles, if used
│ └── Dockerfile
└── .github/ # GitHub specific files (e.g., workflows for CI)
└── workflows/
└── ci.yml
これらのガイドラインに従うことで、AGPL-3.0準拠を保証し、Ultralytics YOLOような強力なツールを可能にするオープンソースのエコシステムをサポートします。
結論
オープンソース Ultralyticsオープンソース YOLO プロジェクトへの貢献に関心をお寄せいただき、ありがとうございます。私たちのソフトウェアの未来を形成し、革新と協力の活気あるコミュニティを構築するためには、皆様の参加が不可欠です。コードの改良、バグの報告、新機能の提案など、あなたの貢献は非常に貴重です。
私たちは、皆さんのアイデアが実現するのを楽しみにしており、物体検出技術の進歩に対する皆さんのコミットメントに感謝しています。一緒に、このエキサイティングなオープンソースの旅で成長し、革新し続けましょう。ハッピーコーディング!🚀🌟
よくあるご質問
Ultralytics YOLO オープンソースのリポジトリに貢献するメリットは?
Ultralytics YOLO オープンソースリポジトリに貢献することで、ソフトウェアが改善され、コミュニティ全体にとってより堅牢で豊富な機能を持つようになります。貢献には、コードの拡張、バグ修正、ドキュメントの改善、新機能の実装などが含まれます。さらに、貢献することで、他の熟練した開発者やその分野の専門家と協力することができ、あなた自身のスキルや評判を高めることができます。コントリビュート開始方法の詳細については、プルリクエストによるコントリビュートセクションを参照してください。
Ultralytics YOLO のコントリビューター・ライセンス契約(CLA)に署名するにはどうすればよいですか?
コントリビューターライセンス契約 (CLA) に署名するには、プルリクエストを送信した後、CLA bot が提供する指示に従ってください。このプロセスにより、あなたの貢献がAGPL-3.0 ライセンスの下で適切にライセンスされ、オープンソースプロジェクトの法的整合性が維持されます。プルリクエストにコメントを追加してください:
I have read the CLA Document and I sign the CLA
詳細については、CLA署名のセクションを参照してください。
Google-style docstringsとは何ですか?また、なぜUltralytics YOLO の投稿に必要なのですか?
Google-スタイルのdocstringは、関数やクラスに対して明確で簡潔なドキュメントを提供し、コードの可読性と保守性を向上させます。これらのdocstringは、関数の目的、引数、戻り値の概要を特定の書式規則で記述します。Ultralytics YOLO に貢献する場合、Google-style docstrings に従うことで、あなたの追加した関数がきちんと文書化され、容易に理解できるようになります。例とガイドラインについては、Google-StyleDocstringsセクションをご覧ください。
自分の変更が GitHub Actions CI のテストに合格していることを確認するにはどうすればよいですか?
プルリクエストをマージする前に、GitHub Actions の継続的インテグレーション (CI) テストに合格する必要があります。これらのテストには、リンティング、ユニットテスト、その他のチェックが含まれ、コードがプロジェクトの品質基準を満たしていることを確認します。CI の出力をレビューし、問題があれば修正する。CI プロセスの詳細とトラブルシューティングのヒントについては、GitHub Actions CI Testsセクションを参照してください。
Ultralytics YOLO リポジトリのバグを報告するには?
バグを報告するには、バグ報告とともに、明確で簡潔な「再現可能な最小限の例(Minimum Reproducible Example)」を提出してください。これは、開発者が問題を素早く特定し、修正するのに役立ちます。あなたの例は最小限のものでありながら、問題を再現するのに十分なものであることを確認してください。バグ報告の詳細な手順については、バグ報告のセクションを参照してください。
自分のプロジェクトでUltralytics YOLO 使用する場合、AGPL-3.0 ライセンスはどのような意味を持つのですか?
あなたのプロジェクトでUltralytics YOLO コードまたはモデル(AGPL-3.00でライセンス)を使用する場合、AGPL-3.0 ライセンスは、あなたのプロジェクト全体(派生物)もAGPL-3.0 0でライセンスされ、その完全なソースコードが一般に公開されることを要求します。これによって、ソフトウェアのオープンソースとしての性質が派生物全体にわたって保たれることが保証されます。これらの要件を満たせない場合は、Enterprise Licenseを取得する必要があります。詳細については、「プロジェクトのオープンソース化」のセクションを参照してください。