YOLOv8 | コード行ごとの分析 (1) | プロジェクトのディレクトリ構造分析

1. この記事の紹介

皆さん、こんにちは。今回ご紹介するのは改善ではなく、YOLOv8 プロジェクト全体の分析です。プロジェクト ディレクトリ構造の分析で、プロジェクト ディレクトリから各機能コードまでのすべてを詳細に説明します。 YOLOv8 改善シリーズも 30 記事を超えました。最終的に、このコラムは引き続き更新され、年末までに何百もの改善チュートリアルが更新される予定です。したがって、コラムを購読していない場合は、事前に下記を購読してください。 YOLOv8 の行ごとの分析の最初の記事、シリーズ全体はおそらく 7 ~ 10 個の記事で更新される予定

始める前に、私のコラムをお勧めしたいと思います。このコラムでは、YOLOv8 改善メカニズムに関する 100 以上の記事を更新しますネットワーク構造では、モデルを入手したものの修正方法や論文の出版方法がわからない読者のために、対象を絞った記事の紹介も提供されます。このコラムの平均品質スコアは 98 ポイントであり、コンテンツの品質は完全に保証されています。

コラム レビュー:YOLOv8 改善シリーズ コラム - このコラムでは引き続き、科学研究に不可欠なさまざまなトップ会議の内容をレビューします。     

目次

1. この記事の紹介

2. プロジェクトのディレクトリ構造の分析

2.1 .github

2.2 ドッカー

2.3 ドキュメント 

2.4 例

2.5 テスト

2. 6 ラン 

2.6 utlralytics (重要なポイント)

2.6.1 資産 

2.6.2 cfg (強調)

2.6.3 データ

2.6.4 エンジン

2.6.5 ハブ

2.6.6 モデル(重要なポイント)

2.6.7 nn (重要なポイント)

2.6.8 解決策

2.6.9 トラッカー

2.6.10 ユーティリティ

2.7 同じディレクトリ内のファイル

 7. この記事の概要


2. プロジェクトのディレクトリ構造の分析

始める前に、全員のソース コード アドレスを分析しましょう ->

公式コード アドレス:YOLO ウェアハウスのダウンロード アドレス

下の写真は倉庫からダウンロードして開いた全体写真で、左側がファイル部分、右側が表示ウィンドウです。​ 

以下はファイルセクションの鮮明なスクリーンショットです。

左側の各ファイルの機能を 1 つずつ分析してみましょう ->


2.1 .github

このディレクトリには次の内容が含まれています。

ISSUE_TEMPLATE:bug-report.yml、config.yml、feature-request.yml、question.yml など、さまざまなタイプの問題レポート テンプレートを提供します。これらのテンプレートは、ユーザーが構造化された方法でバグを報告したり、機能をリクエストしたり、質問したりするのに役立ちます。
  
ワークフロー: ci.yml (継続的インテグレーション)、cla.yml (コントリビューターライセンス契約)、codeql.yml (コード品質など) などの複数のワークフロー ファイルが含まれています。 check)、docker.yml (Docker 構成)、greetings.yml (新しい投稿者に自動的に挨拶)、links.yml、publish.yml (自動公開)、stale.yml (古い問題の処理)。

dependabot.yml (依存関係の自動更新)

これらのファイルを組み合わせることで、コードの品質保証、継続的な統合と展開、コミュニティの対話、依存関係のメンテナンスなどのプロジェクトの自動管理がサポートされます。


2.2 ドッカー

このディレクトリには次の内容が含まれています。

docker ディレクトリには複数の Dockerfile が含まれており、それぞれが異なる環境またはプラットフォーム用に構成されています。次に例を示します。

  • Dockerfile: メインの Docker 構成ファイル。プロジェクトのデフォルトの Docker イメージを構築するために使用されます。
  • Dockerfile-arm64: ARM64 ベースのデバイス (特定の種類のサーバーや高度な組み込みデバイスなど) 用にカスタマイズされた Docker 構成。
  • Dockerfile-conda: Conda パッケージ マネージャーを使用して環境を構成する Docker 構成ファイル。
  • Dockerfile-cpu: GPU アクセラレーションをサポートしない環境用に構成された Docker 構成ファイル。
  • Dockerfile-jetson: NVIDIA Jetson プラットフォーム用にカスタマイズされた Docker 構成。
  • Dockerfile-python: 純粋な Python 環境用の簡素化された Docker 構成である可能性があります。
  • Dockerfile-runner: 継続的統合/継続的デプロイメント (CI/CD) ランタイム環境を構成するために使用できる Docker 構成。

