Data.gov メイン リポジトリ
これは、Data.gov プラットフォームのメイン リポジトリです。これは主にチームの作業を追跡するために使用されますが、datagov 全体のコード (GitHub Actions テンプレート、egress など) を格納するためにも使用されます。
Cloud.gov 環境のドキュメントを探している場合は、アプリケーション リポジトリを参照してください。
GitHub のアクションとテンプレート
いくつかの GitHub アクションは、このリポジトリ内のテンプレートを使用するようにリファクタリングされました。これらのテンプレートと、それらをインベントリとカタログで起動する例はここにあります。
ダークネットオブジェクト検出フレームワークとYOLO
Darknet は、C、C++、CUDA で構築されたオープンソースのニューラル ネットワーク フレームワークです。
YOLO (You Only Look Once) は、Darknet フレームワーク内で動作する最先端のリアルタイム物体検出システムです。
Hank.ai がダークネット/YOLO コミュニティをどのようにサポートしているかをご覧ください。
Darknet/YOLO Web サイトをご覧ください。
ダークネット/YOLO FAQ をご覧ください。
Darknet/YOLO Discord サーバーに参加します。
論文
1. YOLOv7 論文 (論文へのリンク)
2. Scaled-YOLOv4 Paper (論文へのリンク)
3. YOLOv4 論文 (論文へのリンク)
4. YOLOv3 論文 (論文へのリンク)
一般情報
Darknet/YOLO フレームワークは、他のフレームワークや YOLO バージョンよりも高速かつ正確であり続けます。これは完全に無料のオープンソースであるため、ライセンス制限や料金なしで Darknet/YOLO をプロジェクトや製品に組み込むことができます。
2024 年 10 月にリリースされた Darknet V3 (「Jazz」) は、NVIDIA RTX 3090 GPU を使用して最大 1000 FPS で LEGO データセット ビデオを処理できます。これは、各ビデオ フレームが 1 ミリ秒未満で処理されることを意味します。
Darknet/YOLO Discord サーバーに参加してヘルプとディスカッションを入手してください: https://discord.gg/zSq8rtW
Darknet/YOLO の CPU バージョンは、Raspberry Pi、クラウドおよびコラボ サーバー、デスクトップ、ラップトップ、ハイエンド トレーニング リグなどのさまざまなデバイス上で実行できます。 GPU バージョンには CUDA 対応の NVIDIA GPU が必要です。
Darknet/YOLO は、Linux、Windows、および Mac で動作することが知られています。構築手順は以下に記載されています。
ダークネットバージョン
バージョン 0.x: 2013 年から 2017 年にかけて Joseph Redmon によって作成されたオリジナルのダークネット ツール。
バージョン 1.x: 2017 年から 2021 年まで Alexey Bochkovskiy によって維持されていた人気の Darknet リポジトリ。
バージョン 2.x (「OAK」): Hank.ai がスポンサーとなり、2023 年から Stéphane Charette によって保守されるダークネット リポジトリ。このバージョンでは、version コマンドが導入されました。
バージョン 2.1: バージョン 2 コードベースの最後のブランチ。v2 ブランチで使用できます。
バージョン 3.x (「JAZZ」): 2024 年 10 月にリリースされる開発の最新フェーズ。
バージョン 3.x の主な変更点:
1. 多くの古い、メンテナンスされていないコマンドを削除しました。
2. トレーニングと推論の両方のパフォーマンスが大幅に最適化されます。
3. レガシー C API を変更しました。オリジナルの Darknet API を使用するアプリケーションでは、若干の調整が必要になる場合があります。
4. 新しい Darknet V3 C および C++ API の導入: https://darknetcv.ai/api/api.html
5. src-examples の新しいアプリとサンプル コード: https://darknetcv.ai/api/files.html
MSCOCO 事前トレーニング済み重み
YOLO のいくつかの一般的なバージョンは、便宜上 MSCOCO データセットで事前トレーニングされています。このデータセットには 80 のクラスが含まれており、cfg/coco.names テキスト ファイルにリストされています。
Darknet/YOLO のテストには、LEGO Gears や Rolodex などの他の単純なデータセットと事前トレーニングされた重みを使用できます。詳細については、Darknet/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-フル
コマンドの例:
`
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 メソッド
1. オプション: 最新の NVIDIA GPU を使用している場合は、CUDA または CUDA+cuDNN をインストールします。 Darknet は GPU を利用して画像とビデオを高速に処理します。
2. Darknet ビルド ディレクトリから CMakeCache.txt ファイルを削除して、CMake に必要なファイルをすべて再検索させます。
3. ダークネットを再構築します。
4. CUDA をインストールします (オプション): https://developer.nvidia.com/cuda-downloads にアクセスして、CUDA をダウンロードしてインストールします。
5. cuDNN をインストールします (オプション): https://developer.nvidia.com/rdp/cudnn-download または https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package にアクセスします。 -manager-installation-overview を使用して、cuDNN をダウンロードしてインストールします。
6. CUDA のインストールを確認します。nvcc および nvidia-smi を実行できることを確認します。 PATH 変数の変更が必要になる場合があります。
7. 依存関係をインストールし、Darknet を複製します。
「バッシュ」
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknetcd ダークネット
mkdir ビルド
CD ビルド
`
8. CMake を構成します。
「バッシュ」
cmake -DCMAKEBUILDTYPE=リリース ..
`
9. ダークネットを構築する:
「バッシュ」
-j4 パッケージを作成する
`
10. ダークネットをインストールします。
「バッシュ」
sudo dpkg -i darknet-VERSION.deb
`
11. テストインストール:
「バッシュ」
ダークネットバージョン
`
追加メモ:
古いバージョンの CMake を使用している場合は、cmake コマンドを実行する前にアップグレードしてください。
「バッシュ」
sudo apt-get パージ cmake
sudo snap install cmake --classic
`
bash を使用している場合はシェルを再起動します。そうしないと、fish が自動的にパスを更新します。
DEB ファイルの代わりに RPM インストール ファイルを構築するには、CM_package.cmake ファイルを変更します。
インストール パッケージが構築されたら、ディストリビューションのパッケージ マネージャーを使用してインストールします (例: Debian ベースのシステムの sudo dpkg -i darknet-2.0.1-Linux.deb)。
Windows CMake メソッド
1. 必要なツールをインストールします。
「バッシュ」
winget インストール Git.Git
winget インストール Kitware.CMake
winget インストール nsis.nsis
winget インストール Microsoft.VisualStudio.2022.Community
`
2. Visual Studio のインストールを変更します。
- 「Visual Studio インストーラー」を開きます。
- 「変更」をクリックします。
- 「C++ によるデスクトップ開発」を選択します。
- 右下隅の「変更」をクリックし、「はい」をクリックします。
3. VS 2022 の開発者コマンド プロンプトを開きます。PowerShell は使用しないでください。
4. Microsoft VCPKG をインストールします。
「バッシュ」
cd c: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
`
5. オプション: CUDA または CUDA+cuDNN をインストールします (Linux の手順と同様)。
6. CMakeCache.txt を削除します (Linux の手順と同様)。
7. Darknet を再構築します (Linux の手順に従って)。
8. CUDA をインストールします (オプション): https://developer.nvidia.com/cuda-downloads にアクセスして、CUDA をダウンロードしてインストールします。
9. cuDNN のインストール (オプション): https://developer.nvidia.com/rdp/cudnn-download または https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows にアクセスします。 cuDNN をダウンロードしてインストールします。
10. CUDA のインストールを確認します。nvcc.exe を実行できることを確認します。 PATH 変数の変更が必要になる場合があります。
11. cuDNN ファイルを解凍してコピーします。ダウンロードしたら、bin、include、lib ディレクトリを C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[バージョン]/ に解凍してコピーします。一部のファイルを上書きする必要がある場合があります。
12. ダークネットのクローンを作成して以下を構築します。
「バッシュ」
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
`
13. CUDA DLL のコピー (オプション): CUDA または cuDNN DLL (例: cublas64_12.dll) の欠落に関するエラーが発生した場合は、CUDA DLL を Darknet.exe 出力ディレクトリに手動でコピーします。
「バッシュ」
「C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll」をコピー src-cliRelease
`
(バージョン番号は、使用しているものに置き換えてください。)
14. msbuild.exe コマンドを再実行して、NSIS インストール パッケージを生成します。
「バッシュ」
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
15. テストインストール:
「バッシュ」
C:srcDarknetbuildsrc-cliリリースされたarknet.exeのバージョン
`
16. NSIS インストール ウィザードを実行します。これにより、CLI アプリケーション、必要な DLL、ライブラリ、インクルード ファイル、およびテンプレート構成ファイルがインストールされます。
追加メモ:
cmake コマンドは、Visual Studio ソリューション ファイル (Darknet.sln) を生成します。 msbuild.exe の代わりに Visual Studio GUI を使用してプロジェクトをビルドできます。
NSIS インストール パッケージ (darknet-VERSION.exe など) はビルド ディレクトリにあります。
ダークネットの使用
CLI
以下は、すべての Darknet コマンドの完全なリストではありません。
ダークネット ヘルプ: ヘルプ情報を表示します。
ダークネットのバージョン: ダークネットのバージョンを確認します。
予測コマンド:
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 ...
`
mAP@IoU=75:
「バッシュ」
ダークネット検出器マップ Animals.data Animals.cfg Animalsbest.weights -iouthresh 0.75
`
アンカーを再計算します。
DarkMark (推奨): DarkMark を使用して 100 回の連続計算を実行し、最適なアンカーを選択します。
ダークネット:
「バッシュ」
ダークネット検出器 calcanchors 動物.データ -numof_clusters 6 -幅 320 -高さ 256
`
新しいネットワークをトレーニングする:
DarkMark の使用 (推奨): DarkMark を使用して、トレーニングに必要なすべてのファイルを作成します。
手動セットアップ:
1. プロジェクト用に新しいフォルダーを作成します (例: ~/nn/animals/)。
2. 構成ファイルをテンプレートとしてフォルダーにコピーします (例: cfg/yolov4-tiny.cfg)。
3. クラス名を 1 行に 1 つずつ入力して、animals.names テキスト ファイルを作成します。
4. 次の形式で、animals.data テキスト ファイルを作成します。
`
クラス = 4
train = /home/ユーザー名/nn/animals/animals_train.txt
有効 = /home/ユーザー名/nn/animals/animals_valid.txt
名前 = /home/ユーザー名/nn/animals/animals.names
バックアップ = /home/ユーザー名/nn/animals
`
5. 画像と注釈用のフォルダーを作成します (例: ~/nn/animals/dataset)。
6. DarkMark または同様のソフトウェアを使用して、画像に注釈を付け、対応する .txt 注釈ファイルを生成します。
7. トレーニング用と検証用の画像をそれぞれ 1 行に 1 つずつリストして、animalstrain.txt ファイルと Animalsvalid.txt ファイルを作成します。
8. 構成ファイルを変更します。
- バッチ = 64 を設定します。
- 必要に応じてサブディビジョンを調整します。
- max_batches=8000 (または 2000 x クラス数) を設定します。
- ステップ = 6400、7200 (max_batches の 80% および 90%) を設定します。
- 幅と高さをネットワークの寸法に設定します。
- .names ファイル内のクラスの数でクラスを更新します。
- [yolo] セクションの前の各 [convolutional] セクションのフィルターを更新します: (numberofclasses + 5) * 3。
9. トレーニングを開始します。
「バッシュ」
cd ~/nn/動物/
ダークネット ディテクタ -map -dont_show train Animals.data Animals.cfg
`
追加のトレーニングのヒント:
より詳細なトレーニング情報を得るには、 --verbose パラメーターを使用します。
「バッシュ」
ダークネット ディテクタ -map -dont_show --verbose train Animals.data Animals.cfg
`
その他のツールとリンク
DarkMark: Darknet/YOLO プロジェクトを管理し、画像に注釈を付け、注釈を検証し、トレーニング ファイルを生成します。
DarkHelp: Darknet に代わる堅牢な CLI、画像タイル化、オブジェクト追跡、商用アプリケーション用の C++ API のサポート。
ダークネット/YOLO FAQ: よくある質問に対する回答のための包括的なリソース。
Stéphane の YouTube チャンネル: Darknet/YOLO に関するチュートリアルとサンプルビデオ。
Darknet/YOLO Discord サーバー: サポートとディスカッションのためのコミュニティ フォーラム。
ロードマップ
完了したタスク:
効率を向上させるために、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 を書き直しました。
古いアルファベットコードを削除し、不要な画像を削除しました。
アウトオブソースビルドを有効にしました。
バージョン番号の出力が改善されました。
最適化されたトレーニングと推論のパフォーマンス。
該当する場合は参照渡しを実装します。
.hpp ファイルをクリーンアップしました。
darknet.hを書き直しました。
void* にキャストする代わりに、cv::Mat を適切な C++ オブジェクトとして使用しました。
内部イメージ構造の使用における不一致を修正しました。
ARM ベースの Jetson デバイスのビルドの問題を修正しました (サポートされていない古いモデルを除く)。
バージョン 3 での Python API を修正しました。
短期的な目標:
printf() を std::cout に置き換えます。
古い Zed カメラのサポートを調査します。
コマンドライン解析を改善し、標準化します。
中期目標:
すべての char* コードを削除し、std::string に置き換えます。
コンパイラの警告を排除し、一貫したコード スタイルを確保します。
カスタム C イメージ構造よりも cv::Mat の使用を強化します。
古いリスト機能を std::vector または std::list に置き換えます。
1 チャンネルのグレースケール画像のサポートを修正しました。
N チャネル画像のサポートを追加します (追加の深度または熱チャネルなど)。
進行中のコードのクリーンアップ。
長期的な目標:
すべての GPU にわたる CUDA/CUDNN の問題に対処します。
CUDA+cuDNN コードを書き直します。
NVIDIA 以外の GPU のサポートを検討してください。
回転された境界ボックスまたは「角度」サポートを実装します。
キーポイント/スケルトン、ヒートマップ、セグメンテーションのサポートを追加します。