ダークネットオブジェクト検出フレームワークとYOLO
!darknet と hank.ai のロゴ
Darknet は、主に C と CUDA で書かれたオープンソースのニューラル ネットワーク フレームワークです。
YOLO (You Only Look Once) は、ダークネット フレームワーク内で動作するリアルタイムのオブジェクト検出システムです。
Hank.ai がダークネット/YOLO コミュニティをどのように支援しているかを読む
ダークネット V3「ジャズ」を発表
ダークネット/YOLO Web サイトを参照してください。
ダークネット/YOLO FAQ をよく読んでください。
Darknet/YOLO Discord サーバーに参加します
論文
1.論文YOLOv7
2. 紙のスケール - YOLOv4
3.論文YOLOv4
4.論文YOLOv3
一般情報
Darknet/YOLO フレームワークは、他のフレームワークや YOLO バージョンよりも高速かつ正確であり続けます。
このフレームワークは完全に無料でオープンソースです。 Darknet/YOLO は、ライセンスや支払いなしで、商用プロジェクトを含む既存のプロジェクトや製品に統合できます。
2024 年 10 月にリリースされた Darknet V3 (「Jazz」) は、NVIDIA RTX 3090 GPU を使用する場合、LEGO データセット ビデオを最大 1000 FPS で正確に処理できます。これは、各ビデオ フレームが Darknet/YOLO によって 1 ミリ秒以内に読み取られ、サイズ変更され、処理されることを意味します。
ヘルプやディスカッションが必要な場合は、Darknet/YOLO Discord サーバーに参加してください: https://discord.gg/zSq8rtW
Darknet/YOLO の CPU バージョンは、Raspberry Pi、クラウドおよびコラボ サーバー、デスクトップ、ラップトップ、ハイエンド トレーニング リグなどのさまざまなデバイス上で実行されます。 Darknet/YOLO の GPU バージョンには、NVIDIA の CUDA 対応 GPU が必要です。
Darknet/YOLO は、Linux、Windows、および Mac で動作することが知られています。以下の組み立て説明書を参照してください。
ダークネットバージョン
2013 年から 2017 年に Joseph Redmon によって作成されたオリジナルの Darknet ツールにはバージョン番号がありませんでした。このバージョンは 0.x であると考えます。
Alexey Bochkovskiy が 2017 年から 2021 年にかけて管理していた次に人気のある Darknet リポジトリにもバージョン番号がありませんでした。これをバージョン 1.x とみなします。
Hank.ai が後援し、2023 年から Stéphane Charette によって保守されている Darknet リポジトリは、バージョン コマンドを備えた最初のリポジトリでした。 2023 年から 2024 年後半まで、バージョン 2.x「OAK」が返されました。
目標は、コードベースに慣れながら、既存の機能をできるだけ壊さないようにすることでした。
Darknet 2.x の主な変更点は次のとおりです。
Windows と Linux 上で統合された CMake ベースのビルドのビルド ステップを書き直しました。
C++ コンパイラを使用するようにコードベースを変換しました。
トレーニング中の chart.png の視覚化が強化されました。
バグ修正とパフォーマンスの最適化。主にトレーニング時間の短縮に重点が置かれています。
このコードベースの最後のブランチは、v2 ブランチのバージョン 2.1 です。
開発の次のフェーズは 2024 年半ばに開始され、2024 年 10 月にリリースされました。version コマンドは 3.x "JAZZ" を返すようになりました。
これらのコマンドのいずれかを実行する必要がある場合は、いつでも以前の v2 ブランチをチェックアウトできます。不足しているコマンドがあった場合はお知らせください。
Darknet 3.x の主な変更点は次のとおりです。
多くの古い、メンテナンスされていないコマンドが削除されました。
トレーニングと推論の両方のパフォーマンスが大幅に最適化されています。
レガシー C API の変更。オリジナルの Darknet API を使用するアプリケーションには若干の変更が必要です。ここで更新された API ドキュメントを参照してください: https://darknetcv.ai/api/api.html
新しい Darknet V3 C および C++ API の紹介: https://darknetcv.ai/api/api.html
src-examples ディレクトリ内の新しいアプリケーションとサンプル コード: https://darknetcv.ai/api/files.html
MSCOCO 事前トレーニング済み重み
YOLO のいくつかの一般的なバージョンは、便宜上 MSCOCO データセットで事前トレーニングされました。このデータセットには 80 のクラスが含まれており、cfg/coco.names テキスト ファイルにあります。
Darknet/YOLO のテストに利用できる、LEGO Gears や Rolodex などのより単純なデータセットと事前トレーニングされた重みが他にもいくつかあります。詳細については、ダークネット/YOLO FAQ を参照してください。
MSCOCO の事前トレーニングされた重みは、次のリポジトリを含むさまざまな場所からダウンロードできます。
YOLOv2 (2016 年 11 月)
YOLOv2-小さな
YOLOv2-フル
YOLOv3 (2018 年 5 月)
YOLOv3-tiny
YOLOv3-フル
YOLOv4 (2020 年 5 月)
YOLOv4-tiny
YOLOv4-フル
YOLOv7 (2022 年 8 月)
YOLOv7-小さな
YOLOv7-フル
MSCOCO の事前トレーニングされた重みは、デモンストレーションのみを目的として提供されています。 MSCOCO に対応する .cfg および .names ファイルは、cfg ディレクトリにあります。コマンドの例:
`
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet02displayannotatedimages coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
独自のネットワークをトレーニングすることをお勧めします。 MSCOCO は主に、すべてが正しく動作していることを確認するために使用されます。
建物
過去 (2023 年以前) に利用可能だったさまざまなビルド方法が、単一の統合ソリューションに統合されました。 Darknet には C++17 以降の OpenCV が必要で、CMake を使用して必要なプロジェクト ファイルを生成します。
車を運転するのに整備士である必要がないのと同じように、Darknet/YOLO を構築、インストール、実行するのに C++ の知識は必要ありません。
より複雑なビルド ステップを含む古いチュートリアルに従っている場合、またはこの Readme の内容と一致しないビルド ステップを実行している場合は注意してください。以下で説明する新しいビルド手順は 2023 年 8 月に開始されました。
ソフトウェア開発者は、https://darknetcv.ai/ にアクセスして、Darknet/YOLO オブジェクト検出フレームワークの内部に関する情報を入手することをお勧めします。
Googleコラボ
Google Colab の手順は Linux の手順と同じです。新しいネットワークのトレーニングなどのタスクをデモする Jupyter ノートブックがいくつか用意されています。
colab サブディレクトリ内のノートブックを参照するか、以下の Linux の手順に従ってください。
Linux CMake メソッド
Linux 用のダークネット ビルド チュートリアル
1. 必要なパッケージをインストールします。
「バッシュ」
sudo apt-get install build-essential git libopencv-dev cmake
`
2. ダークネット リポジトリのクローンを作成します。
「バッシュ」
mkdir ~/src
cd ~/src
git clone https://github.com/hank-ai/darknet
CDダークネット
`
3. ビルド ディレクトリを作成し、CMake を実行します。
「バッシュ」
mkdir ビルド
CD ビルド
cmake -DCMAKEBUILDTYPE=リリース ..
`
4. ダークネットを構築する:
「バッシュ」
make -j4
`
5. オプション: CUDA または CUDA+cuDNN をインストールします。
最新の NVIDIA GPU を使用している場合は、CUDA または CUDA+cuDNN をインストールできます。これにより、Darknet は GPU を使用して画像とビデオを高速に処理できるようになります。
- https://developer.nvidia.com/cuda-downloads から CUDA をダウンロードしてインストールします。
- https://developer.nvidia.com/rdp/cudnn-download または https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager から cuDNN をダウンロードしてインストールします。インストールの概要。
重要: Darknet のビルド後に CUDA または CUDA+cuDNN をインストールする場合は、ビルド ディレクトリ内の CMakeCache.txt ファイルを削除し、cmake を再実行して、CMake が必要なファイルを確実に見つけられるようにする必要があります。
注: ダークネットは CUDA なしでも実行できますが、カスタム ネットワークをトレーニングする場合は、CUDA または CUDA+cuDNN のいずれかが必要です。
6. Darknet をパッケージ化してインストールします。
「バッシュ」
パッケージを作る
sudo dpkg -i darknet-VERSION.deb
`
重要: 古いバージョンの CMake を使用している場合は、cmake コマンドを実行する前にアップグレードする必要がある場合があります。以下を使用して Ubuntu で CMake をアップグレードします。
「バッシュ」
sudo apt-get パージ cmake
sudo snap install cmake --classic
`
上級ユーザー:
- DEB ファイルではなく RPM インストール ファイルをビルドする場合は、make package を実行する前に CM_package.cmake 内の次の 2 行を編集します。
`cmake
# SET (CPACK_GENERATOR "DEB")
SET (CPACK_GENERATOR "RPM")
`
- インストール パッケージの構築が完了したら、インストール パッケージをインストールするには、ディストリビューションのパッケージ マネージャーを使用します。たとえば、Ubuntu などの Debian ベースのシステムでは次のようになります。
「バッシュ」
sudo dpkg -i darknet-2.0.1-Linux.deb
`
- .deb パッケージをインストールすると、次のファイルがコピーされます。
- /usr/bin/darknet: ダークネットの実行可能ファイル。
- /usr/include/darknet.h: C、C++、Python 開発者向けの Darknet API。
- /usr/include/darknet_version.h: 開発者向けのバージョン情報が含まれています。
- /usr/lib/libdarknet.so: C、C++、Python 開発者向けのリンク先ライブラリ。
- /opt/darknet/cfg/...: すべての .cfg テンプレートの場所。
- これで完了です。 Darknet が構築され、/usr/bin/ にインストールされています。 CLI からダークネット バージョンを実行して、インストールを確認します。
Windows CMake メソッド
これらの手順は、Windows 11 22H2 の新規インストールを前提としています。
1. 必要なソフトウェアをインストールします。
`パワーシェル
winget インストール Git.Git
winget インストール Kitware.CMake
winget インストール nsis.nsis
winget インストール Microsoft.VisualStudio.2022.Community
`
2. Visual Studio のインストールを変更します。
- 「Windows スタート」メニューを開き、「Visual Studio インストーラー」を実行します。
- 「変更」をクリックします。
- 「C++ によるデスクトップ開発」を選択します。
- 右下隅の「変更」をクリックし、「はい」をクリックします。
3. Microsoft VCPKG をインストールします。
- [Windows スタート] メニューを開き、[VS 2022 の開発者コマンド プロンプト] を選択します。これらの手順では PowerShell を使用しないでください。
- 上級ユーザー: 開発者コマンド プロンプトを実行する代わりに、通常のコマンド プロンプトまたは SSH を使用してデバイスに接続し、Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat を手動で実行できます。
- 次のコマンドを実行します。
`パワーシェル
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
`
- この最後のステップの実行には時間がかかる場合があるため、しばらくお待ちください。多くのものをダウンロードしてビルドする必要があります。
- 上級ユーザー: OpenCV を構築するときに追加したいオプションのモジュールが他にもたくさんあることに注意してください。 .vcpkg.exe search opencv を実行して、完全なリストを表示します。
4. オプション: CUDA または CUDA+cuDNN をインストールします。
最新の NVIDIA GPU を使用している場合は、CUDA または CUDA+cuDNN をインストールできます。これにより、Darknet は GPU を使用して画像とビデオを高速に処理できるようになります。
- https://developer.nvidia.com/cuda-downloads から CUDA をダウンロードしてインストールします。
- https://developer.nvidia.com/rdp/cudnn-download または https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows から cuDNN をダウンロードしてインストールします。
重要: Darknet のビルド後に CUDA または CUDA+cuDNN をインストールする場合は、ビルド ディレクトリ内の CMakeCache.txt ファイルを削除し、cmake を再実行して、CMake が必要なファイルを確実に見つけられるようにする必要があります。
注: ダークネットは CUDA なしでも実行できますが、カスタム ネットワークをトレーニングする場合は、CUDA または CUDA+cuDNN のいずれかが必要です。
5. ダークネットのクローンを作成して構築します。
`パワーシェル
cd c:src
git clone https://github.com/hank-ai/darknet.git
CDダークネット
mkdir ビルド
CD ビルド
cmake -DCMAKEBUILDTYPE=リリース -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedsummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
重要:
- CUDA のインストール: Visual Studio の後に CUDA をインストールする必要があります。 Visual Studio をアップグレードする場合は、必ず CUDA を再インストールしてください。
- DLL の欠落: CUDA または cuDNN DLL (例: cublas64_12.dll) の欠落に関するエラーが発生した場合は、CUDA .dll ファイルを darknet.exe と同じ出力ディレクトリに手動でコピーします。例えば:
`パワーシェル
コピー "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(これは例です。実行している CUDA のバージョンを確認し、それに応じてパスを調整します。)
- msbuild.exe を再実行します。.dll ファイルをコピーした後、最後の msbuild.exe コマンドを再実行して NSIS インストール パッケージを生成します。
`パワーシェル
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
- 上級ユーザー: cmake コマンドの出力は通常の Visual Studio ソリューション ファイル (darknet.sln) であることに注意してください。 msbuild.exe の代わりに Visual Studio GUI を定期的に使用する場合は、コマンド ラインの手順を無視して、Visual Studio に Darknet プロジェクトを読み込むことができます。
- これで、実行できるファイルが作成されました: C:srcDarknetbuildsrc-cliReleasedarknet.exe。これを実行してテストします: C:srcDarknetbuildsrc-cliReleasedarknet.exe のバージョン。
6. ダークネットをインストールします。
- 最後の手順で作成した NSIS インストール ウィザードを実行します。ビルド ディレクトリでファイル darknet-VERSION.exe を探します。例えば:
`
darknet-2.0.31-win64.exe
`
- NSIS インストール パッケージは次のとおりです。
- Darknet という名前のディレクトリを作成します (例: C:Program FilesDarknet)。
- CLI アプリケーション (darknet.exe) およびその他のサンプル アプリをインストールします。
- OpenCV などの必要なサードパーティの .dll ファイルをインストールします。
- 別のアプリケーションから darknet.dll を使用するには、必要な Darknet .dll、.lib、および .h ファイルをインストールします。
- テンプレート .cfg ファイルをインストールします。
- これで完了です。インストール ウィザードが完了すると、Darknet は C:Program FilesDarknet にインストールされます。これを実行してテストします: C:Program FilesDarknetbindarknet.exe のバージョン。
ダークネットの使用
CLI
以下は、Darknet でサポートされるすべてのコマンドの完全なリストではありません。
Darknet CLI に加えて、DarkHelp プロジェクト CLI も検討してください。これは、Darknet では直接利用できない高度な機能を備えた Darknet/YOLO の代替 CLI を提供します。 Darknet CLI と DarkHelp CLI の両方を一緒に使用できます。
以下のほとんどのコマンドでは、.weights ファイルと、対応する .names ファイルおよび .cfg ファイルが必要です。独自のネットワークをトレーニングするか (強く推奨!)、事前にトレーニングされたネットワークをインターネットからダウンロードすることができます。事前トレーニングされたデータセットの例は次のとおりです。
LEGO Gears (画像内のオブジェクトを見つけるため)
Rolodex (画像内のテキストを検索するため)
MSCOCO (標準 80 クラスの物体検出)
実行するコマンド:
助けを得る:
「バッシュ」
ダークネットのヘルプ
`
バージョンを確認します。
「バッシュ」
ダークネットバージョン
`
画像を使用して予測する:
V2:
「バッシュ」
ダークネット ディテクタ テストcars.datacars.cfgcars_best.weights image1.jpg
`
V3:
「バッシュ」
darknet02displayannotatedimagescars.cfg image1.jpg
`
ダークヘルプ:
「バッシュ」
DarkHelp 車.cfg 車.cfg 車_ベスト.重み image1.jpg
`
出力座標:
V2:
「バッシュ」
ダークネット ディテクタ テスト Animals.data Animals.cfg Animalsbest.weights -extoutput Dog.jpg
`
V3:
「バッシュ」
darknet01inference_images 動物 犬.jpg
`
ダークヘルプ:
「バッシュ」
DarkHelp --json 動物.cfg 動物.名前 動物ベスト.重み 犬.jpg
`
ビデオの操作:
V2:
「バッシュ」
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
`
V3:
「バッシュ」
darknet03display_videos 動物.cfg test.mp4
`
ダークヘルプ:
「バッシュ」
DarkHelp 動物.cfg 動物.名前 動物ベスト.重みテスト.mp4
`
ウェブカメラからの読み取り:
V2:
「バッシュ」
ダークネット検出器のデモ Animals.data Animals.cfg Animals_best.weights -c 0
`
V3:
「バッシュ」
darknet08display_webカメラの動物
`
結果をビデオに保存します。
V2:
「バッシュ」
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
`
V3:
「バッシュ」
darknet05processvideosマルチスレッド動物.cfg動物.名前動物_ベスト.重みテスト.mp4
`
ダークヘルプ:
「バッシュ」
DarkHelp 動物.cfg 動物.名前 動物ベスト.重みテスト.mp4
`
JSON 出力:
V2:
「バッシュ」
ダークネット ディテクタ デモ Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
V3:
「バッシュ」
darknet06imagestojson 動物 image1.jpg
`
ダークヘルプ:
「バッシュ」
DarkHelp --json 動物.名前 動物.cfg 動物ベスト.重み image1.jpg
`
特定の GPU で実行:
V2:
「バッシュ」
ダークネット検出器のデモ Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
ニューラル ネットワークの精度を確認する:
「バッシュ」
ダークネット検出器マップ Driving.data Driving.cfg Driving_best.weights ...
`
出力例:
`
ID 名 AvgPrecision TP FN FP TN Accuracy ErrorRate Precision Recall Specificity FalsePosRate -- ---- ------------ ------ ------ ------ - ----- -------- --------- --------- ------ ----------- -- ---------- 車両 0 台 91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821 オートバイ 1 台 80.4499 2936 513 569 5393 0.8850 0.1150 377 0.8513 0.9046 0.0954 2 自転車 89.0912 570 124 104 3548 0.9475 0.0525 0.8457 0.8213 0.9715 0.0285 3人 76.7937 7072 1727 2574 27523 0.8894 0.1106 0.7332 0.8037 0.9145 0.0855 4 台の車両 64.3089 1068 509 733 11288 0.9087 0.0913 0 0.6772 0.9390 0.0610 5 緑信号 86.8118 1969 239 510 4116 0.8904 0.1096 0.7943 0.8918 0.8898 0.1102 6 黄信号 82.0390 126 38 30 1239 0. 9525 0.0475 0.8077 0.7683 0.9764 0.0236 7 赤信号 94.1033 3449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
`
精度チェック mAP@IoU=75:
「バッシュ」
ダークネット検出器マップ Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
`
アンカーの再計算:
DarkMark は 100 回連続して実行され、最適なアンカーが選択されるため、DarkMark でアンカーを再計算するのが最善です。ただし、ダークネットで古いバージョンを使用したい場合は、次のようにします。
「バッシュ」
ダークネット検出器 calcanchors 動物.データ -numof_clusters 6 -幅 320 -高さ 256
`
新しいネットワークをトレーニングする:
「バッシュ」
ダークネット ディテクタ -map -dont_show train Animals.data Animals.cfg
`
(以下の「トレーニング」セクションも参照してください)
トレーニング
ダークネット/YOLO FAQ の関連セクションへのクイック リンク:
ファイルとディレクトリはどのように設定すればよいですか?
どの設定ファイルを使用すればよいですか?
独自のネットワークをトレーニングする場合はどのコマンドを使用すればよいですか?
アノテーションを付けてトレーニングする最も簡単な方法は、必要なすべての Darknet ファイルを作成する DarkMark を使用することです。これは、新しいニューラル ネットワークをトレーニングする場合に推奨される方法です。
カスタム ネットワークをトレーニングするためにさまざまなファイルを手動でセットアップする場合は、次のようにします。
1. 新しいフォルダーを作成します。
- ファイルを保存するフォルダーを選択します。この例では、動物を検出するニューラル ネットワークを作成するため、ディレクトリは ~/nn/animals/ になります。
2. ダークネット設定ファイルをコピーします。
- Darknet 設定ファイルをテンプレートとしてコピーします。たとえば、cfg/yolov4-tiny.cfg を使用します。これを作成したフォルダーに置きます。これで、~/nn/animals/animals.cfg が作成されるはずです。
3. Animals.names テキスト ファイルを作成します。
- 設定ファイルと同じフォルダーにanimals.namesテキストファイルを作成します。これで ~/nn/animals/animals.names が作成されました。
4. Animals.names ファイルを編集します。
- テキスト エディタを使用して、animals.names ファイルを編集します。検出するクラスを 1 行に 1 つのエントリで指定し、空白行やコメントを含めずにリストします。この例では、.names ファイルには次の 4 行が含まれます。
`
犬
猫
鳥
馬
`
5. Animals.data テキスト ファイルを作成します。
- 同じフォルダーにanimals.dataテキストファイルを作成します。この例では、.data ファイルには次のものが含まれます。
`
クラス = 4
train = /home/ユーザー名/nn/animals/animals_train.txt
有効 = /home/ユーザー名/nn/animals/animals_valid.txt
名前 = /home/ユーザー名/nn/animals/animals.names
バックアップ = /home/ユーザー名/nn/animals
`
6. 画像と注釈用のフォルダーを作成します。
- 画像と注釈を保存するフォルダーを作成します。たとえば、これは ~/nn/animals/dataset のようになります。
- 各画像には、その画像の注釈を記述した対応する .txt ファイルが必要です。これらの .txt 注釈ファイルの形式は非常に特殊です。各注釈には正確な座標が必要なため、手動で作成することはできません。 DarkMark または同様のソフトウェアを使用して、画像に注釈を付けます。 YOLO アノテーション形式については、Darknet/YOLO FAQ で説明されています。
7. 「トレーニング」および「有効な」テキスト ファイルを作成します。
- .data ファイル内に名前を付けた「train」および「valid」テキスト ファイルを作成します。
- これら 2 つのテキスト ファイルには、Darknet がトレーニングと検証 (mAP% の計算) に使用するすべての画像がリストされている必要があります。
- 各行には、イメージ パスとファイル名を 1 つだけ含める必要があります。相対パスまたは絶対パスを使用できます。
8. .cfg ファイルを変更します。
- テキスト エディタを使用して .cfg ファイルを変更します。
- バッチ=64であることを確認してください。
- サブディビジョン: ネットワークの規模と GPU メモリに応じて、サブディビジョンを調整する必要がある場合があります。 subdivisions=1 から始めて、うまくいかない場合は Darknet/YOLO FAQ を参照してください。
- Maxbatches: maxbatches の適切な開始値をクラス数の 2000 倍に設定します。この例では、動物が 4 匹いるため、max_batches=8000 になります。
- ステップ: ステップを max_batches の 80% および 90% に設定します。この場合、steps=6400,7200 を使用します。
- 幅と高さ: これらはネットワークの寸法です。 Darknet/YOLO FAQ では、最適なサイズを計算する方法が説明されています。
- クラス:classes=... のすべてのインスタンスを検索し、.names ファイル内のクラスの数で更新します。この例では、classes=4 を使用します。
- フィルター: 各 [yolo] セクションの前の [convolutional] セクションで filters=... のすべてのインスタンスを検索します。使用する値は (numberofclasses + 5) 3 です。この例では、(4 + 5) 3 = 27 です。したがって、適切な行で filters=27 を使用します。
9. トレーニングを開始します。
- ~/nn/animals/ ディレクトリに移動します。
「バッシュ」
cd ~/nn/動物/
`
- 次のコマンドを実行してトレーニングを開始します。
「バッシュ」
ダークネット ディテクタ -map -dont_show train Animals.data Animals.cfg
`
- 我慢して。最適な重みは、animals_best.weights として保存されます。 chart.png ファイルを観察することで、トレーニングの進行状況を追跡できます。トレーニング中に使用する可能性のある追加パラメーターについては、Darknet/YOLO FAQ を参照してください。
- より詳細なトレーニング情報が必要な場合は、 --verbose パラメーターを追加します。
「バッシュ」
ダークネット ディテクタ -map -dont_show --verbose train Animals.data Animals.cfg
`
その他のツールとリンク
DarkMark: Darknet/YOLO プロジェクトの管理、画像に注釈を付け、注釈を検証し、Darknet でトレーニングするためのファイルを生成します。
DarkHelp: Darknet に代わる堅牢な CLI で、画像タイリング、ビデオ内のオブジェクト追跡、商用アプリケーションに適した堅牢な C++ API を使用します。
Darknet/YOLO FAQ: 質問に答えるための包括的なリソース。
Stéphane の YouTube チャンネル: 多数のチュートリアルとサンプルビデオ。
Darknet/YOLO Discord サーバー: サポートとディスカッションのためにコミュニティに参加してください。
ロードマップ
最終更新日: 2024 年 10 月 30 日:
完了:
トレーニング中に qsort() を std::sort() に置き換えました (その他の不明瞭なものがいくつか残っています)。
check_missing、getchar()、system() を削除しました。
C++ コンパイラ (Linux では g++、Windows では VisualStudio) を使用するように Darknet を変換しました。
Windows ビルドを修正しました。
Python のサポートを修正しました。
ダークネットライブラリを構築しました。
予測のラベルを再度有効にしました (「アルファベット」コード)。
CUDA/GPU コードを再度有効にしました。
CUDNNを再度有効にしました。
CUDNN 半分を再度有効にしました。
ハードコーディングされた CUDA アーキテクチャを削除しました。
CUDA バージョン情報を改善しました。
AVXを再度有効にしました。
古いソリューションと Makefile を削除しました。
OpenCVをオプションではなくなりました。
古い pthread ライブラリへの依存関係を削除しました。
STBを取り外しました。
新しい CUDA 検出を使用するように CMakeLists.txt を書き直しました。
古い「アルファベット」コードを削除し、データ/ラベル内の 700 以上の画像を削除しました。
アウトオブソースビルドを有効にしました。
バージョン番号の出力が改善されました。
トレーニングに関連するパフォーマンスの最適化を実装しました (継続中)。
推論に関連するパフォーマンスの最適化を実装しました (継続中)。
可能な場合は参照渡しを使用します。
.hpp ファイルをクリーンアップしました。
darknet.hを書き直しました。
cv::Mat を void* にキャストすることを回避し、適切な C++ オブジェクトとして使用しました。
内部イメージ構造の使用における一貫性が修正または改善されました。
ARM ベースの Jetson デバイスのビルドを修正しました。 (元の Jetson デバイスは、NVIDIA によってサポートされなくなったため、修正される可能性は低いです。C++17 コンパイラーはありません。新しい Jetson Orin デバイスは動作します)。
V3 で Python API を修正しました。
Python のサポートが改善されました。 (これについて協力してくれる Python 開発者はいますか?)
短期的な目標
printf() を std::cout (進行中) に置き換えます。
古い ZED カメラのサポートを調査します。
コマンドライン解析を改善し、より一貫性のあるものにします (進行中)。
中期目標
すべての char* コードを削除し、std::string に置き換えます。
警告の非表示を避け、コンパイラ警告をクリーンアップします (進行中)。
C のカスタム イメージ構造の代わりに cv::Mat の使用を改善します (進行中)。
古いリスト機能を std::vector または std::list に置き換えます。
1 チャンネルのグレースケール イメージのサポートを修正しました。
N > 3 の N チャネル画像 (追加の深度または熱チャネルを持つ画像など) のサポートを追加します。
進行中のコードのクリーンアップを続行します (進行中)。
長期的な目標
すべての GPU での CUDA/CUDNN の問題を修正します。
CUDA+cuDNN コードを書き直します。
非 NVIDIA GPU のサポートを追加することを検討してください。
回転した境界ボックスまたは「角度」サポートを追加します。
キーポイント/スケルトンを実装します。
ヒートマップを追加します (進行中)。
セグメンテーションを実装します。