これらの構成ファイルは展開に使用され、ユーザーは自分のニーズに応じてプロジェクトを展開および実行するための適切な環境を選択できます。

2.3 ドキュメント 

docs ディレクトリは通常、複数の言語への翻訳を含むドキュメントを保存するために使用されます。たとえば、このディレクトリには複数のフォルダーがあり、各フォルダーは言語を表します (たとえば、en は英語の文書を表します)。さらに、いくつかの重要な Python スクリプトと構成ファイルについて説明します。

build_docs.py:ドキュメントのビルドとコンパイルのプロセスを自動化する Python スクリプト。
mkdocs.yml: MkDocs 構成ファイル。ドキュメント Web サイトの構造と設定を指定するために使用されます。

mkdocs_es.yml を例に挙げます。これは、スペイン語のドキュメントを作成するために使用される MkDocs 構成ファイルです。同様に、mkdocs_zh.yml は中国語ドキュメントの構築に使用されます。したがって、これらのドキュメントは実際には YOLOv8 の学習とは何の関係もありません。誰もが次のことを理解する必要があるだけです。


2.4 例

サンプル フォルダーでは、さまざまなプログラミング言語とプラットフォームでの YOLOv8 実装例を見つけることができます。

YOLOv8-CPP-Inference: CMakeLists.txt (プロジェクト構築用の CMake 構成ファイル)、inference.cpp、および inference .h (推論に関連するソース コードとヘッダー ファイル)、main.cpp (メイン プログラム エントリ)、および README.md (使用説明書)。

YOLOv8-ONNXRuntime: Python 言語と ONNX ランタイムを使用した YOLOv8 推論の例を提供します。Main.py はメイン スクリプト ファイルで、README.md には例の使用方法が記載されていますご案内です。

YOLOv8-ONNXRuntime-CPP:上記の ONNX ランタイムと似ていますが、対応する CMakeLists.txt、inference.cpp、inference.h、main .cpp を含む C++ で記述されています。ファイルと、サンプルの実行方法を説明する README.md が含まれています。

各例には、対応するドキュメントが付属しています。これは、モデルをデプロイするときに、さまざまな環境で YOLOv8 をデプロイして使用する例です。


2.5 テスト

テスト ディレクトリにはプロジェクトの自動テスト スクリプトが含まれており、各スクリプトはプロジェクトのさまざまな部分をテストします。

conftest.py:テスト構成オプションまたは共有テスト ヘルパー関数が含まれています。
test_cli.py: コマンド ライン インターフェイス (CLI) の機能と動作をテストするために使用されます。
test_cuda.py: プロジェクトが NVIDIA の CUDA テクノロジを正しく使用できるかどうかを具体的にテストして、GPU アクセラレーション機能が正常であることを確認します。
test_engine.py: モデルの読み込みやデータ処理など、基礎となる推論エンジンをテストします。
test_integrations.py: プロジェクトと他のサービスまたはライブラリとの統合が適切に機能するかどうかをテストします。
test_python.py: プロジェクトの Python API インターフェイスが期待どおりに動作するかどうかをテストするために使用されます。

これらのテスト スクリプトは、ファイルを改善、更新、または新機能を追加した後でも、ファイルが引き続き実行されることを確認します。


2. 6 ラン 

このファイルは、モデルのトレーニングが一度成功した後に生成されるファイルであり、各トレーニング後にさまざまな情報が保存されるため、上記のディレクトリ構造にはこのファイルは表示されませんでした。

以下は、トレーニングが成功した後の完全な保存ファイルです。興味がある場合は、各ファイルを詳しく紹介し、ファイルに含まれる各パラメーターについて詳しく説明している私の他の説明を読むことができます。

YOLOv8 パフォーマンス評価指標 ->mAP、精度、リコール、FPS、IoU


