暗網目標偵測框架與 YOLO
!Darknet 和 Hank.ai 標誌
Darknet 是一個用 C、C++ 和 CUDA 寫的開源神經網路框架。 YOLO(You Only Look Once)是一種在 Darknet 框架內運作的最先進的即時物件偵測系統。
了解 Hank.ai 如何支持 Darknet/YOLO 社區
探索 Darknet/YOLO 官方網站
查閱全面的 Darknet/YOLO 常見問題解答
加入活躍的 Darknet/YOLO Discord 伺服器
文件
1.YOLOv7論文
2. Scaled-YOLOv4 論文
3.YOLOv4論文
4.YOLOv3論文
一般資訊
Darknet/YOLO 框架不斷突破性能界限,始終提供超越其他框架和 YOLO 版本的速度和準確性。該框架完全免費且開源,可讓您將 Darknet/YOLO 無縫整合到現有專案和產品中,包括商業應用程序,而無需許可或費用。
Darknet V3(「Jazz」)於 2024 年 10 月發布,效能卓越,能夠使用 NVIDIA RTX 3090 GPU 以高達 1000 FPS 的速度準確處理樂高資料集影片。這意味著 Darknet/YOLO 在 1 毫秒或更短的時間內處理每個視訊幀,包括調整大小和處理。
透過 https://discord.gg/zSq8rtW 加入充滿活力的 Darknet/YOLO Discord 伺服器以獲得協助、討論並與其他使用者聯繫。
Darknet/YOLO 的 CPU 版本可在多種裝置上運行,包括 Raspberry Pi、雲端和 Colab 伺服器、桌上型電腦、筆記型電腦和高階訓練設備。 Darknet/YOLO 的 GPU 版本需要 NVIDIA 提供的支援 CUDA 的 GPU。
眾所周知,Darknet/YOLO 可在 Linux、Windows 和 Mac 上無縫運作。有關詳細說明,請參閱下面的建置部分。
暗網版本
1.版本0.x:這是指Joseph Redmon在2013-2017年開發的原始Darknet工具,該工具缺少版本號。
2. 版本 1.x:這包括 Alexey Bochkovskiy 在 2017-2021 年間維護的流行暗網儲存庫,也沒有官方版本號。
3. 2.x 版「OAK」:此版本於 2023 年推出,由 Hank.ai 贊助,由 Stéphane Charette 維護。它標誌著暗網儲存庫首次合併版本命令。
- 目標是在熟悉程式碼庫的同時盡量減少對現有功能的干擾。
- 主要變化包括:
- 適用於 Windows 和 Linux 的統一 CMake 建置系統
- 程式碼庫轉換為 C++ 編譯器
- 訓練期間增強的chart.png
- 錯誤修復和性能優化,特別是減少訓練時間
- 該程式碼庫的最後一個分支是 v2 分支中的版本 2.1。
4.版本3.x「JAZZ」:此階段的開發於2024年中期開始,並於2024年10月推出。
- 此版本的變更包括:
- 刪除了幾個過時且不受支援的命令。
- 訓練和推理的全面性能優化。
- 舊版 C API 的修改,需要對使用原始 Darknet API 的應用程式進行細微調整。 Darknet V3 C 和 C++ API 的更新文件可以在 https://darknetcv.ai/api/api.html 中找到。
- src-examples 目錄中引入了新應用程式和範例程式碼,可透過 https://darknetcv.ai/api/files.html 存取。
注意:為了相容性,如果您需要執行任何這些特定命令,您始終可以存取先前的 v2 分支。如果您遇到任何遺失的命令,請聯絡我們,我們將調查它們的重新整合。
MSCOCO 預訓練權重
為了方便起見,幾個流行的 YOLO 版本已經在 MSCOCO 資料集上進行了預訓練。該資料集包含 80 個類,可以在 cfg/coco.names 文字檔案中查看。
除了 MSCOCO 之外,您還可以找到其他預先訓練的權重和更簡單的資料集來測試 Darknet/YOLO,例如 LEGO Gears 和 Rolodex。詳細資訊可以在 Darknet/YOLO 常見問題中找到。
MSCOCO 預訓練權重可從各個位置訪問,包括在此存儲庫中:
1.YOLOv2(2016 年 11 月)
- yolov2-tiny.weights
- yolov2-full.weights
2.YOLOv3(2018 年 5 月)
- yolov3-tiny.weights
- yolov3-full.weights
3.YOLOv4(2020 年 5 月)
- yolov4-tiny.weights
- yolov4-full.weights
4.YOLOv7(2022 年 8 月)
- yolov7-tiny.weights
- yolov7-full.weights
MSCOCO 預訓練權重主要用於演示目的。 MSCOCO 對應的 .cfg 和 .names 檔案位於 cfg 目錄中。
命令範例:
`bash
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主要用於驗證Darknet/YOLO的正確運作。
大樓
過去(2023 年之前)採用的各種建構方法已被簡化為統一的解決方案。 Darknet 需要 C++17 或更高版本、OpenCV,並利用 CMake 產生專案檔。
請記住,建置、安裝和運行 Darknet/YOLO 不需要 C++ 知識。這類似於無需成為機械師即可駕駛汽車。
請注意:如果您參考的是具有更複雜構建步驟的舊教程或與本自述文件不一致的教程,請謹慎操作。以下概述的新建置說明於 2023 年 8 月推出。
如需深入了解 Darknet/YOLO 物件偵測框架的內部運作原理,我們鼓勵軟體開發人員存取 https://darknetcv.ai/。
Google合作實驗室
Google Colab 指令與 Linux 指令相同。有多個 Jupyter 筆記本可供使用,示範如何執行特定任務,例如訓練新網路。
瀏覽 colab 子目錄中的筆記本,或按照下面提供的 Linux 說明進行操作。
Linux CMake方法
Linux 暗網建置教學課程
1.安裝依賴項:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆暗網儲存庫:
`bash
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗網
`
3.建立建置目錄:
`bash
mkdir buildcd build
`
4. 使用 CMake 配置:
`bash
cmake -DCMAKEBUILDTYPE=發布 ..
`
5. 建構暗網:
`bash
使-j4
`
6. 打包安裝:
`bash
包裹
sudo dpkg -i darknet-VERSION.deb
`
選購:CUDA 和 cuDNN 安裝
為了加速影像和視訊處理,您可以選擇安裝 CUDA 或 CUDA+cuDNN。如果可用,Darknet 將利用您的 GPU。
1.安裝CUDA:
- 從 https://developer.nvidia.com/cuda-downloads 下載並安裝 CUDA。
- 確保您可以執行 nvcc 和 nvidia-smi。您可能需要修改 PATH 變數。
2.安裝cuDNN:
- 從 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager- 下載並安裝 cuDNN安裝概述。
如果您在初始設定或升級 NVIDIA 軟體後安裝 CUDA 或 CUDA+cuDNN:
1、刪除CMakeCache.txt:
- 從 Darknet 建置目錄中刪除 CMakeCache.txt 文件,以強制 CMake 重新發現所有相依性。
2. 重建暗網:
- 重複上面的 cmake 和 make 步驟。
注意:這些說明假定 Ubuntu 22.04,但可以適用於其他發行版。
進階用戶:
若要建立 RPM 安裝檔案而不是 DEB 文件,請修改 CM_package.cmake 中的相關行。在執行 make -j4 package 之前,更新以下兩行:
`cmake
設定(CPACK_GENERATOR“DEB”)
設定(CPACK_GENERATOR“RPM”)
`
對於 Centos 和 OpenSUSE 等發行版,請將行調整為:
`cmake
設定(CPACK_GENERATOR“DEB”)
設定(CPACK_GENERATOR“RPM”)
`
建置後,使用發行版的套件管理器安裝套件。例如,在基於 Debian 的系統上:
`bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
安裝結果:
/usr/bin/darknet:標準的 Darknet 執行檔。執行 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 版本以確認 Darknet 安裝成功。
Windows CMake方法
Windows 建置說明(假設 Windows 11 22H2)
1.安裝依賴項:
`bash
winget 安裝 Git.Git
winget 安裝 Kitware.CMake
winget安裝nsis.nsis
winget 安裝 Microsoft.VisualStudio.2022.Community
`
2.修改Visual Studio安裝:
- 開啟「Windows 開始」功能表並執行「Visual Studio 安裝程式」。
- 按一下「修改」。
- 選擇「使用 C++ 進行桌面開發」。
- 點擊右下角的“修改”,然後按一下“是”。
3.開啟開發者命令提示字元:
- 開啟「Windows 開始」功能表並選擇「VS 2022 的開發人員命令提示字元」。請勿使用 PowerShell 執行這些步驟。
4.安裝微軟VCPKG:
`bash
疾病管制署:
mkdir c:srccd c:src
git 克隆 https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe整合安裝
.vcpkg.exe 整合 powershell.vcpkg.exe 安裝 opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5.可選:CUDA和cuDNN安裝:
- 安裝 CUDA 或 CUDA+cuDNN 以進行 GPU 加速。
- 請按照 Linux 說明中的相同步驟進行操作。
6. 克隆暗網並建構:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.git
CD暗網
mkdir 構建
光碟建構
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:平台=x64;設定=發布 PACKAGE.vcxproj
`
如果您遇到缺少 CUDA 或 cuDNN DLL(例如 cublas64_12.dll)的錯誤:
1.複製CUDA DLL:
- 手動將 CUDA .dll 檔案複製到與 Darknet.exe 相同的輸出目錄。例如:
`bash
複製“C:Program FilesNVIDIA GPU計算工具包CUDAv12.2bin * .dll”src-cliRelease
`
2.重新運行msbuild.exe:
- 再次執行最後的msbuild.exe指令,產生NSIS安裝包。
進階用戶:
您可以使用普通命令提示字元或 SSH 並執行“Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat”,而不是使用開發人員命令提示字元。
cmake 指令產生 Visual Studio 解決方案檔案 (Darknet.sln)。如果您喜歡使用 Visual Studio GUI,請載入專案而不是依賴命令列工具。
確認:執行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本來驗證安裝。
使用 NSIS 精靈安裝:
執行建置目錄中的 NSIS 安裝精靈(例如,darknet-VERSION.exe)。這將:
- 建立一個 Darknet 目錄(例如,C:Program FilesDarknet)。
- 安裝 CLI 應用程式、darknet.exe 和其他範例應用程式。
- 安裝必要的第 3 方 .dll 檔案(例如,來自 OpenCV)。
- 安裝 Darknet .dll、.lib 和 .h 檔案以在其他應用程式中使用。
- 安裝模板 .cfg 檔案。
確認:安裝後,執行C:Program FilesDarknetbindarknet.exe版本以確認Darknet已準備就緒。
使用暗網
命令列介面
以下是 Darknet 支援的部分命令清單。
除了 Darknet CLI 之外,還可以考慮 DarkHelp 專案 CLI,它提供了具有 Darknet 中無法直接提供的高級功能的替代 CLI。您可以同時使用這兩個 CLI。
對於大多數命令,您需要 .weights 檔案及其對應的 .names 和 .cfg 檔案。您可以訓練自己的網路(強烈建議)或免費在線下載預訓練的網路。範例包括:
LEGO Gears(影像中的物件偵測)
Rolodex(影像中的文字偵測)
MSCOCO(標準80級物體偵測)
常見暗網 CLI 指令:
1. 獲取協助:
`bash
暗網幫助
`
2. 檢查版本:
`bash
暗網版本
`
3. 影像預測:
- V2:
`bash
暗網探測器測試 cars.data cars.cfg cars_best.weights image1.jpg
`
- V3:
`bash
darknet02displayannotatedimages cars.cfg image1.jpg
`
- 黑暗幫助:
`bash
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
4.輸出座標:
- V2:
`bash
暗網探測器測試animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
`
- V3:
`bash
darknet01inference_images 動物 狗.jpg
`
- 黑暗幫助:
`bash
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
`
5、視訊處理:
- V2:
`bash
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
`
- V3:
`bash
darknet03display_videos Animals.cfg test.mp4
`
- 黑暗幫助:
`bash
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
6. 網路攝影機輸入:
- V2:
`bash
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -c 0
`
- V3:
`bash
darknet08display_網路攝影機動物
`
7. 儲存影片結果:
- V2:
`bash
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights test.mp4 -outfilename res.avi
`
- V3:
`bash
darknet05processvideos多線程animals.cfganimals.namesanimals_best.weightstest.mp4
`
- 黑暗幫助:
`bash
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
8.JSON輸出:
- V2:
`bash
暗網探測器示範animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
- V3:
`bash
darknet06imagestojson 動物 image1.jpg
`
- 黑暗幫助:
`bash
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
9.GPU選擇:
- V2:
`bash
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10.網路精度評估:
- 計算mAP:
`bash
暗網探測器地圖 Driving.data Driving.cfg Driving_best.weights ...
`
- 詳細的準確度資訊:
`bash
Id 名稱AvgPrecision TP FN FP TN 準確度ErrorRate 精確度Recall 特異性FalsePosRate -- ---- ------------ ------ ------ ---- -- - ----- -------- --------- --------- ------ ---------- ---- -- ---------- 0 輛汽車91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821 1 摩托車 80.4932 29179 0.0821 1 輛摩托車 5095395 5093 1950395 1953 5093195 5093195 509395 5093195 5093195 509395 509319509395 509395 509395 19395 509395 509395 509395039395 13953959 50 0 .8377 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 30. 45 0.0855 4輛64.3089 1068 509 733 11288 0.9087 0.0913 0.593 0 0.6772 0.9390 0.0610 5 綠燈 86. 6 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 0.9764 0.0236 7 紅光 94.1033 3449 21743. 0.9408 0.9115 0.0885
`
- 計算mAP@IoU=75:
`bash
暗網探測器地圖animals.dataanimals.cfganimalsbest.weights-iouthresh 0.75
`
- 計算錨點:
`bash
暗網探測器 calcanchors Animals.data -numof_clusters 6 -寬度 320 -高度 256
`
11. 訓練新網路:
`bash
暗網探測器-map-dont_show火車animals.dataanimals.cfg
`
訓練
暗網/YOLO 常見問題的基本連結:
設定檔案和目錄
選擇正確的設定檔
訓練自訂網路命令
為了實現無縫註解和訓練,DarkMark 透過自動建立所有必要的 Darknet 檔案來簡化流程。強烈建議使用 DarkMark 來訓練新的神經網路。
手動訓練設定:
1.建立專案目錄:
- 例如,建立一個名為 ~/nn/animals/ 的目錄用於偵測動物。
2.複製設定檔:
- 將適當的 Darknet 設定檔作為範本(例如 cfg/yolov4-tiny.cfg)複製到您的專案目錄中。這將創建 ~/nn/animals/animals.cfg。
3.建立animals.names檔:
- 在同一目錄中建立一個名為animals.names 的文字檔案。
- 列出您想要的類,每行一個,沒有空白行或註解。例如:
`
狗
貓
鳥
馬
`
4.建立animals.data檔:
- 建立一個名為animals.data 的文字檔。內容應該是:
`
班級 = 4
火車 = /home/使用者名稱/nn/animals/animals_train.txt
有效 = /home/使用者名稱/nn/animals/animals_valid.txt
名稱 = /home/使用者名稱/nn/animals/animals.names
備份= /home/用戶名/nn/animals
`
5.建立資料集目錄:
- 建立一個目錄(例如~/nn/animals/dataset)來儲存圖像和註釋。每個圖像都需要一個相應的 .txt 檔案來定義其註釋。該格式是特定的,無法手動建立。使用 DarkMark 或類似軟體對影像進行註釋。 YOLO 註解格式在 Darknet/YOLO FAQ 中有解釋。
6. 建立訓練和驗證文件:
- 建立.data 檔案中提到的檔案animalstrain.txt 和animalsvalid.txt。這些文件分別列出了用於訓練和驗證的所有圖像,每行一張圖像。路徑可以是相對路徑或絕對路徑。
7.設定.cfg檔:
- 使用文字編輯器開啟 .cfg 檔案。
- 確保批次=64。
- 根據網路尺寸和GPU記憶體調整細分。從細分=1 開始。有關替代值,請參閱 Darknet/YOLO 常見問題。
- 將 max_batches 設定為 2000 * 類別數(例如,4 個類別為 8000)。
- 將步長設定為 maxbatches 的 80% 和 90%(例如,maxbatches=8000 時為 6400,7200)。
- 使用 Darknet/YOLO 常見問題中的指南配置寬度和高度(網路尺寸)。
- 將classes=... 替換為.names 檔案中的類別數(例如classes=4)。
- 在每個[yolo]部分之前的[卷積]部分中修改filters=...。使用公式 (numberofclasses + 5) * 3(例如,對於 4 個類,filters=27)。
8. 開始訓練:
- 導航到您的專案目錄:
`bash
cd ~/nn/動物/
`
- 運行訓練命令:
`bash
暗網探測器-map-dont_show火車animals.dataanimals.cfg
`
9. 監控進度:
- 最佳權重將儲存為animals_best.weights。
- 透過查看 Chart.png 檔案來追蹤訓練進度。
- 有關其他訓練參數,請參閱 Darknet/YOLO 常見問題。
10. 詳細培訓:
- 若要在訓練期間獲得更詳細的輸出,請包含 --verbose 參數:
`bash
暗網探測器-map-dont_show--verbose火車animals.dataanimals.cfg
`
其他工具和鏈接
DarkMark:用於管理 Darknet/YOLO 專案、註釋影像、驗證註釋以及產生訓練檔案。
DarkHelp:為 Darknet、圖像平鋪、影片中的物件追蹤以及用於商業應用程式的綜合 C++ API 提供強大的替代 CLI。
Darknet/YOLO 常見問題:回答您的問題的寶貴資源。
Stéphane 的 YouTube 頻道:大量教學和範例影片。
Darknet/YOLO Discord Server:加入社群以獲得支援和討論。
路線圖
最後更新:2024-10-30
完全的:
在訓練期間用 std::sort() 取代了 qsort() (除了少數剩餘情況)。
刪除了 check_mistakes、getchar() 和 system()。
將 Darknet 轉換為使用 C++ 編譯器(Linux 上為 g++,Windows 上為 VisualStudio)。
修復了 Windows 建置。
啟用 Python 支援。
建立了暗網庫。
重新啟用預測標籤(使用“字母”代碼)。
重新啟用 CUDA/GPU 代碼。
重新啟用 CUDNN 和 CUDNN 一半。
刪除了硬編碼的 CUDA 架構。
改進了 CUDA 版本資訊。
重新啟用 AVX。
刪除了舊的解決方案和 Makefile。
使 OpenCV 成為非可選的。
刪除了對舊 pthread 函式庫的依賴。
刪除了機上盒。
重寫 CMakeLists.txt 以進行新的 CUDA 檢測。
刪除了舊的“字母”代碼並刪除了資料/標籤中的 700 多個圖像。
啟用外源建置。
改進了版本號輸出。
在培訓期間實施性能優化(正在進行中)。
在推理期間實施效能最佳化(正在進行中)。
在可行的情況下採用引用傳遞。
清理了 .hpp 檔案。
重寫darknet.h。
避免將 cv::Mat 轉換為 void* 並將其用作正確的 C++ 物件。
修復了內部影像結構使用不一致的問題。
修正了基於 ARM 的 Jetson 裝置的建置問題(不支援的原始 Jetson 型號除外)。
Jetson Orin 設備正常運作。
修復了 V3 中的 Python API。
增強Python支援(尋求Python開發者貢獻)。
短期目標:
將 printf() 替換為 std::cout (正在進行中)。
重新審視對舊 Zed 相機的支援。
改進並確保命令列解析的一致性(正在進行中)。
中期目標:
刪除所有 char* 程式碼並替換為 std::string。
取消隱藏警告並解決編譯器警告(正在進行中)。
優化 cv::Mat 的使用,而不是自訂 C 影像結構(正在進行中)。
用 std::vector 或 std::list 取代舊的清單功能。
修復對 1 通道灰階影像的支援。
增加對 N 通道影像 (N > 3) 的支援。
繼續正在進行的程式碼清理(正在進行中)。
長期目標:
解決所有 GPU 上的 CUDA/CUDNN 問題。
重寫CUDA+cuDNN程式碼。
探索對非 NVIDIA GPU 的支援。
實現旋轉邊界框或“角度”支援。
新增關鍵點/骨架。
實施熱圖(正在進行中)。
引入分段功能。