ダークネットオブジェクト検出フレームワークとYOLO
Darknet は、C、C++、CUDA を使用して作成されたオープンソースのニューラル ネットワーク フレームワークです。これは、速度と精度で知られる最先端のリアルタイム物体検出システムである YOLO (You Only Look Once) の基盤として機能します。
Hank.ai がダークネット/YOLO コミュニティをどのように強化しているかについては、こちらをご覧ください: [Hank.ai ブログへのリンク]
公式 Darknet/YOLO Web サイトを探索してください: [Darknet Web サイトへのリンク]
包括的なダークネット/YOLO FAQ を詳しく見てみましょう: [FAQ へのリンク]
Discord 上の活気に満ちた Darknet/YOLO コミュニティに参加しましょう: [Discord サーバーへのリンク]
論文
1. YOLOv7: [論文へのリンク]
2. Scaled-YOLOv4: [論文へのリンク]
3. YOLOv4: [論文へのリンク]
4. YOLOv3: [論文へのリンク]
一般情報
Darknet/YOLO フレームワークは、速度と精度の点で他のフレームワークや YOLO バージョンを圧倒し続けています。オープンソースの性質とライセンス料からの完全な自由により、既存のプロジェクトや商用製品へのシームレスな統合が可能になります。
2024 年 10 月にリリースされた Darknet V3 (「Jazz」) は、NVIDIA RTX 3090 GPU を使用して驚異的な 1000 FPS で LEGO データセット ビデオを処理し、驚くべきパフォーマンスを達成しました。これは、ビデオ フレームあたりの処理時間が 1 ミリ秒未満になることを意味します。
[Discord サーバーへのリンク] からアクティブな Darknet/YOLO Discord サーバーに参加して、サポート、ディスカッション、共同学習を行ってください。
Darknet/YOLO は、Raspberry Pi からハイエンドのトレーニング リグまで、幅広いデバイスに対応し、CPU と GPU の両方のバージョンをサポートします。 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 リポジトリでは、「version」コマンドが導入されました。 2023 年から 2024 年後半にかけて、バージョン 2.x「OAK」が返されました。
開発目標は、コードベースに慣れながら、既存の機能への混乱を最小限に抑えることでした。主な改善点は次のとおりです。
統合されたビルド プロセス: Windows と Linux の両方で一貫した CMake ベースのビルド プロセスを実現するためにビルド ステップを書き直しました。
C++ コードベース: C++ コンパイラを利用するためのコードベースの変換。
トレーニング チャートの強化: トレーニング中の chart.png の視覚化が改善されました。
バグ修正と最適化: トレーニング時間の短縮に重点を置いた、パフォーマンス関連の機能強化。
このコードベースの最後のブランチはバージョン 2.1 で、「v2」ブランチにあります。
開発の次のフェーズは 2024 年半ばに開始され、2024 年 10 月のバージョン 3.x「JAZZ」リリースで最高潮に達しました。
以前の「v2」ブランチにいつでもアクセスして、それらのバージョンのコマンドを実行できます。不足しているコマンドが見つかった場合はお知らせください。再統合を調査します。
Darknet V3 の重要な変更点は次のとおりです。
コマンドの削除: 古くなった、使用頻度の低いコマンドを削除します。
パフォーマンスの最適化: トレーニングと推論の両方のパフォーマンスが強化されました。
レガシー API の変更: レガシー C API の変更。オリジナルの Darknet API を使用するアプリケーションでは、若干の調整が必要になる場合があります。
新しい C/C++ API: 新しい Darknet V3 C および C++ API の導入。
更新されたサンプル コード: 「src-examples」ディレクトリに新しいアプリケーションとサンプル コードが含まれています。
新しい API の詳細については: [Darknet V3 API ドキュメントへのリンク]
更新されたサンプル コードを確認してください: [Darknet V3 API ファイルへのリンク]
MSCOCO 事前トレーニング済み重み
いくつかの人気のある YOLO バージョンは、便宜上 MSCOCO データセットで事前トレーニングされています。このデータセットには 80 のクラスが含まれており、「cfg/coco.names」テキスト ファイルで簡単に識別できます。
MSCOCO を超えて、Darknet/YOLO は、LEGO Gears や Rolodex などのより単純なデータセット用に事前トレーニングされた重みを提供し、さまざまなシナリオを実験できるようにします。包括的な詳細については、Darknet/YOLO FAQ を参照してください。
MSCOCO の事前トレーニングされた重みは、次のリポジトリを含む複数のソースからアクセスできます。
YOLOv2 (2016 年 11 月):
YOLOv2-tiny: [重みへのリンク]
YOLOv2-full: [重みへのリンク]
YOLOv3 (2018 年 5 月):
YOLOv3-tiny: [重みへのリンク]
YOLOv3-full: [重みへのリンク]
YOLOv4 (2020 年 5 月):
YOLOv4-tiny: [重みへのリンク]
YOLOv4-full: [重みへのリンク]
YOLOv7 (2022 年 8 月):
YOLOv7-tiny: [ウェイトへのリンク]
YOLOv7-full: [ウェイトへのリンク]
これらの事前トレーニングされた重みは、主にデモンストレーションを目的としています。 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++ の専門知識は必要ありません。
Googleコラボ
Google Colab の手順は Linux の手順と同じです。いくつかの Jupyter ノートブックは、新しいネットワークのトレーニングなど、さまざまなタスクを示します。
「colab」サブディレクトリ内のノートブックを探索するか、以下の Linux の手順に従ってください。
Linux CMake メソッド
Linux 用のダークネット ビルド チュートリアル
オプション: 最新の NVIDIA GPU を使用している場合は、この時点で CUDA または CUDA+cuDNN をインストールできます。インストールされている場合、Darknet は GPU を使用して画像 (およびビデオ) の処理を高速化します。
CMake に必要なファイルをすべて再検索させるには、Darknet ビルド ディレクトリから CMakeCache.txt ファイルを削除する必要があります。
ダークネットを再構築することを忘れないでください。
ダークネットはこれなしでも実行できますが、カスタム ネットワークをトレーニングする場合は、CUDA または CUDA+cuDNN のいずれかが必要です。
1. 前提条件をインストールします。
「バッシュ」
sudo apt-get install build-essential git libopencv-dev cmake
`
2. ダークネット リポジトリのクローンを作成します。
「バッシュ」
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknetcd ダークネット
`
3. ビルド ディレクトリを作成します。
「バッシュ」
mkdir ビルドcd ビルド
`
4. CMake を構成します。
「バッシュ」
cmake -DCMAKEBUILDTYPE=リリース ..
`
5. ダークネットを構築する:
「バッシュ」
make -j4
`
6. ダークネットのパッケージ:
「バッシュ」
パッケージ
`
7. パッケージをインストールします。
「バッシュ」
sudo dpkg -i darknet-VERSION.deb
`
古いバージョンの CMake を使用している場合は、上記の cmake コマンドを実行する前に CMake をアップグレードする必要があります。 Ubuntu での CMake のアップグレードは、次のコマンドで実行できます。
「バッシュ」
sudo apt-get パージ cmake
sudo snap install cmake --classic
`
コマンド シェルとして bash を使用している場合は、この時点でシェルを再起動する必要があります。魚を使用する場合は、すぐに新しいパスを選択する必要があります。
上級ユーザー:
DEB ファイルではなく RPM インストール パッケージを使用する場合は、「CM_package.cmake」内の関連する行を変更します。 「make -j4 package」を実行する前に、次の行を調整します。
`cmake
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
`
Centos や OpenSUSE などのディストリビューションの場合は、これらの行を次のように変更します。
`cmake
SET (CPACK_GENERATOR "DEB")
SET (CPACK_GENERATOR "RPM")
`
ディストリビューションのパッケージ マネージャーを使用して、ビルドされたパッケージをインストールします。 Ubuntu などの Debian ベースのシステムの場合:
「バッシュ」
sudo dpkg -i darknet-2.0.1-Linux.deb
`
.deb パッケージのインストールでは、次のファイルがコピーされます。
/usr/bin/darknet: メインの Darknet 実行可能ファイル。 CLI から「ダークネット バージョン」を実行して、インストールが成功したことを確認します。
/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/ にインストールされています。 「ダークネット バージョン」を実行してインストールを確認します。
/usr/bin/darknet がない場合は、インストールしたのではなく、ビルドしただけであることを意味します。上記のとおり、.deb または .rpm ファイルを必ずインストールしてください。
Windows CMake メソッド
これらの手順は、Windows 11 22H2 の新規インストールを前提としています。
1. Winget を使用して前提条件をインストールします。
「バッシュ」
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」を手動で実行できます。
4. VCPKG を使用して OpenCV をインストールします。
「バッシュ」
CDC:
mkdir c:srccd c:src
git clone https://github.com/microsoft/vcpkgcd 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 を実行して、完全なリストを表示します。
オプション: 最新の NVIDIA GPU を使用している場合は、この時点で CUDA または CUDA+cuDNN をインストールできます。インストールされている場合、Darknet は GPU を使用して画像 (およびビデオ) の処理を高速化します。
CMake に必要なファイルをすべて再検索させるには、Darknet ビルド ディレクトリから CMakeCache.txt ファイルを削除する必要があります。
ダークネットを再構築することを忘れないでください。
ダークネットはこれなしでも実行できますが、カスタム ネットワークをトレーニングする場合は、CUDA または CUDA+cuDNN のいずれかが必要です。
1. CUDA をインストールします。
https://developer.nvidia.com/cuda-downloads にアクセスして、CUDA をダウンロードしてインストールします。
2. cuDNN をインストールします。
https://developer.nvidia.com/rdp/cudnn-download または https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows にアクセスして、cuDNN をダウンロードしてインストールします。
3. CUDA のインストールを確認します。
CUDA をインストールした後、nvcc.exe および nvidia-smi.exe を実行できることを確認します。 PATH 変数を調整する必要がある場合があります。
4. cuDNN を統合します。
ダウンロードした cuDNN アーカイブを解凍し、「bin」、「include」、および「lib」ディレクトリを C:Program FilesNVIDIA GPU Computing ToolkitCUDA[バージョン] にコピーします。既存のファイルを上書きする必要がある場合があります。
5. Visual Studio の後に CUDA をインストールします。
- CUDA は Visual Studio の後にインストールする必要があります。 Visual Studio をアップグレードする場合は、必ず CUDA を再インストールしてください。
6. ダークネットのクローンを作成して以下を構築します。
「バッシュ」
cd c:src
git clone https://github.com/hank-ai/darknet.gitcd ダークネット
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
`
7. 欠落している CUDA/cuDNN DLL を処理します。
- CUDA または cuDNN DLL (例: cublas64_12.dll) の欠落に関するエラーが発生した場合は、関連する CUDA .dll ファイルを darknet.exe と同じディレクトリに手動でコピーします。例えば:
「バッシュ」
コピー "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(これは例です。CUDA のバージョンを確認し、適切なコマンドを実行してください。)
- 最後の msbuild.exe コマンドを再実行して、NSIS インストール パッケージを生成します。
上級ユーザー:
cmake コマンドの出力は、通常の Visual Studio ソリューション ファイル (Darknet.sln) です。ビルドに msbuild.exe ではなく Visual Studio GUI を使用したい場合は、Visual Studio に Darknet プロジェクトをロードして、コマンド ラインの手順を無視できます。
これで、C:srcDarknetbuildsrc-cliReleasedarknet.exe 実行可能ファイルが作成されました。 C:srcDarknetbuildsrc-cliReleasedarknet.exe バージョンを実行してインストールをテストします。
ライブラリ、インクルード ファイル、必要な DLL を含めて Darknet を正しくインストールするには、最後の手順で構築された NSIS インストール ウィザードを実行します。ビルド ディレクトリで darknet-VERSION.exe ファイルを見つけます (例: darknet-2.0.31-win64.exe)。
NSIS インストール パッケージは次のことを行います。
「Darknet」という名前のディレクトリを作成します (例: C:Program FilesDarknet)。
CLI アプリケーション (darknet.exe) およびその他のサンプル アプリケーションをインストールします。
必要なサードパーティの .dll ファイル (OpenCV など) をインストールします。
他のアプリケーションから darknet.dll を使用するために必要な Darknet .dll、.lib、および .h ファイルをインストールします。
テンプレートの .cfg ファイルをインストールします。
これで完了です。インストール ウィザードが完了すると、Darknet が C:Program FilesDarknet にインストールされます。 C:Program FilesDarknetbindarknet.exe version を実行して、インストールを確認します。
C:/Program Files/darknet/bin/darknet.exe がない場合は、インストールしたのではなく、ビルドしただけであることを示します。前に説明したように、NSIS インストール ウィザードの各パネルを必ず実行してください。
ダークネットの使用
CLI
これは、Darknet でサポートされるすべてのコマンドの完全なリストではありません。
Darknet CLI に加えて、Darknet/YOLO の代替インターフェイスを提供する DarkHelp プロジェクト 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 ...
`
- このコマンドは、データセット内の各クラスの平均精度 (AP) を表示します。
mAP@IoU=75:
「バッシュ」
ダークネット検出器マップ Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
`
- このコマンドは、IoU しきい値 0.75 で mAP を計算します。
アンカーの計算:
アンカーの再計算のベスト プラクティスは、DarkMark を使用することです。DarkMark は 100 回の連続計算を実行し、最適なアンカーを選択します。ただし、古いダークネット方法を使用することもできます。
「バッシュ」
ダークネット検出器 calcanchors 動物.データ -numof_clusters 6 -幅 320 -高さ 256
`
新しいネットワークをトレーニングする:
基礎トレーニング:
「バッシュ」
ダークネット ディテクタ -map -dont_show train Animals.data Animals.cfg
`
- 最適なウェイトはanimals_best.weightsとして保存され、トレーニングの進行状況はchart.pngで表示されます。
詳細なトレーニング:
「バッシュ」
ダークネット ディテクタ -map -dont_show --verbose train Animals.data Animals.cfg
`
- このコマンドは、トレーニング中により詳細な情報を提供します。
トレーニング
ダークネット/YOLO FAQ の関連セクションへのクイック リンク:
ファイルとディレクトリのセットアップ: [FAQ セクションへのリンク]
適切な構成ファイルの選択: [FAQ セクションへのリンク]
トレーニング コマンド: [FAQ セクションへのリンク]
アノテーションを付けてトレーニングする最も簡単な方法は、DarkMark を使用して必要なすべての Darknet ファイルを作成することです。これは、新しいニューラル ネットワークをトレーニングする場合に推奨されるアプローチです。
手動トレーニング設定:
1. フォルダーの作成: トレーニング ファイルを保存する新しいフォルダーを作成します。たとえば、~/nn/animals/。
2. 設定ファイルをコピーします。Darknet 設定ファイルをテンプレートとしてフォルダにコピーします (cfg/yolov4-tiny.cfg など)。これで ~/nn/animals/animals.cfg が作成されました。
3. .names ファイルを作成します。同じフォルダーにanimals.names テキスト ファイルを作成します。
- ファイルを編集して、検出するクラスをリストします。各クラスは、空白行やコメントを含めずに個別の行に配置する必要があります。例えば:
`
犬
猫
鳥
馬
`
4. .data ファイルを作成します。同じフォルダーにanimals.data テキスト ファイルを作成します。
- .data ファイルは、トレーニングおよび検証のデータセット、クラス名、およびバックアップ ディレクトリを定義します。例えば:
`
クラス=4
train=/home/ユーザー名/nn/animals/animals_train.txt
valid=/home/ユーザー名/nn/animals/animals_valid.txt
names=/ホーム/ユーザー名/nn/animals/animals.names
バックアップ=/ホーム/ユーザー名/nn/animals
`
5. 画像と注釈のフォルダーを作成します。画像と注釈を保存するフォルダー (例: ~/nn/animals/dataset) を作成します。
- 各画像には、注釈を含む対応する .txt ファイルが必要です。注釈の形式は固有です。手動で作成することはできません。 DarkMark または同様のソフトウェアを使用して画像に注釈を付けます。
- YOLO アノテーション形式については、Darknet/YOLO FAQ で説明されています。
6. 「train」ファイルと「valid」ファイルを作成します。.data ファイルに記載されている「train」および「valid」テキスト ファイルを作成します。
- これらのファイルには、それぞれトレーニングと検証に使用される画像がリストされています。各画像は別々の行に配置する必要があります。相対パスまたは絶対パスを使用できます。
7. 構成ファイルを変更します。
- テキスト エディタで .cfg ファイルを開き、次の調整を行います。
-バッチ=64: 通常はこの値で問題ありません。
- サブディビジョン: サブディビジョン=1 から開始します。 GPU のメモリとネットワークのサイズに応じて、この値を増やす必要がある場合があります。ガイダンスについては、Darknet/YOLO FAQ を参照してください。
- maxbatches: これを 2000 * クラス数に設定します。たとえば、クラスが 4 つある場合、maxbatches=8000 となります。
- ステップ: これを最大バッチの 80% と 90% に設定します。たとえば、maxbatches=8000、steps=6400,7200 の場合。
- 幅と高さ: これらはネットワークの寸法です。ディメンション計算のアドバイスについては、Darknet/YOLO FAQ を参照してください。
- クラス: .names ファイル内のクラスの数 (この例では、classes=4) と一致するように、classes=... 行を変更します。
- filters: 各 [yolo] セクションの前にある各 [convolutional] セクションの filters=... 行を変更します。値は、(クラス数 + 5) * 3 として計算されます。たとえば、4 クラスの場合、フィルター = 27 になります。
8. トレーニングを開始します。
「バッシュ」
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: ダークネット用の堅牢な代替 CLI で、画像のタイリング、ビデオ内のオブジェクト追跡、商用アプリケーション向けの堅牢な C++ API などの機能を提供します。
Darknet/YOLO FAQ: Darknet/YOLO に関する質問に答えるための貴重なリソースです。
Stéphane の YouTube チャンネル: 多数のチュートリアルとサンプルビデオを見つけてください。
Darknet/YOLO Discord サーバー: サーバーに参加してサポートに質問し、他の Darknet/YOLO ユーザーとつながります。
ロードマップ
最終更新日: 2024-10-30
完了しました
qsort() を交換: コードベースの関連部分で qsort() を std::sort() に置き換えました。 (残りのいくつかのインスタンスは依然として qsort() を使用します)
古い関数を削除: check_missing、getchar()、および system() を削除しました。
C++ コードベース: C++ コンパイラ (Linux では g++、Windows では VisualStudio) を使用するように Darknet を変換しました。
Windows ビルド: Windows ビルド プロセスを修正しました。
Python のサポート: Python の統合を修正しました。
ダークネット ライブラリ: ダークネット ライブラリを構築しました。
予測ラベル: 予測のラベル (「アルファベット」コード) が再度有効になりました。
CUDA/GPU コード: CUDA/GPU 機能が再度有効になりました。
CUDNN: CUDNN サポートを再度有効にしました。
CUDNN 半精度: CUDNN 半精度サポートを再度有効にしました。
CUDA アーキテクチャ: CUDA アーキテクチャのハードコーディングを削除しました。
CUDA バージョン情報: CUDA バージョン情報が改善されました。
AVX: AVX サポートを再度有効にしました。
レガシー ファイルの削除: 古いソリューションと Makefile を削除しました。
OpenCV の依存関係: OpenCV を必須の依存関係にしました。
pthread ライブラリ: 古い pthread ライブラリへの依存を削除しました。
STB: STB 依存関係を削除しました。
CMakeLists.txt: 新しい CUDA 検出方法を使用するように CMakeLists.txt を書き直しました。
古いファイルの削除: 古い「アルファベット」コードを削除し、データ/ラベル内の 700 以上の画像を削除しました。
アウトオブソース ビルド: アウトオブソース ビルドが有効になりました。
バージョン番号: バージョン番号の出力が改善されました。
トレーニングのパフォーマンス: トレーニングのパフォーマンスの最適化 (進行中のタスク)。
推論パフォーマンス: 推論のパフォーマンスの最適化 (進行中のタスク)。
参照渡し: 効率を向上させるために、可能な限り参照渡しを使用します。
コードのクリーンアップ: .hpp ファイルをクリーンアップしました。
darknet.h を書き直しました: Darknet API ヘッダー ファイルを更新しました。
cv::Mat の使用法: cv::Mat を void* にキャストする代わりに、適切な C++ オブジェクトとして使用しました。
イメージ構造: 内部イメージ構造に関連する不一致と問題を修正しました。
Jetson サポート: ARM ベースの Jetson デバイスのビルドを修正しました。
- NVIDIA のサポート終了 (C++17 コンパイラなし) のため、古い Jetson デバイスは修正される可能性が低いです。
- 新しい Jetson Orin デバイスは動作しています。
V3 の Python API: Darknet V3 の Python API を修正しました。
短期的な目標
printf() を交換する: printf() を std::cout (進行中) に置き換えます。
Zed カメラのサポート: Zed カメラのサポートを再検討し、改善します。
コマンド ライン解析: より堅牢で一貫性のあるコマンド ライン解析を実装します (進行中)。
中期目標
文字コードの削除: すべての文字コードを削除し、std::string に置き換えます。
コンパイラー警告: 警告を非表示にせず、コンパイラー警告 (進行中) に対処します。
cv::Mat の使用法: C のカスタム イメージ構造の代わりに cv::Mat の使用を強化します (進行中)。
リスト機能: 古いリスト機能を std::vector または std::list に置き換えます。
グレースケール画像のサポート: 1 チャンネルのグレースケール画像のサポートを修正しました。
N チャネル画像サポート: 3 つ以上のチャネル (深度チャネルや熱チャネルなど) を含む画像のサポートを追加します。
継続的なコードのクリーンアップ: 継続的なコードのクリーンアップ (進行中) を続行します。
長期的な目標
CUDA/CUDNN の問題: 異なる GPU 間での CUDA/CUDNN の互換性の問題に対処します。
CUDA/CUDNN コードを書き直す: パフォーマンスと互換性を向上させるために、CUDA/CUDNN コードを書き直します。
非 NVIDIA GPU のサポート: 非 NVIDIA GPU のサポートを調査します。
回転された境界ボックス: 回転された境界ボックスまたは角度情報のサポートを実装します。
キーポイント/スケルトン: キーポイントとスケルトンのサポートを追加します。
ヒートマップ: ヒートマップのサポートを実装します (進行中)。
セグメンテーション: セグメンテーションのサポートを追加します。