2.6 utlralytics (重要なポイント)

上記のファイルのほとんどは、ほとんどの読者にとって実際には役に立ちません。ここでは utralytics ファイルが中心です。、YOLOv8 も含まれます。すべての関数は次のとおりです。ここでは各ディレクトリの機能のみ紹介し、各ファイルの内部コードについては次回以降のブログで詳しく説明していきます。

2.6.1 資産 

このファイルの下には、YOLO の歴史の中で最も古典的な画像が 2 つ保存されています。これらの画像は、誰もが基本的な推論に使用し、テスト用に使用されます。

2.6.2 cfg (強調)

モデル構成ファイルはこのファイルの下に保存されます。cfg ディレクトリは、次のようなプロジェクト構成を集中的に管理する場所です。

datasets フォルダ: データ パス、カテゴリ情報などのデータセットの構成ファイルが含まれます。(つまり、YOLO モデルをトレーニングするときは、データ セット。ここにパーツを保存します。データ セットの yaml ファイルです。トレーニング中にデータ セットを指定しない場合、データ セット ファイルは自動的にダウンロードされます。しかし失敗しやすいのです!)。
models フォルダー: には、モデル構造とトレーニング パラメーターを定義するモデル構成ファイルが保存されます。これは、基本的な yaml ファイルから改良または構成したものです。バージョン。場所、スクリーンショットは次のとおりです ->

モデル フォルダー内の各 .yaml ファイルは、次のような異なる YOLOv8 モデル構成を表します。

yolov8.yaml:   これは、YOLOv8 モデルの標準構成ファイルであり、モデルの基本アーキテクチャとパラメータを定義します。
yolov8-cls.yaml: 構成ファイルは、画像分類タスク専用に YOLOv8 モデルを調整します。
yolov8-ghost.yaml: コンピューティング効率の向上を目的として、Ghost モジュールの YOLOv8 バリアントを適用します。
yolov8-ghost-p2.yaml および yolov8-ghost-p6.yaml: これらのファイルは、特定のサイズの入力に対する Ghost モデルのバリアント構成です。
yolov8-p2.yaml および yolov8-p6.yaml: さまざまな処理レベル (さまざまな入力解像度やモデル深度など) に対応した YOLOv8 モデル構成。
yolov8-pose.yaml: 姿勢推定タスク用にカスタマイズされた YOLOv8 モデル構成。
yolov8-pose-p6.yaml: 姿勢推定タスクのためのより大きな入力解像度またはより複雑なモデル アーキテクチャを目指しています。
yolov8-rtdetr.yaml: リアルタイムの検出と追跡のための YOLOv8 モデルのバリアントを表す場合があります。
yolov8-seg.yaml および yolov8-seg-p6.yaml: これらは、セマンティック セグメンテーション タスク用にカスタマイズされた YOLOv8 モデル構成です。

これらの構成ファイルはモデルのトレーニングとデプロイメントの中核となるものであり、改善を行う場合は同時に、対応するファイルも変更してネットワーク構造を最適化することになります。


trackers フォルダ: は、追跡アルゴリズムの設定に使用されます。
__init__.py ファイル: 「cfg」が Python パッケージであることを示します。
default.yaml: プロジェクトのデフォルト設定ファイル。複数のモジュールで共有される共通の設定項目が含まれます。

このファイルは、トレーニングや一部のタスク選択部分を構成するときに使用されます。具体的な使用方法については、100 を超えるパラメーターの詳細な意味を詳しく説明した私の他のブログを参照してください。

YOLOv8のネットワーク構造/環境構築/データセット取得/学習/推論/検証/エクスポート/デプロイメントの詳細説明

2.6.3 データ

data/scripts フォルダーには、一連のスクリプトと Python ファイルが含まれています。

- download_weights.sh: 事前トレーニングされた重みをダウンロードするために使用されるスクリプト。
- get_coco.sh、get_coco128.sh、get_imagenet.sh: COCO データセットのフル バージョン、128 イメージ バージョン、および ImageNet データセットをダウンロードするためのスクリプト。
  
データ フォルダー内には以下が含まれます:

