安西布爾
Ansible 是一個非常簡單的 IT 自動化系統。它能夠熟練地處理配置管理、應用程式部署、雲端配置、臨時任務執行、網路自動化和多節點編排。 Ansible 可讓您輕鬆執行複雜的更改,例如使用負載平衡器進行零停機滾動更新。在其官方網站上深入了解 Ansible 的功能。
設計原則
1. 使用 Ansible
您可以使用 pip 或您首選的套件管理器無縫安裝 Ansible 的發布版本。請參閱我們詳細的安裝指南,以了解不同平台的全面說明。
2. 增強進階使用者和開發人員的能力
對於高級用戶和開發人員,開發分支提供對最新功能和修復的存取。雖然整體穩定,但重要的是要承認在使用此分支時可能會發生重大更改。如果您選擇與開發分支合作,我們強烈建議您參與 Ansible 社群。
溝通
加入充滿活力的 Ansible 論壇,與社群互動、尋求協助並提出問題。如需其他溝通管道,請瀏覽我們與 Ansible 社群聯繫的專用指南。
為 Ansible 做出貢獻
編碼指南
我們在開發者指南中精心記錄了我們的編碼指南。我們強烈建議您查看以下部分:
1. 分行資訊
2. 路線圖
根據團隊和社群的寶貴回饋,為每個主要或次要版本(例如 2.7、2.8)發布了初始路線圖。 Ansible 路線圖頁面概述了我們的計劃並提供了影響我們方向的途徑。
作者
Ansible 最初由 Michael DeHaan 構想,並受益於超過 5000 名用戶(並且還在增加)的貢獻。感謝所有貢獻的人!
Ansible 很榮幸能得到紅帽公司贊助。
執照
GNU 通用公共授權 v3.0 或更高版本。請參閱複製以取得完整的許可證文字。
暗網目標偵測框架與 YOLO
!darknet 和 hank.ai 徽標
Darknet 是一個以 C、C++ 和 CUDA 開發的開源神經網路框架。
YOLO(You Only Look Once)代表了一種在暗網框架內運行的尖端即時物體偵測系統。
了解 Hank.ai 如何為 Darknet/YOLO 社群做出貢獻:https://darknetcv.ai/
探索 Darknet/YOLO 官方網站:https://pjreddie.com/darknet/
請參閱全面的 Darknet/YOLO 常見問題:https://pjreddie.com/darknet/yolo/
加入活躍的 Darknet/YOLO Discord 伺服器:https://discord.gg/zSq8rtW
文件
1.YOLOv7論文:https://arxiv.org/abs/2207.02696
2. Scaled-YOLOv4 論文:https://arxiv.org/abs/2102.12074
3.YOLOv4論文:https://arxiv.org/abs/2004.10934
4.YOLOv3論文:https://arxiv.org/abs/1804.02769
一般資訊
Darknet/YOLO 框架在速度和準確性方面繼續優於其他框架和 YOLO 版本。
其完全的自由和開源性質使您可以將 Darknet/YOLO 無縫整合到現有專案和產品中,包括商業專案和產品,而無需許可限製或費用。
Darknet V3(“Jazz”)於 2024 年 10 月發布,在使用 NVIDIA RTX 3090 GPU 時以令人印象深刻的 1000 FPS 處理樂高數據集視頻,展示了其強大功能。這相當於每個視訊畫面的處理時間為 1 毫秒或更短,展現了卓越的效率。
如需與 Darknet/YOLO 相關的任何協助或討論,請加入專用 Discord 伺服器:https://discord.gg/zSq8rtW。
Darknet/YOLO 的 CPU 版本適用於各種設備,包括 Raspberry Pi、雲端和 Colab 伺服器、桌上型電腦、筆記型電腦和高階訓練設備。 Darknet/YOLO 的 GPU 版本需要 NVIDIA 提供的支援 CUDA 的 GPU。
Darknet/YOLO 已驗證可在 Linux、Windows 和 Mac 作業系統上無縫運行。請參閱下面列出的建置說明。
暗網版本
最初的暗網工具由 Joseph Redmon 在 2013 年至 2017 年期間開發,缺乏版本號。我們認為這是版本 0.x。
隨後流行的 Darknet 儲存庫由 Alexey Bochkovskiy 在 2017 年至 2021 年期間維護,也缺少版本號。我們將其歸類為版本 1.x。
從 2023 年開始,由 Hank.ai 贊助並由 Stéphane Charette 管理的 Darknet 儲存庫首次引入了版本命令。從 2023 年到 2024 年底,它返回了版本 2.x「OAK」。
開發目標集中於最大限度地減少對現有功能的干擾,同時熟悉程式碼庫。
2.x 版本的主要改進:
1. 統一建置過程:在 Windows 和 Linux 上使用 CMake 重寫了統一方法的建置步驟。
2. C++ 轉換:轉換程式碼庫以利用 C++ 編譯器。
3.增強訓練視覺化:改進了訓練過程中chart.png的可視化。
4. 性能優化:解決了錯誤並實施了與性能相關的優化,主要集中在減少訓練時間。
版本 2.1 代表此程式碼庫的最終分支,可在 v2 分支中使用。
下一階段的開發於 2024 年中期開始,並最終於 2024 年 10 月發布 3.x“JAZZ”版本。
如果您需要存取該版本的特定命令,您可以保留查看先前的 v2 分支的選項。如果您遇到任何遺失的命令,請通知我們進行調查和可能的重新整合。
3.x 版本的重大變更:
1.命令修剪:刪除了大量過時且無人維護的命令。
2. 增強性能:在訓練和推理過程中實施了廣泛的性能優化。
3. API修改:舊版C API進行了修改;依賴原始 Darknet API 的應用程式將需要進行細微調整。請參閱更新的文件以獲取指導:https://darknetcv.ai/api/api.html
4.新API介紹:引進了新的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 常見問題解答。
您可以從各個位置取得 MSCOCO 預訓練權重,包括此儲存庫:
YOLOv2(2016 年 11 月):
yolov2-小
yolov2-完整
YOLOv3(2018 年 5 月):
yolov3-小
yolov3-完整
YOLOv4(2020 年 5 月):
yolov4-小
yolov4-完整
YOLOv7(2022 年 8 月):
yolov7-小
yolov7-完整
提供 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 通常用於確保框架的功能能如預期運作。
大樓
先前的建置方法(2023 年之前)已合併為統一的解決方案。 Darknet 需要 C++17 或更高版本的 OpenCV,並利用 CMake 產生必要的專案文件。
建立 Darknet/YOLO 不需要 C++ 專業知識;類似於駕駛汽車,您無需成為機械師即可使用它。
我們鼓勵軟體開發人員存取 https://darknetcv.ai/ 以深入了解 Darknet/YOLO 物件偵測框架的內部運作原理。
Google合作實驗室
Google Colab 指令反映了 Linux 指令。幾個 Jupyter 筆記本示範了特定任務,例如訓練新網路。
瀏覽 colab 子目錄中的筆記本或按照下面提供的 Linux 說明進行操作。
Linux CMake方法
1. 必備軟體:
建置重點: sudo apt-get install build-essential git libopencv-dev cmake
2. 儲存庫克隆:
建立來源目錄:mkdir ~/srccd ~/src
克隆儲存庫: git clone https://github.com/hank-ai/darknetcd darknet
3. 建置目錄:
建立建置目錄:mkdir buildcd build
4.CMake配置:
配置 CMake:cmake -DCMAKEBUILDTYPE=Release ..
5. 建構暗網:
建構:make -j4
6. 軟體包安裝:
創建包:包
安裝軟體包: sudo dpkg -i darknet-VERSION.deb
選購:CUDA 或 CUDA+cuDNN 安裝
為了加速影像和視訊處理,您可以選擇安裝 CUDA 或 CUDA+cuDNN。
CUDA安裝:
造訪 https://developer.nvidia.com/cuda-downloads 下載並安裝 CUDA。
cuDNN 安裝:
造訪 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:
從 Darknet 建置目錄中刪除 CMakeCache.txt 文件,以強制 CMake 重新尋找必要的文件。
重建暗網。
CMake版本升級(如有必要):
清除現有的 CMake: sudo apt-get purge cmake
安裝最新的 CMake: sudo snap install cmake --classic
重新啟動 shell (bash) 或確保新路徑被辨識 (fish)。
進階用戶:
若要建置 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 的系統(如 Ubuntu)上:
`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 現已成功建置並安裝在 /usr/bin/ 中。要驗證,請執行 darknet 版本。
Windows CMake方法
1.先決條件:
使用 Winget 安裝以下內容:
- Git:winget 安裝 Git.Git
- CMake:winget 安裝 Kitware.CMake
- NSIS: winget 安裝 nsis.nsis
- Visual Studio 2022 社群:winget install Microsoft.VisualStudio.2022.Community
2. Visual Studio配置:
從 Windows 開始功能表中開啟「Visual Studio 安裝程式」。
按一下“修改”。
選擇“使用 C++ 進行桌面開發”。
點擊右下角的“修改”,然後按一下“是”。
3. 開發者命令提示字元:
開啟「Windows 開始」功能表並選擇「VS 2022 的開發人員命令提示字元」。請勿使用 PowerShell 執行這些步驟。
4. Microsoft VCPKG 安裝(適用於 OpenCV):
導航至 C:: cd c:
建立src目錄:mkdir c:src
克隆 VCPKG: cd c:src git clone https://github.com/microsoft/vcpkg
引導 VCPKG:cd vcpkg bootstrap-vcpkg.bat
整合 VCPKG:.vcpkg.exe 整合安裝
安裝 OpenCV(包含依賴項): .vcpkg.exe install opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
5. 選購:CUDA 或 CUDA+cuDNN 安裝 (Windows)
為了加速影像和視訊處理,您可以選擇安裝 CUDA 或 CUDA+cuDNN。
CUDA安裝:
造訪 https://developer.nvidia.com/cuda-downloads 下載並安裝 CUDA。
cuDNN 安裝:
造訪 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows 下載並安裝 cuDNN。
CUDA 安裝後:
確保您可以執行 nvcc.exe。您可能需要修改 PATH 變數。
解壓縮下載的cuDNN,並將bin、include、lib目錄複製到C:/Program Files/NVIDIA GPUComputing Toolkit/CUDA/[版本]/中。您可能需要覆蓋一些文件。
升級CUDA或CUDA+cuDNN:
CUDA 必須在 Visual Studio 之後安裝。如果升級 Visual Studio,請重新安裝 CUDA。
6. 克隆和建構暗網:
導航到您的來源目錄: cd c:src
複製儲存庫: git clone https://github.com/hank-ai/darknet.git
建立建置目錄: cd darknetmkdir build
使用 VCPKG 設定 CMake: cd build cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
建置解決方案: msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
產生NSIS安裝包:msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
7. 處理遺失的 CUDA/cuDNN DLL:
如果遇到缺少 CUDA 或 cuDNN DLL(例如 cublas64_12.dll)的錯誤,請手動將相關 CUDA .dll 檔案複製到與 Darknet.exe 相同的輸出目錄。例如:
`bash
複製“C:Program FilesNVIDIA GPU計算工具包CUDAv12.2bin * .dll”src-cliRelease
`
調整命令中的版本號以符合您的安裝。
重新運行msbuild.exe指令產生NSIS安裝包。
進階用戶:
cmake 指令產生 Visual Studio 解決方案檔案 (Darknet.sln)。如果您喜歡 Visual Studio GUI,則可以在 Visual Studio 中載入 Darknet 項目,而不是使用命令列工具。
建置後驗證:
驗證 C:srcDarknetbuildsrc-cliReleasedarknet.exe 是否存在。執行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本進行確認。
安裝:
執行NSIS安裝精靈(例如,建置目錄中的darknet-VERSION.exe)來安裝Darknet、程式庫、包含檔案和必要的DLL。
安裝後驗證:
驗證 C:/Program Files/darknet/bin/darknet.exe 是否存在。執行 C:/Program Files/darknet/bindarknet.exe 版本進行確認。
使用暗網
命令列介面
此清單不包含所有暗網命令。
除了 Darknet CLI 之外,還可以考慮使用 DarkHelp 專案 CLI,它提供了替代且更高級的介面。兩個 CLI 可以一起使用。
對於大多數命令,您需要一個 .weights 檔案以及相應的 .names 和 .cfg 檔案。您可以訓練自己的網路或下載預先訓練的網路。
預訓練資料集:
LEGO Gears:影像中的物件偵測。
Rolodex:影像中的文字偵測。
MSCOCO:標準 80 級物體偵測。
常用 CLI 指令:
1.幫助:暗網幫助
2.版本:暗網版本
3.影像預測(V2):
暗網探測器測試 cars.data cars.cfg cars_best.weights image1.jpg
4.影像預測(V3):
darknet02displayannotatedimages cars.cfg image1.jpg
5.影像預測(DarkHelp):
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
6. 輸出座標(V2):
暗網探測器測試animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
7. 輸出座標(V3):
darknet01inference_images 動物 狗.jpg
8.輸出座標(DarkHelp):
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
9. 視訊處理(V2):
暗網探測器示範 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
10.視訊處理(V3):
darknet03display_videos Animals.cfg test.mp4
11.視訊處理(DarkHelp):
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
12.網路攝影機處理(V2):
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -c 0
13.網路攝影機處理(V3):
darknet08display_網路攝影機動物
14.影片保存(V2):
暗網探測器演示animals.dataanimals.cfganimalsbest.weightstest.mp4-outfilenameres.avi
15.影片保存(V3):
darknet05processvideos多線程animals.cfganimals.namesanimals_best.weightstest.mp4
16.影片保存(DarkHelp):
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
17.JSON輸出(V2):
暗網探測器示範animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
18.JSON輸出(V3):
darknet06imagestojson 動物 image1.jpg
19. JSON 輸出(DarkHelp):
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
20.GPU選擇(V2):
暗網探測器示範 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
21. 網路準確性檢查:
暗網探測器地圖 Driving.data Driving.cfg moving_best.weights ...
22. 精度檢查(mAP@IoU=75):
暗網探測器地圖animals.dataanimals.cfganimalsbest.weights-iouthresh 0.75
23.錨點重新計算(建議使用DarkMark):
暗網探測器 calcanchors Animals.data -numof_clusters 6 -寬度 320 -高度 256
24. 訓練新網路:
darknet detector -map -dont_show train Animals.data Animals.cfg(請參閱下面的訓練部分)
訓練
暗網/YOLO 常見問題相關部分的快速連結:
設定:https://pjreddie.com/darknet/yolo/
設定檔選擇:https://pjreddie.com/darknet/yolo/
訓練指令:https://pjreddie.com/darknet/yolo/
最簡化的註釋和訓練方法涉及利用 DarkMark。這是訓練新神經網路的推薦方法。
手動訓練設定:
1. 建立專案資料夾:例如~/nn/animals/。
2. 複製配置模板:
選擇一個設定檔(例如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 檔案來定義其註釋。
您無法手動建立這些 .txt 檔案;需要使用 DarkMark 或類似工具來註釋圖像並產生這些文件。
有關 YOLO 註釋格式,請參閱 Darknet/YOLO FAQ。
6. 建立animalstrain.txt 和animalsvalid.txt 檔案:
按照 Animals.data 檔案中的指定來建立這些文字檔案。
這些文件分別列出了用於訓練和驗證的所有圖像。
每行一張影像,使用相對或絕對路徑。
7.修改設定檔(animals.cfg):
批次:設定批次=64。
細分:從細分=1 開始。根據網路尺寸和 GPU 記憶體根據需要進行調整。
最大批次:一個好的起始值是 maxbatches=2000 * numberofclasses。在此範例中,maxbatches=8000(4 隻動物)。
步驟:設定為 max_batches 的 80% 和 90%。在此範例中,步驟=6400,7200。
寬度和高度:定義網路尺寸。請參閱 Darknet/YOLO 常見問題以取得指導。
類別:設定classes=... 以符合.names 檔案中的類別數(本例中為4)。
過濾器:在yolo層之前的每個卷積層中,將filters=...設為(numberofclasses + 5) * 3。
8. 開始訓練:
導航到您的專案資料夾:cd ~/nn/animals/
開始訓練:darknet detector -map -dont_show train Animals.data Animals.cfg
要有耐心。最佳權重將儲存為animals_best.weights。
透過查看chart.png檔案觀察訓練進度。
有關其他訓練參數,請參閱 Darknet/YOLO 常見問題。
若要獲得更詳細的訓練輸出,請新增 --verbose 標誌:
`bash
暗網探測器-map-dont_show--verbose火車animals.dataanimals.cfg
`
其他工具和鏈接
DarkMark:用於管理 Darknet/YOLO 專案、註釋影像、驗證註釋以及產生訓練檔案。 https://darknetcv.ai/darkmark/
DarkHelp:提供 Darknet、圖像平鋪、物件追蹤和商業友好的 C++ API 的強大替代 CLI。 https://darknetcv.ai/darkhelp/
Darknet/YOLO 常見問題:常見問題的答案。 https://pjreddie.com/darknet/yolo/
Stéphane 的 YouTube 頻道:提供教學和範例影片。 https://www.youtube.com/@stephane-charette
Darknet/YOLO Discord Server:用於支援問題和社群討論。 https://discord.gg/zSq8rtW
路線圖
最後更新:2024-10-30
完全的
在訓練期間將 qsort() 替換為 std::sort()。
刪除了 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 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 的支援。
實現旋轉邊界框或角度支援。
介紹關鍵點/骨架。
添加對熱圖的支援(正在進行中)。
納入細分。