ダークネットオブジェクト検出フレームワークとYOLO
Darknet は、主に C および C++ で書かれたオープンソースのニューラル ネットワーク フレームワークで、GPU アクセラレーション用の CUDA コードがいくつか含まれています。速度と効率が高いことで知られており、リアルタイムの物体検出アプリケーションによく選ばれています。
YOLO (You Only Look Once) は、ダークネット フレームワーク内で実行されるように設計された強力なリアルタイム オブジェクト検出システムです。速度と精度に優れており、ベンチマークでは他の物体検出システムを常に上回っています。
ダークネット/YOLO の世界をさらに深く掘り下げてみましょう。
Hank.ai の貢献: Hank.ai がダークネット/YOLO コミュニティをどのように積極的にサポートしているかをご覧ください。
公式 Web サイト: 総合的な情報については、Darknet/YOLO 公式 Web サイトを参照してください。
よくある質問: ダークネット/YOLO に関するよくある質問への回答を見つけます。
Discord サーバー: 活発な Darknet/YOLO Discord コミュニティに参加して、ディスカッションや支援を受けてください。
論文
YOLO の進化は、いくつかの研究論文で文書化されています。
1. YOLOv7: 物体検出のための深層学習の限界を押し上げる
2. Scaled-YOLOv4: 産業アプリケーション向けの YOLOv4 のスケールアップ
3. YOLOv4: 物体検出の最適な速度と精度
4. YOLOv3: 段階的な改善
一般情報
Darknet/YOLO フレームワークは、速度と精度の両方を誇り、オブジェクト検出の最前線にあり続けます。このフレームワークは完全に無料でオープンソースであるため、開発者はライセンスや料金の制限を受けることなく、プロジェクトにシームレスに組み込むことができます。
2024 年 10 月にリリースされた Darknet V3 (開発コード名「Jazz」) は、NVIDIA RTX 3090 GPU で驚くべきパフォーマンスを実現します。 LEGO データセット ビデオを最大 1000 FPS で処理できます。つまり、各フレームはわずか 1 ミリ秒以下で分析されます。
接続を維持する:
Discord: サポートとディスカッションのために Darknet/YOLO Discord サーバーに参加してください: https://discord.gg/zSq8rtW。
Darknet/YOLO は適応性があり、Raspberry Pi やクラウド サーバーからデスクトップやハイエンド トレーニング システムに至るまで、さまざまなプラットフォーム上で実行されます。 CPU バージョンは幅広いデバイスで動作しますが、GPU バージョンには NVIDIA の CUDA 対応 GPU が必要です。
ダークネットバージョン
ダークネット フレームワークは、その開始以来大幅に進化しており、いくつかの重要なバージョンがあります。
1. バージョン 0.x: 2013 年から 2017 年にかけて Joseph Redmon によって開発されたこのオリジナル バージョンには、特定のバージョン番号がありませんでした。
2. バージョン 1.x: 2017 年から 2021 年まで Alexey Bochkovskiy によって保守されており、このバージョンにもバージョン番号がありませんでした。
3. バージョン 2.x "OAK": Hank.ai が後援し、2023 年から Stéphane Charette によって保守され、これは version コマンドを備えた最初のバージョンとなりました。このバージョンは 2024 年末まで実行されました。
4. バージョン 3.x "JAZZ": 2024 年 10 月にリリースされた最新バージョンでは、大幅な改善と新しい API が導入されています。
ダークネットの構築
Darknet を構築するには、C++17 以降のコンパイラー、OpenCV、および CMake ビルド システムが必要です。プロセスは複雑に見えるかもしれませんが、Darknet/YOLO を構築、インストール、実行するのに C++ の専門家である必要はありません。
構築オプション:
1. Google Colab: Google Colab の手順は Linux の手順と同じです。
2. Linux CMake メソッド: このメソッドは、Linux ユーザー向けの詳細なガイドを提供します。
3. Windows CMake メソッド: Windows 上で Darknet を構築するには、次の手順に従ってください。
注: 古いチュートリアルを使用している場合、そのビルド手順は、以下で概説する新しい統合アプローチとは異なる場合があります。
ソフトウェア開発者: Darknet/YOLO オブジェクト検出フレームワークの内部動作について詳しくは、https://darknetcv.ai/ にアクセスしてください。
Googleコラボ
Google Colab の手順は、Linux CMake メソッドを厳密に反映しています。 colab サブディレクトリ内には、新しいネットワークのトレーニングなどの特定のタスクを示すいくつかの Jupyter ノートブックがあります。
Linux CMake メソッド
Linux 上でダークネットを構築するには、次の手順に従ってください。
1. 前提条件: 必要なツールをインストールします。
「バッシュ」
sudo apt-get install build-essential git libopencv-dev cmake
`
2. ダークネットのクローンを作成します: ダークネット リポジトリをダウンロードします。
「バッシュ」
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknet
CDダークネット
`
3. ビルド ディレクトリの作成: ビルド プロセス用のディレクトリを作成します。
「バッシュ」
mkdir ビルド
CD ビルド
`
4. CMake を使用した構成: ビルド ファイルを生成します。
「バッシュ」
cmake -DCMAKEBUILDTYPE=リリース ..
`
5. ダークネットのビルド: ダークネットの実行可能ファイルをビルドします。
「バッシュ」
make -j4
`
6. インストール用のパッケージ: 簡単にインストールできるように DEB パッケージを作成します (オプション)。
「バッシュ」
パッケージを作る
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN (オプション): GPU アクセラレーションの場合、CUDA または CUDA+cuDNN をインストールします。
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. インストールの確認: インストール後、Darknet のバージョンを確認します。
「バッシュ」
ダークネットバージョン
`
Windows CMake メソッド
これらの手順は、クリーンな Windows 11 22H2 インストール上で Darknet を構築するためのものです。
1. 前提条件をインストールします。
「バッシュ」
winget インストール Git.Git winget インストール Kitware.CMake winget インストール nsis.nsis winget インストール Microsoft.VisualStudio.2022.Community
`
2. Visual Studio C++ のサポート:
* Visual Studio インストーラーを開き、[変更] を選択します。
* C++ を使用したデスクトップ開発を有効にし、[変更] をクリックします。
3. VS 2022 の開発者コマンド プロンプト: VS 2022 の開発者コマンド プロンプトを開きます。
4. Microsoft VCPKG をインストールします。
「バッシュ」
CDC:
mkdir c:src
cd c:src
git clone https://github.com/microsoft/vcpkg
cd vcpkg
ブートストラップ-vcpkg.bat
.vcpkg.exe 統合インストール
.vcpkg.exe は PowerShell を統合します
.vcpkg.exe インストール opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. CUDA/cuDNN (オプション): GPU アクセラレーションの場合、CUDA または CUDA+cuDNN をインストールします。
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. ダークネットのクローンを作成します。
「バッシュ」
cd c:src
git clone https://github.com/hank-ai/darknet.git
CDダークネット
mkdir ビルド
CD ビルド
`
7. CMake で設定します。
「バッシュ」
cmake -DCMAKEBUILDTYPE=リリース -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. MSBuild を使用してダークネットを構築します。
「バッシュ」
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedsummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
9. インストールの確認: Darknet 実行可能ファイルを実行し、バージョンを確認します。
「バッシュ」
C:srcdarknetbuildsrc-cliReleasedarknet.exe のバージョン
`
10. NSIS パッケージをインストールします。ビルド ディレクトリ内の darknet-VERSION.exe ファイルを実行して、Darknet、ライブラリ、インクルード ファイル、および DLL をインストールします。
ダークネットの使用
Darknet は、フレームワークと対話するためのコマンドライン インターフェイス (CLI) を提供します。
注: Darknet CLI に加えて、DarkHelp プロジェクトは拡張機能を備えた代替 CLI を提供します。 Darknet CLI と DarkHelp CLI の両方を一緒に使用できます。
一般的なダークネット CLI コマンド:
ヘルプ: 使用可能なコマンドのリスト:
「バッシュ」
ダークネットのヘルプ
`
バージョン: ダークネットのバージョンを確認します。
「バッシュ」
ダークネットバージョン
`
予測 (画像): 画像上でオブジェクト検出を実行します。
「バッシュ」
# バージョン 2
ダークネット ディテクタ テストcars.datacars.cfgcars_best.weights image1.jpg
# バージョン 3
darknet02displayannotatedimagescars.cfg image1.jpg
#ダークヘルプ
DarkHelp 車.cfg 車.cfg 車_ベスト.重み image1.jpg
`
出力座標 (画像): オブジェクト座標を取得します:
「バッシュ」
# バージョン 2
ダークネット ディテクタ テスト Animals.data Animals.cfg Animalsbest.weights -extoutput Dog.jpg
# バージョン 3
darknet01inference_images 動物 犬.jpg
#ダークヘルプ
DarkHelp --json 動物.cfg 動物.名前 動物ベスト.重み 犬.jpg
`
ビデオ処理:
「バッシュ」
# バージョン 2
# ビデオファイル上で実行
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
# Webカメラで実行
ダークネット検出器のデモ Animals.data Animals.cfg Animals_best.weights -c 0
# バージョン 3
# ビデオファイル上で実行
darknet03display_videos 動物.cfg test.mp4
# Webカメラで実行
darknet08display_webカメラの動物
#ダークヘルプ
# ビデオファイル上で実行
DarkHelp 動物.cfg 動物.名前 動物ベスト.重みテスト.mp4
`
結果をビデオに保存:
「バッシュ」
# バージョン 2
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
# バージョン 3
darknet05processvideosマルチスレッド動物.cfg動物.名前動物_ベスト.重みテスト.mp4
#ダークヘルプ
DarkHelp 動物.cfg 動物.名前 動物ベスト.重みテスト.mp4
`
JSON 出力:
「バッシュ」
# バージョン 2
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# バージョン 3
darknet06imagestojson 動物 image1.jpg
#ダークヘルプ
DarkHelp --json 動物.名前 動物.cfg 動物ベスト.重み image1.jpg
`
特定の GPU: 指定された GPU で実行します:
「バッシュ」
# バージョン 2
ダークネット検出器のデモ Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
精度チェック: ネットワークの精度を評価します。
「バッシュ」
ダークネット ディテクタ マップ Driving.data Driving.cfg Driving_best.weights
`
アンカーを計算する:
「バッシュ」
ダークネット検出器 calcanchors 動物.データ -numof_clusters 6 -幅 320 -高さ 256
`
新しいネットワークのトレーニング
DarkMark: 注釈付けとトレーニングに対する直感的で合理的なアプローチには、DarkMark を使用します。
手動セットアップ:
1. ディレクトリの作成: トレーニング データ用のフォルダーをセットアップします。
2. 構成のコピー: 構成ファイル (例: cfg/yolov4-tiny.cfg) をテンプレートとして選択し、それをディレクトリにコピーします。
3. .names ファイルの作成: クラスを 1 行に 1 つずつリストするテキスト ファイル (例: Animals.names) を作成します。
4. .data ファイルの作成: 次の構造を持つテキスト ファイル (例、animals.data) を作成します。
`
クラス = 4
train = /path/to/animals_train.txt
有効 = /path/to/animals_valid.txt
名前 = /path/to/animals.names
バックアップ = /path/to/backup_directory
`
5. データセットの準備: 画像と対応する注釈ファイルをディレクトリに整理します。
6. トレーニング/有効テキスト ファイルの作成: トレーニングと検証用の画像へのパスをリストした 2 つのテキスト ファイル (animalstrain.txt、animalsvalid.txt) を作成します。
7. 構成を変更します。
* バッチ = 64 に設定します。
* GPU のメモリに基づいてサブディビジョンを調整します。
max_batches を適切な値 (たとえば、クラス数 2000) に設定します。
* ステップを max_batches の 80% および 90% に設定します。
* ネットワークのサイズに応じて幅と高さを調整します。
* クラス数に合わせてクラスを更新します。
* [yolo] セクションの前にある [convolutional] セクションのフィルターを変更します。
8. トレーニングを開始します。
「バッシュ」
cd /パス/to/animals
ダークネット ディテクタ -map -dont_show train Animals.data Animals.cfg
`
9. 進行状況の表示: chart.png ファイルを通じてトレーニングの進行状況を監視します。
その他のツールとリンク
DarkMark: このツールは、Darknet でのトレーニングのための画像の注釈、検証、およびファイル生成を簡素化します。
DarkHelp: 画像のタイリングやオブジェクト追跡などの機能を備えた、ダークネット用の堅牢な代替 CLI。
ダークネット/YOLO FAQ: よくある質問への回答を検索します。
Stéphane の YouTube チャンネル: チュートリアルとサンプルビデオにアクセスします。
Darknet/YOLO Discord サーバー: サポートとディスカッションのためにコミュニティに参加してください。
ロードマップ
完了:
効率性を高めるために、qsort() を std::sort() に置き換えました。
非推奨のコード (check_missing、getchar()、system() など) を削除しました。
Darknet を C++ コンパイラに移行しました。
Windows ビルドの問題を修正しました。
Python のサポートが復元されました。
ダークネットライブラリを構築しました。
CUDA/GPU コード、CUDNN、および CUDNN ハーフを再度有効にしました。
CUDA バージョン情報を改善しました。
AVX 命令セットを再度有効にしました。
古いソリューションと Makefile を削除しました。
OpenCV を必須の依存関係にしました。
古いライブラリの依存関係 (pthread、STB など) を削除しました。
CUDA 検出を改善するために CMakeLists.txt を書き換えました。
アウトオブソースビルドを有効にしました。
バージョン番号の出力が強化されました。
トレーニングと推論のパフォーマンスの最適化を実装しました。
読みやすくするためにコードをクリーンアップしました。
API を改善するために darknet.h を書き直しました。
ARM ベースの Jetson デバイスのサポートが向上しました。
V3 の Python API を修正しました。
短期的な目標:
printf() を std::cout に置き換えます。
ZED カメラのサポートを調査します。
コマンドライン解析を改善します。
中期目標:
すべての文字コードを std::string に置き換えます。
コンパイラの警告に対処します。
カスタム イメージ構造の代わりに cv::Mat の使用を強化します。
リスト機能を std::vector または std::list にアップグレードします。
1 チャンネルのグレースケール画像をサポートします。
N チャネル画像 (N > 3) のサポートを追加します。
進行中のコードのクリーンアップ。
長期的な目標:
異なる GPU にわたる CUDA/CUDNN の問題に対処します。
効率を向上させるために CUDA+cuDNN コードを書き換えます。
NVIDIA 以外の GPU のサポートを検討してください。
回転された境界ボックスと「角度」のサポートを実装します。
キーポイント、スケルトン、ヒートマップを追加します。
セグメンテーション機能を導入します。