annotator.py: データ アノテーション用のツール。
augment.py: データ拡張に関連する関数またはツール。
base.py、build.py、converter.py: データ処理のための基本的なクラスまたは関数、データ セットを構築するためのスクリプト、およびデータ形式変換ツールが含まれています。 。
dataset.py: データセットのロードと処理に関連する関数。
loaders.py: データをロードするメソッドを定義します。
utils.py: さまざまなデータ処理に関連する一般的なツール機能。

2.6.4 エンジン

エンジン フォルダーには、モデルのトレーニング、評価、推論に関連するコア コードが含まれています。

exporter.py: は、トレーニングされたモデルを ONNX や TensorRT などの他の形式にエクスポートするために使用されます。
model.py: モデル定義が含まれており、モデルの初期化と読み込みのメソッドも含まれています。
predictor.py: モデルの読み込みや入力データの予測など、推論と予測のロジックが含まれています。
results.py: モデルによって出力された結果を保存および処理するために使用されます。
trainer.py: モデル トレーニング プロセスのロジックが含まれています。
tuner.py: はモデルのハイパーパラメータ調整に使用されます。
validator.py: 検証セットでのモデルのパフォーマンスの評価など、モデル検証のロジックが含まれています。

2.6.5 ハブ

ハブ フォルダーは通常、次のようなプラットフォームまたはサービスの統合に関連する操作を処理するために使用されます。

auth.py: API キー検証や OAuth プロセスなどの認証プロセスを処理します。
session.py: 永続セッションの作成や維持など、セッションを管理します。
utils.py: 認証およびセッション管理機能をサポートするために使用できるいくつかの一般的なユーティリティ関数が含まれています。

2.6.6 モデル(重要なポイント)

このディレクトリの下には、YOLO ウェアハウスに含まれるいくつかのモデルのメソッド実装があります。ここでは YOLO について話していますが、ここでは簡単な紹介にすぎません。次のブログでそれぞれについて個別に説明します。

models/yolo ディレクトリには、YOLO モデルのさまざまなタスク固有の実装が含まれています。

classify: このディレクトリには、画像分類用の YOLO モデルが含まれる場合があります。
detect: 物体検出用の YOLO モデルが含まれています。
pose: 姿勢推定タスク用の YOLO モデルが含まれています。
セグメント: 画像セグメンテーションの YOLO モデルが含まれます。

2.6.7 nn (重要なポイント)

このファイル ディレクトリ内のすべてのファイルは、モデルの一部のコンポーネントを定義するためのものです。その後、改善と最適化を行います。他の構造を追加する場合は、対応するファイルの下に変更を加える必要があります。

モジュール フォルダ:
   __init__.py: は、このディレクトリが Python パッケージであることを示します。
   block.py: 残差ブロックやボトルネック ブロックなど、ニューラル ネットワークの基本ブロックの定義が含まれています。
   conv.py: 畳み込み層に関連する実装が含まれています。
   head.py: 予測用のネットワークのヘッドを定義します。
   transformer.py: Transformer モデルに関連する実装が含まれています。
   utils.py: ニューラル ネットワークの構築時に使用できる補助関数を提供します。

__init__.py: また、このディレクトリを Python パッケージとしてマークします。

autobackend.py: は、最適なコンピューティング バックエンドを自動的に選択するために使用されます。

tasks.py: は、分類、検出、セグメンテーションなど、ニューラル ネットワークを使用して完了するさまざまなタスクのプロセスを定義します。すべてのプロセスは基本的にここで定義されます。モデルを定義する前 すべての通信ここにある。

2.6.8 解決策

__init__.py: は、これが Python パッケージであることを示します。
ai_gym.py: OpenAI Gym 環境でモデルをトレーニングするためのコードなど、強化学習に関連します。
heatmap.py: ヒートマップ データの生成と処理に使用されます。これは、物体の検出やイベントの位置特定で一般的です。
object_counter.py: オブジェクトをカウントするためのスクリプト。画像からインスタンスを検出してカウントするためのロジックが含まれています。

2.6.9 トラッカー

trackers フォルダには、目標追跡機能を実装するスクリプトとモジュールが含まれています。

