暗網目標偵測框架與 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 社群:
文件
YOLOv7:論文鏈接
Scaled-YOLOv4:論文鏈接
YOLOv4:論文鏈接
YOLOv3:論文鏈接
一般資訊
Darknet/YOLO 框架仍然是目標偵測領域的領導者,始終提供優於其他框架和 YOLO 版本的速度和準確性優勢。
主要特點:
1.開源和免費:該框架完全免費和開源,允許您將其無縫地合併到您的專案中,而沒有任何許可限制。
2. 高效能:2024 年 10 月發布的 Darknet V3(「Jazz」)實現了令人印象深刻的效能,使用 NVIDIA RTX 3090 GPU 的 LEGO 資料集達到了 1000 FPS。
3. 多功能部署:Darknet/YOLO相容於各種設備,從Raspberry Pi和雲端伺服器到桌面和高階訓練設備。
4. 跨平台支援:眾所周知,它可以在 Linux、Windows 和 Mac 作業系統上完美運作。
需要協助或想討論 Darknet/YOLO?加入 Discord 上充滿活力的社群:
暗網版本
暗網的演變可以透過它的版本來追溯:
1.版本0.x(2013-2017):由Joseph Redmon開發的原始Darknet工具缺乏正式的版本號。
2.版本1.x(2017-2021):此版本由Alexey Bochkovskiy維護,也缺少版本號。
3. 版本 2.x「OAK」(2023):由 Hank.ai 贊助並由 Stéphane Charette 維護的 Darknet 儲存庫引入了版本命令。此版本帶來了重大改進,包括:
* 使用適用於 Windows 和 Linux 的 CMake 統一建置步驟。
* 轉換為 C++ 編譯器。
* 增強訓練期間的圖表.png 視覺化。
* 錯誤修復和性能優化以提高訓練效率。
4. 版本 2.1:v2 程式碼庫的最後一個分支。
5. 版本 3.x「JAZZ」(2024 年 10 月):此最新版本介紹了:
* 訓練和推理的效能最佳化。
* 修改後的舊版 C API,需要對使用原始 Darknet API 的應用程式進行細微調整。
* 新的 Darknet V3 C 和 C++ API。
* src-examples 目錄中的新應用程式和範例程式碼。
為了與舊版本相容,v2 分支仍然可以存取。如果您需要使用先前版本中的特定命令,請告訴我們,我們將嘗試將它們加回。
MSCOCO 預訓練權重
YOLO 的幾個熱門版本都在 MSCOCO 資料集上進行了預訓練,為試驗該框架提供了一個方便的起點。 MSCOCO 包含 80 個類,在 cfg/coco.names 檔案中列出。
可用的預訓練權重:
YOLOv2(2016 年 11 月):
* yolov2-tiny.weights
* yolov2-full.weights
YOLOv3(2018 年 5 月):
* yolov3-tiny.weights
* yolov3-full.weights
YOLOv4(2020 年 5 月):
* yolov4-tiny.weights
* yolov4-full.weights
YOLOv7(2022 年 8 月):
* yolov7-tiny.weights
* yolov7-full.weights
請記住:雖然這些預先訓練的權重對於演示很有幫助,但訓練您自己的網路以獲得量身定制的解決方案至關重要。 MSCOCO 主要用於驗證您的設定是否正常運作。
使用預訓練權重的範例指令:
`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 CLI
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
大樓
Darknet 利用 CMake 來簡化 Windows 和 Linux 的建置過程。它需要 C++17 或更新的編譯器以及 OpenCV。
建置指令現已統一,取代了舊的、更複雜的方法。
注意:如果您遇到舊教學的問題或與本指南不一致的建置步驟,請參閱此處提供的最新說明。
我們鼓勵軟體開發人員訪問 https://darknetcv.ai/ 以深入了解 Darknet/YOLO 框架的內部工作原理。
Google合作實驗室
Google Colab 指令反映了 Linux 指令。
瀏覽 colab 子目錄中的筆記本,或依照下面的 Linux 說明進行操作。
Linux CMake方法
1.安裝必要的套件:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆暗網儲存庫:
`bash
mkdir ~/src 目錄
cd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗網
mkdir 構建
光碟建構
`
3.配置CMake:
`bash
cmake -DCMAKEBUILDTYPE=發布 ..
`
4. 建構暗網:
`bash
使-j4
`
5. 打包暗網:
`bash
包裹
sudo dpkg -i darknet-VERSION.deb
`
可選:用於 GPU 加速的 CUDA 或 CUDA+cuDNN
造訪 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-installation-overview 下載並安裝cuDNN。
安裝 CUDA 後,請確保 nvcc 和 nvidia-smi 可以存取。您可能需要調整 PATH 變數。
如果您稍後安裝CUDA或CUDA+cuDNN或升級NVIDIA軟體:
刪除 Darknet 建置目錄中的 CMakeCache.txt 檔案以強制 CMake 重新尋找依賴項。
重建暗網。
要在 Ubuntu 上升級 CMake:
`bash
sudo apt-get purge cmake
sudo snap install cmake --經典
`
進階用戶:
要建置 RPM 安裝檔案而不是 DEB 文件,請將 CMpackage.cmake 中的 CPACKGENERATOR 修改為「RPM」。
對於 Centos 和 OpenSUSE,將 CPACK_GENERATOR 變更為「RPM」。
建置安裝套件後,使用適當的套件管理器進行安裝。
確認:
從命令列執行 darknet 版本以確認安裝。
Windows CMake方法
1.安裝所需軟體:
`bash
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.安裝微軟VCPKG:
`bash
疾病管制署:
mkdir c:src
cd 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或CUDA+cuDNN用於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。
安裝後,請確保 nvcc.exe 和 nvidia-smi.exe 可以存取。您可能需要修改 PATH 變數。
如果您稍後安裝CUDA或CUDA+cuDNN或升級NVIDIA軟體:
* 確保在 Visual Studio 之後安裝 CUDA。
* 如果 Visual Studio 升級,請重新安裝 CUDA。
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
`
7. 複製 CUDA DLL(如果需要):
* 如果您收到缺少 CUDA 或 cuDNN DLL 的錯誤,請手動將它們複製到 Darknet 輸出目錄中。例如:
`bash
複製“C:Program FilesNVIDIA GPU計算工具包CUDAv12.2bin * .dll”src-cliRelease
`
8.重新運行msbuild.exe指令產生NSIS安裝包:
`bash
msbuild.exe /property:平台=x64;設定=發布 PACKAGE.vcxproj
`
進階用戶:
您可以使用 Visual Studio GUI 中 CMake 產生的 Darknet.sln 解決方案文件,而不是命令列工具。
確認:
執行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本以確認安裝。
若要安裝 Darknet,請執行 NSIS 安裝精靈:
在建置目錄中尋找 darknet-VERSION.exe 檔案。
執行安裝精靈來安裝 CLI 應用程式、程式庫、包含檔案和必要的 DLL。
使用暗網
命令列介面
注意:以下命令並不詳盡。
除了 Darknet CLI 之外,還可以考慮使用 DarkHelp 專案 CLI,它提供替代功能和進階功能。
大多數指令需要 .weights 檔案及其對應的 .names 和 .cfg 檔案。您可以訓練自己的網路或從網路下載預先訓練的模型。範例包括:
LEGO Gears:影像中的物件偵測。
Rolodex:影像中的文字偵測。
MSCOCO:標準 80 級物體偵測。
命令:
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上運作:
`bash
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10. 檢查神經網路的準確性:
`bash
暗網探測器地圖 Driving.data Driving.cfg moving_best.weights ...
`
11.計算mAP@IoU=75:
`bash
暗網探測器地圖animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
`
12. 重新計算錨點:
`bash
暗網探測器 calcanchors Animals.data -numof_clusters 6 -寬度 320 -高度 256
`
13. 訓練新網路:
`bash
暗網探測器-map-dont_show火車animals.dataanimals.cfg
`
訓練
為了簡化註解和訓練,請使用 DarkMark。這是創建新神經網路的推薦方法。
手動訓練設定(如果您願意):
1.建立專案資料夾:
* 例如,~/nn/animals/ 用於動物檢測。
2.複製Darknet設定檔作為範本:
* 例如,cfg/yolov4-tiny.cfg。
3. 建立animals.names文字檔:
* 列出每個類,每行一個條目,沒有空白行或註解。例子:
`
狗
貓
鳥
馬
`
4. 建立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)。
* 使用 DarkMark 或類似軟體對影像進行註釋。 Darknet/YOLO FAQ 中概述了 YOLO 註釋格式。
6. 建立animalstrain.txt和animalsvalid.txt:
* 列出用於訓練和驗證的所有圖像,每行一張圖像。
7.修改.cfg檔:
* 設定批次=64。
* 根據您的網路尺寸和 GPU 記憶體調整細分。從細分=1 開始。
* 將 max_batches 設定為類別數的 2000 倍(例如,4 個類別為 8000)。
* 將步長設定為 max_batches 的 80% 和 90%。
* 調整寬度和高度以符合您所需的網路尺寸。
* 修改類別以反映 .names 檔案中的類別數量。
更新每個 [yolo] 部分之前的 [卷積] 部分中的過濾器:(numberofclasses + 5) 3.
8. 開始訓練:
`bash
cd ~/nn/動物/
暗網探測器-map-dont_show火車animals.dataanimals.cfg
`
如需更多訓練細節和進階參數,請參閱 Darknet/YOLO 常見問題。
其他工具和鏈接
DarkMark:管理 Darknet/YOLO 專案、註釋影像、驗證註解並產生訓練檔案。
DarkHelp:為 Darknet 提供替代 CLI,支援影像平鋪、物件追蹤以及用於商業應用程式的強大 C++ API。
Darknet/YOLO 常見問題:用於回答您的問題的綜合資源。
Stéphane 的 YouTube 頻道:訪問大量教學和範例影片。
Darknet/YOLO Discord 伺服器:與其他使用者聯繫以獲得支援和討論。
路線圖
最後更新於 2024 年 10 月 30 日:
完全的:
在訓練期間適用的情況下,將 qsort() 替換為 std::sort() 。
刪除了 check_mistakes、getchar() 和 system()。
將 Darknet 轉換為使用 C++ 編譯器(Linux 上為 g++,Windows 上為 VisualStudio)。
修復了 Windows 建置。
重新啟用預測標籤(“字母”代碼)。
重新啟用 CUDA/GPU 程式碼、CUDNN 和 CUDNN 一半。
刪除了硬編碼的 CUDA 架構。
改進了 CUDA 版本資訊。
重新啟用 AVX。
刪除了舊的解決方案和 Makefile。
使 OpenCV 成為非可選依賴項。
刪除了舊的 pthread 庫相依性。
刪除了機上盒。
重寫 CMakeLists.txt 以改進 CUDA 檢測。
刪除了舊的“字母”代碼和相關圖像。
實施了源外建構。
增強版本號輸出。
訓練期間的性能優化(正在進行中)。
推理期間的性能優化(正在進行中)。
盡可能實現按引用傳遞。
清理了 .hpp 檔案。
重寫了darknet.h。
消除了將 cv::Mat 轉換為 void 並將其用作 C++ 物件。
修復了內部影像結構的不一致問題。
修復了基於 ARM 的 Jetson 設備的建置(新的 Jetson Orin 設備正在運行)。
在 V3 中修復了 Python API。
短期目標:
將 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 的支援。
實現旋轉邊界框或“角度”支援。
新增關鍵點/骨架。
引入熱圖(正在進行中)。
探索細分。
請繼續關注 Darknet/YOLO 框架的更新和貢獻!