暗網目標偵測框架與 YOLO
Darknet 是一個開源神經網路框架,主要以 C 和 C++ 編寫,並帶有一些用於 GPU 加速的 CUDA 程式碼。它以其速度和效率而聞名,使其成為即時物體檢測應用的流行選擇。
YOLO(You Only Look Once)是一個強大的即時目標偵測系統,設計用於在 Darknet 框架內運作。它在速度和準確性方面表現出色,在基準測試中始終優於其他物體偵測系統。
深入了解暗網/YOLO 世界:
Hank.ai 的貢獻:了解 Hank.ai 如何積極支持 Darknet/YOLO 社群。
官方網站:瀏覽 Darknet/YOLO 官方網站以獲取全面資訊。
常見問題:尋找有關 Darknet/YOLO 的常見問題的答案。
Discord 伺服器:加入充滿活力的 Darknet/YOLO Discord 社群進行討論並尋求協助。
文件
YOLO 的演變記錄在幾篇研究論文中:
1. YOLOv7:突破深度學習目標偵測的界限
2. Scaled-YOLOv4:針對工業應用擴展 YOLOv4
3. YOLOv4:目標偵測的最佳速度和精度
4. YOLOv3:漸進式改進
一般資訊
Darknet/YOLO 框架繼續處於目標偵測的最前沿,擁有速度和準確性。該框架完全免費且開源,允許開發人員將其無縫合併到他們的專案中,而無需任何許可或費用限制。
Darknet V3 代號“Jazz”,於 2024 年 10 月發布,憑藉 NVIDIA RTX 3090 GPU 實現了卓越的性能。它可以以高達 1000 FPS 的速度處理 LEGO 資料集視頻,這意味著每個幀的分析時間僅為 1 毫秒或更短。
保持聯繫:
Discord:加入 Darknet/YOLO Discord 伺服器以取得支援和討論:https://discord.gg/zSq8rtW。
Darknet/YOLO 適應性強,可在各種平台上運行,從 Raspberry Pi 和雲端伺服器到桌面和高階培訓系統。雖然 CPU 版本可在多種裝置上運行,但 GPU 版本需要 NVIDIA 提供的支援 CUDA 的 GPU。
暗網版本
暗網框架自誕生以來已經發生了顯著的發展,有幾個關鍵版本:
1. 版本 0.x:這個原始版本由 Joseph Redmon 在 2013-2017 年間開發,缺乏具體的版本號。
2. 版本1.x:由Alexey Bochkovskiy於2017-2021年維護,此版本也沒有版本號。
3. 版本 2.x「OAK」:由 Hank.ai 贊助,並由 Stéphane Charette 從 2023 年開始維護,這標誌著第一個帶有版本命令的版本。此版本運行至 2024 年底。
4. 3.x 版「JAZZ」:最新版本於 2024 年 10 月發布,引入了重大改進和新的 API。
建構暗網
建置 Darknet 需要 C++17 編譯器或更新版本、OpenCV 和 CMake 建置系統。雖然該過程可能看起來很複雜,但您不需要成為 C++ 專家即可建置、安裝和運行 Darknet/YOLO。
建築選項:
1. Google Colab:Google Colab 指令與 Linux 指令相同。
2. Linux CMake方法:此方法為Linux使用者提供了詳細的指導。
3. Windows CMake 方法:按照以下說明在 Windows 上建立 Darknet。
注意:如果您使用舊教程,它們的建置步驟可能與下面概述的新的統一方法不同。
軟體開發人員:造訪 https://darknetcv.ai/ 以了解 Darknet/YOLO 物件偵測框架的內部運作原理。
Google合作實驗室
Google Colab 指令與 Linux CMake 方法非常相似。 colab 子目錄中有幾個 Jupyter Notebook,它們示範了訓練新網路等特定任務。
Linux CMake方法
請按照以下說明在 Linux 上建立 Darknet:
1.前提條件:安裝必要的工具:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆Darknet:下載Darknet儲存庫:
`bash
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗網
`
3. 建立建置目錄:為建置過程建立目錄:
`bash
mkdir 構建
光碟建構
`
4. 使用 CMake 設定:產生建置檔:
`bash
cmake -DCMAKEBUILDTYPE=發布 ..
`
5. 建構 Darknet:建構 Darknet 可執行檔:
`bash
使-j4
`
6.安裝包:創建DEB包,方便安裝(可選):
`bash
製作包包
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN(選購):對於GPU加速,安裝CUDA或CUDA+cuDNN:
* CUDA:https://developer.nvidia.com/cuda-downloads
* cuDNN:https://developer.nvidia.com/rdp/cudnn-download
8.驗證安裝:安裝後,檢查Darknet版本:
`bash
暗網版本
`
Windows CMake方法
這些說明適用於在乾淨的 Windows 11 22H2 安裝上建置 Darknet。
1.安裝先決條件:
`bash
winget安裝Git.Git winget安裝Kitware.CMake winget安裝nsis.nsis winget安裝Microsoft.VisualStudio.2022.Community
`
2. Visual Studio C++ 支援:
* 開啟 Visual Studio 安裝程式並選擇「修改」。
* 啟用「使用 C++ 進行桌面開發」並按一下「修改」。
3. VS 2022 的開發人員命令提示字元:開啟 VS 2022 的開發人員命令提示字元。
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/cuDNN(選購):對於GPU加速,安裝CUDA或CUDA+cuDNN:
* CUDA:https://developer.nvidia.com/cuda-downloads
* cuDNN:https://developer.nvidia.com/rdp/cudnn-download
6.克隆暗網:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.git
CD暗網
mkdir 構建
光碟建構
`
7.使用CMake配置:
`bash
cmake -DCMAKEBUILDTYPE=發布-DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. 使用 MSBuild 建構 Darknet:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:平台=x64;設定=發布 PACKAGE.vcxproj
`
9. 驗證安裝:執行 Darknet 執行檔並檢查版本:
`bash
C:srcdarknetbuildsrc-cliReleasedarknet.exe 版本
`
10. 安裝 NSIS 軟體包:執行建置目錄中的 darknet-VERSION.exe 檔案來安裝 Darknet、程式庫、包含檔案和 DLL。
使用暗網
Darknet 提供了用於與框架互動的命令列介面 (CLI)。
注意:除了 Darknet CLI 之外,DarkHelp 專案還提供了具有增強功能的替代 CLI。您可以同時使用 Darknet CLI 和 DarkHelp CLI。
常見暗網 CLI 指令:
幫助:列出可用指令:
`bash
暗網幫助
`
版本:查看暗網版本:
`bash
暗網版本
`
預測(影像):對影像執行物件偵測:
`bash
# 版本 2
暗網探測器測試 cars.data cars.cfg cars_best.weights image1.jpg
# 版本 3
darknet02displayannotatedimages cars.cfg image1.jpg
# 黑暗幫助
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
輸出座標(影像):取得物件座標:
`bash
# 版本 2
暗網探測器測試animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
# 版本 3
darknet01inference_images 動物 狗.jpg
# 黑暗幫助
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
`
視訊處理:
`bash
# 版本 2
# 在影片檔案上運行
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
# 在網路攝影機上運行
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -c 0
# 版本 3
# 在影片檔案上運行
darknet03display_videos Animals.cfg test.mp4
# 在網路攝影機上運行
darknet08display_網路攝影機動物
# 黑暗幫助
# 在影片檔案上運行
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
將結果儲存到影片:
`bash
# 版本 2
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights test.mp4 -outfilename res.avi
# 版本 3
darknet05processvideos多線程animals.cfganimals.namesanimals_best.weightstest.mp4
# 黑暗幫助
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
JSON 輸出:
`bash
# 版本 2
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# 版本 3
darknet06imagestojson 動物 image1.jpg
# 黑暗幫助
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
特定GPU:在指定GPU上運作:
`bash
# 版本 2
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
準確性檢查:評估網路的準確性:
`bash
暗網探測器地圖 Driving.data Driving.cfg Driving_best.weights
`
計算錨點:
`bash
暗網探測器 calcanchors Animals.data -numof_clusters 6 -寬度 320 -高度 256
`
訓練新網絡
DarkMark:要獲得直覺且簡化的註解和訓練方法,請使用 DarkMark。
手動設定:
1. 建立目錄:為您的訓練資料設定一個資料夾。
2. 複製設定:選擇一個設定檔作為模板,例如cfg/yolov4-tiny.cfg,並將其複製到您的目錄中。
3. 建立.names 檔案:建立一個文字檔案(例如animals.names),列出您的類,每行一個。
4. 建立.data 檔案:建立具有以下結構的文字檔案(例如animals.data):
`
班級 = 4
火車=/path/to/animals_train.txt
有效 = /path/to/animals_valid.txt
名稱 = /path/to/animals.names
備份 = /path/to/backup_directory
`
5.準備資料集:將影像和對應的註解檔案組織在一個目錄中。
6. 建立訓練/有效文字檔案:建立兩個文字檔案(animalstrain.txt、animalsvalid.txt),列出用於訓練和驗證的影像的路徑。
7.修改配置:
* 設定批次=64。
* 根據您的 GPU 記憶體調整細分。
將 max_batches 設定為適當的值(例如,2000 個類別)。
* 將步長設定為 max_batches 的 80% 和 90%。
* 依照您的網路尺寸調整寬度和高度。
* 更新類別以符合類別的數量。
* 修改[yolo]部分之前的[卷積]部分中的過濾器。
8. 開始訓練:
`bash
cd /路徑/到/動物
暗網探測器-map-dont_show火車animals.dataanimals.cfg
`
9.查看進度:透過chart.png檔案監控訓練進度。
其他工具和鏈接
DarkMark:該工具簡化了使用 Darknet 進行訓練的圖像註釋、驗證和文件生成。
DarkHelp:Darknet 的強大替代 CLI,具有影像平鋪和物件追蹤等功能。
Darknet/YOLO 常見問題:尋找常見問題的答案。
Stéphane 的 YouTube 頻道:訪問教學和範例影片。
Darknet/YOLO Discord Server:加入社群以獲得支援和討論。
路線圖
完全的:
將 qsort() 替換為 std::sort() 以提高效率。
刪除了已棄用的程式碼(例如,check_mistakes、getchar()、system())。
將 Darknet 遷移到 C++ 編譯器。
修復了 Windows 建置問題。
恢復了 Python 支援。
建立了暗網庫。
重新啟用 CUDA/GPU 程式碼、CUDNN 和 CUDNN 一半。
改進了 CUDA 版本資訊。
重新啟用 AVX 指令集。
刪除了舊的解決方案和 Makefile。
使 OpenCV 成為強制相依性。
刪除了過時的庫相依性(例如,pthread、STB)。
重寫 CMakeLists.txt 以改進 CUDA 檢測。
啟用外源建置。
增強版本號輸出。
實施了訓練和推理的性能優化。
清理程式碼以獲得更好的可讀性。
重寫 darknet.h 以改進 API。
改進了對基於 ARM 的 Jetson 設備的支援。
在 V3 中修復了 Python API。
短期目標:
將 printf() 替換為 std::cout。
研究 zed 相機支援。
改進命令列解析。
中期目標:
將所有 char 程式碼替換為 std::string。
解決編譯器警告。
增強 cv::Mat 的使用,而不是自訂影像結構。
將清單功能升級為 std::vector 或 std::list。
支援1通道灰階影像。
增加對 N 通道影像 (N > 3) 的支援。
正在進行的程式碼清理。
長期目標:
解決不同 GPU 上的 CUDA/CUDNN 問題。
重寫CUDA+cuDNN程式碼以提高效率。
探索對非 NVIDIA GPU 的支援。
實現旋轉邊界框和“角度”支援。
新增關鍵點、骨架和熱圖。
引入分段功能。