__init__.py: は、フォルダーが Python パッケージであることを示します。
basetrack.py: トラッカーの基本クラスまたはメソッドが含まれます。
bot_sort.py: SORT アルゴリズム (簡易オンラインおよびリアルタイム追跡) バージョンを実装します。
byte_tracker.py: は、ターゲットをバイト単位で追跡する深層学習に基づくトラッカーです。
track.py: 単一または複数のターゲットを追跡するための特定のロジックが含まれています。
README.md: このディレクトリの内容と使用法について説明します。

2.6.10 ユーティリティ

この utils ディレクトリには、それぞれ特定の関数を持つ複数の Python スクリプトが含まれています。

callbacks.py: トレーニング プロセス中に呼び出されるコールバック関数が含まれています。
autobatch.py​​: トレーニングまたは推論の効率を向上させるバッチ処理の最適化を実装するために使用されます。
benchmarks.py: パフォーマンス ベンチマーク テストに関連する関数が含まれています。
checks.py: パラメーターの検証や環境のチェックなど、プロジェクト内のさまざまなチェックに使用されます。
dist.py: 分散コンピューティングに関連するツールが含まれます。
downloads.py: データやモデルなどのリソースをダウンロードするためのスクリプトが含まれています。
errors.py: エラー処理に関連するクラスと関数を定義します。
files.py: ファイル操作に関連するツール関数が含まれています。
instance.py: オブジェクトまたはモデルをインスタンス化するためのツールが含まれています。
loss.py: 損失関数を定義します。
metrics.py: モデルのパフォーマンスを評価するためのメトリック計算関数が含まれています。
ops.py: 特別な数学演算やデータ変換などのカスタム演算が含まれています。
patches.py: 変更を実装したり、パッチを適用したりするためのツール。
plotting.py: データの視覚化に関連する描画ツールが含まれています。
tal.py: 損失関数のいくつかの関数的応用
torch_utils.py: GFLOP の計算を含む、PyTorch 関連のツールと補助機能を提供します。
triton.py: NVIDIA Triton Inference Server の統合に関連している可能性があります。
tuner.py: モデルまたはアルゴリズムの調整に関連するツールが含まれています。

ここで注目する Ultralytics ファイル ディレクトリ内の機能はすべて紹介されました。ここでは簡単に紹介します。重要な機能のいくつかは、後のブログで詳しく紹介します。


2.7 同じディレクトリ内のファイル

プロジェクトの基本的な構成ファイルとドキュメント ファイルは次のとおりです。

.gitignore: Git 構成ファイルは、Git バージョン管理によって無視されるファイルを指定します。
.pre-commit-config.yaml: コミット前フックの構成ファイル。送信前にコードの品質チェックを自動的に実行するために使用されます。
CITATION.cff: には、このプロジェクトを引用する方法に関する形式の指示が記載されています。
CONTRIBUTING.md: プロジェクトにコードを貢献する方法を説明するガイドライン。
LICENSE: プロジェクトのライセンス情報が含まれます。
MANIFEST.in: Python パッケージを構築および配布するときに含める必要があるファイルのリストです。
README.md および README.zh-CN.md: プロジェクトの説明ファイルはそれぞれ英語版と中国語版です。
requirements.txt: プロジェクトの実行に必要な Python の依存関係をリストします。
setup.cfg および setup.py: プロジェクトのインストールと配布を設定するためのスクリプトが含まれています。

 7. この記事の概要

これでこの記事の内容は完了です。各ファイルの機能を大まかに分析しました。この記事の機能の重要性に基づいて、後でコードを詳しく説明します。ここで私の YOLOv8 改善効果ポイント コラムをお勧めしたいと思います。このコラムは現在新しく開設され、平均品質スコアは 98 です。将来的には、さまざまな最新の最先端のカンファレンスに基づいて論文を再現し、いくつかの記事も作成する予定です。 現在、このコラムは無料で読むことができます(当面の間、皆さんも迷子にならないよう、早めに注意してくださいね~) 2>、この記事が役に立ったと思われる場合は、このコラムを購読し、今後のさらなる更新にご注意ください~

コラム レビュー:YOLOv8 改善シリーズ コラム - このコラムでは引き続き、科学研究に不可欠なさまざまなトップ会議の内容をレビューします。

おすすめ

転載: blog.csdn.net/java1314777/article/details/134824995