Darknet Object Detection Framework and YOLO
!darknet and hank.ai logos
Darknet 是一個用C、C++ 和CUDA 寫的開源神經網路框架。
YOLO(You Only Look Once)是一種最先進的即時目標偵測系統,它在Darknet 框架中運作。
閱讀Hank.ai 如何幫助Darknet/YOLO 社區
宣布Darknet V3 "Jazz"
查看Darknet/YOLO 網站
請閱讀Darknet/YOLO 常見問題解答
加入Darknet/YOLO Discord 伺服器
Papers
1. Paper YOLOv7
2. Paper Scaled-YOLOv4
3. Paper YOLOv4
4. Paper YOLOv3
General Information
Darknet/YOLO 框架比其他框架和YOLO 版本更快、更準確。
該框架完全免費且開源。您可以將Darknet/YOLO 整合到現有專案和產品中,包括商業產品,無需許可或付費。
Darknet V3("Jazz")於2024 年10 月發布,在使用NVIDIA RTX 3090 GPU 時,可以準確地以高達1000 FPS 的速度運行LEGO 數據集視頻,這意味著每個視頻幀都可以在1 毫秒或更短的時間內被Darknet/YOLO 讀取、調整大小和處理。
如果您需要協助或想討論Darknet/YOLO,請加入Darknet/YOLO Discord 伺服器: https://discord.gg/zSq8rtW
Darknet/YOLO 的CPU 版本可在Raspberry Pi、雲端& colab 伺服器、桌上型電腦、筆記型電腦和高階訓練平台等簡單裝置上運作。 Darknet/YOLO 的GPU 版本需要NVIDIA 的CUDA 相容GPU。
Darknet/YOLO 已知可在Linux、Windows 和Mac 上運作。請參閱下面的建置說明。
Darknet 版本
由Joseph Redmon 在2013-2017 年編寫的原始Darknet 工具沒有版本號。我們將此版本視為0.x。
由Alexey Bochkovskiy 在2017-2021 年間維護的下一個流行的Darknet 倉庫也沒有版本號。我們將此版本視為1.x。
由Hank.ai 贊助,由Stéphane Charette 從2023 年開始維護的Darknet 倉庫是第一個具有版本命令的倉庫。從2023 年到2024 年底,它會回到版本2.x "OAK"。
目標是在熟悉程式碼庫的同時盡可能少地破壞現有的功能。
重新編寫建置步驟,以便我們有1 種統一的方式使用CMake 在Windows 和Linux 上建置。
將程式碼庫轉換為使用C++ 編譯器。
增強了訓練時的chart.png。
錯誤修復和效能相關的最佳化,主要與減少訓練網路所需的時間有關。
此程式碼庫的最後一個分支是v2 分支中的版本2.1。
下一階段的開發始於2024 年年中,並在2024 年10 月發布。版本命令現在返回3.x "JAZZ"。
刪除了許多舊的和未維護的命令。
許多效能優化,包括訓練時和推理時的最佳化。
傳統的C API 已修改;使用原始Darknet API 的應用程式需要少量修改:https://darknetcv.ai/api/api.html
新的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 中看到。
還有其他幾個更簡單的可用資料集和預訓練權重,用於測試Darknet/YOLO,例如LEGO Gears 和Rolodex。有關詳細信息,請參閱Darknet/YOLO 常見問題。
MSCOCO 預訓練權重可以從多個不同的位置下載,也可以從這個倉庫下載:
1. YOLOv2,2016 年11 月
* YOLOv2-tiny
* YOLOv2-full
2. YOLOv3,2018 年5 月
* YOLOv3-tiny
* YOLOv3-full
3. YOLOv4,2020 年5 月
* YOLOv4-tiny
* YOLOv4-full
4. YOLOv7,2022 年8 月
* YOLOv7-tiny
* YOLOv7-full
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 產生必要的專案檔。
您無需了解C++ 即可建置、安裝或執行Darknet/YOLO,就像您無需成為機械師即可駕駛汽車一樣。
如果您正在遵循具有更複雜建置步驟的舊教學課程,或建立步驟與本自述文件中不符的步驟,請注意。從2023 年8 月開始,新的建造步驟如下所述。
鼓勵軟體開發人員造訪https://darknetcv.ai/ 以取得更多有關Darknet/YOLO 目標偵測框架內部的資訊。
Google Colab
Google Colab 說明與Linux 說明相同。有幾個Jupyter 筆記本顯示如何執行某些任務,例如訓練新的網路。
請參閱colab 子目錄中的筆記本,或遵循以下Linux 說明。
Linux CMake 方法
Darknet 針對Linux 的建置教學課程
選用:如果您擁有現代NVIDIA GPU,則可以在此時安裝CUDA 或CUDA+cuDNN。如果安裝,Darknet 將使用您的GPU 來加速映像(和視訊)處理。
您必須從Darknet 建置目錄中刪除CMakeCache.txt 檔案以強制CMake 重新尋找所有必要的檔案。
請記住重新建置Darknet。
Darknet 可以沒有它運行,但如果您想訓練自訂網絡,則需要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 軟體的更新版本:
這些說明假設(但不要求!)運行Ubuntu 22.04 的系統。如果使用其他發行版,請視需要進行調整。
`bash
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknet
cd darknet
mkdir build
cd build
cmake -DCMAKEBUILDTYPE=Release ..
make -j4 package
sudo dpkg -i darknet-VERSION.deb
`
如果您使用的是舊版的CMake,則需要在執行上面的cmake 指令之前升級CMake。在Ubuntu 上升級CMake 可以使用以下指令完成:
`bash
sudo apt-get purge cmake
sudo snap install cmake --classic
`
如果您使用bash 作為您的命令shell,您將需要在此時重新啟動您的shell。如果您使用fish,它應該立即拾取新的路徑。
進階用戶:
如果您想建立RPM 安裝文件而不是DEB 文件,請參閱CM_package.cmake 中的相關行。在執行make -j4 package 之前,您需要編輯這兩行:
`cmake
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
`
對於Centos 和OpenSUSE 等發行版,您需要將CM_package.cmake 中的這兩行切換為:
`cmake
SET (CPACK_GENERATOR "DEB")
SET (CPACK_GENERATOR "RPM")
`
若要安裝安裝包,請使用您發行版的常用套件管理器。例如,在基於Debian 的系統(如Ubuntu)上:
`bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
安裝.deb 套件將複製以下檔案:
/usr/bin/darknet 是通常的Darknet 執行檔。從CLI 運行darknet version 以確認它已正確安裝。
/usr/include/darknet.h 是Darknet API,供C、C++ 和Python 開發人員使用。
/usr/include/darknet_version.h 包含開發人員使用的版本資訊。
/usr/lib/libdarknet.so 是用於連結C、C++ 和Python 開發人員的函式庫。
/opt/darknet/cfg/... 是所有.cfg 範本儲存的位置。
您現在完成了! Darknet 已建置並安裝到/usr/bin/ 中。執行以下命令進行測試:darknet version。
如果您沒有/usr/bin/darknet,則表示您沒有安裝它,您只是建置了它!請確保像上面描述的那樣安裝.deb 或.rpm 檔案。
Windows CMake 方法
這些說明假設全新安裝了Windows 11 22H2。
打開一個正常的cmd.exe 命令提示字元窗口,並執行以下命令:
`bash
winget install Git.Git
winget install Kitware.CMake
winget install nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
此時,我們需要修改Visual Studio 安裝以包含對C++ 應用程式的支援:
點選“Windows 開始”選單,並執行“Visual Studio Installer”
點擊“修改”
選擇“使用C++ 的桌面開發”
點擊右下角的“修改”,然後點擊“是”
下載並安裝完所有內容後,再次點擊「Windows 開始」選單,並選擇「Visual Studio 2022 的開發者命令提示字元」。不要使用PowerShell 進行這些步驟,您會遇到問題!
進階用戶:
您無需執行開發者命令提示符,而是可以使用正常的命令提示字元或ssh 登入設備,並手動執行「Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat」。
一旦您如上所述運行了開發者命令提示字元(不是PowerShell!),請執行以下命令以安裝Microsoft VCPKG,它將用於建置OpenCV:
`bash
cd c:
mkdir c:srccd c:src
git clone https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe integrate install
.vcpkg.exe integrate powershell.vcpkg.exe install opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
請耐心等待最後一步,因為它可能需要很長時間才能運行。它需要下載和構建很多東西。
進階用戶:
請注意,在建置OpenCV 時,您可能想要添加許多其他可選模組。運行.vcpkg.exe search opencv 以查看完整列表。
選用:如果您擁有現代NVIDIA GPU,則可以在此時安裝CUDA 或CUDA+cuDNN。如果安裝,Darknet 將使用您的GPU 來加速映像(和視訊)處理。
您必須從Darknet 建置目錄中刪除CMakeCache.txt 檔案以強制CMake 重新尋找所有必要的檔案。
請記住重新建置Darknet。
Darknet 可以沒有它運行,但如果您想訓練自訂網絡,則需要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#download-windows 下載並安裝cuDNN。
安裝CUDA 後,請確保您可以執行nvcc.exe 和nvidia-smi.exe。您可能需要修改PATH 變數。
下載cuDNN 後,解壓縮並將bin、include 和lib 目錄複製到C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[版本]/ 中。您可能需要覆蓋一些文件。
如果您在稍後安裝CUDA 或CUDA+cuDNN,或者您升級到NVIDIA 軟體的更新版本:
CUDA 必須在Visual Studio 之後安裝。如果您升級Visual Studio,請記得重新安裝CUDA。
一旦所有前面的步驟都成功完成,您需要克隆Darknet 並建立它。在此步驟中,我們還需要告訴CMake vcpkg 的位置,以便它可以找到OpenCV 和其他依賴:
`bash
cd c:src
git clone https://github.com/hank-ai/darknet.git
cd darknet
mkdir build
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
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
如果您收到關於某些遺失的CUDA 或cuDNN DLL(例如cublas64_12.dll)的錯誤,則手動將CUDA .dll 檔案複製到與Darknet.exe 相同的輸出目錄中。例如:
`bash
copy "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(這是一個例子!請檢查您正在執行的版本,並執行適合您安裝的版本的命令。)
複製完檔案後,重新執行最後一個msbuild.exe 命令以產生NSIS 安裝包:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
進階用戶:
請注意,cmake 指令的輸出是正常的Visual Studio 解決方案檔案Darknet.sln。如果您是定期使用Visual Studio GUI 而不是msbuild.exe 來建置專案的軟體開發人員,則可以忽略命令列並在Visual Studio 中載入Darknet 專案。
您現在應該擁有可以運行的這個檔案:C:srcDarknetbuildsrc-cliReleasedarknet.exe。執行以下命令進行測試:C:srcDarknetbuildsrc-cliReleasedarknet.exe version。
若要正確安裝Darknet、程式庫、包含檔案和必要的DLL,請執行在最後一步中建置的NSIS 安裝精靈。請參閱建置目錄中的檔案darknet-VERSION.exe。例如:
`bash
darknet-2.0.31-win64.exe
`
安裝NSIS 安裝包將:
建立一個名為Darknet 的目錄,例如C:Program FilesDarknet。
安裝CLI 應用程式darknet.exe 和其他範例應用程式。
安裝所需的第三方.dll 文件,例如來自OpenCV 的文件。
安裝必要的Darknet .dll、.lib 和.h 文件,以便從其他應用程式使用darknet.dll。
安裝模板.cfg 檔案。
您現在完成了!安裝精靈完成後,Darknet 將安裝到C:Program FilesDarknet 中。執行以下命令進行測試:C:Program FilesDarknetbindarknet.exe version。
如果您沒有C:/Program Files/darknet/bin/darknet.exe,則表示您沒有安裝它,您只是建置了它!請確保在前面的步驟中完成NSIS 安裝精靈的每個面板。
使用Darknet
CLI
以下不是Darknet 支援的所有命令的完整清單。
除了Darknet CLI 之外,還要注意DarkHelp 專案CLI,它為Darknet/YOLO 提供了替代的CLI。 DarkHelp CLI 還具有Darknet 中不可直接使用的多個進階功能。您可以將Darknet CLI 和DarkHelp CLI 結合使用,它們並不互相排斥。
對於下面顯示的大多數命令,您將需要.weights 檔案及其對應的.names 和.cfg 檔案。您可以訓練自己的網路(強烈建議!)或下載其他人已經訓練並免費提供給網路的網路。預訓練資料集的範例包括:
1. LEGO Gears(在影像中尋找物體)
2. Rolodex(在圖像中尋找文字)
3. MSCOCO(標準80 類目標偵測)
可運行的命令包括:
列出一些可能運行的命令和選項:
`bash
darknet help
`
檢查版本:
`bash
darknet version
`
使用影像預測:
V2: darknet detector test cars.data cars.cfg cars_best.weights image1.jpg
V3: darknet02displayannotatedimages cars.cfg image1.jpg
DarkHelp: DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
輸出座標:
V2: darknet detector test animals.data animals.cfg animalsbest.weights -extoutput dog.jpg
V3: darknet01inference_images animals dog.jpg
DarkHelp: DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg
處理影片:
V2: darknet detector demo animals.data animals.cfg animalsbest.weights -extoutput test.mp4
V3: darknet03display_videos animals.cfg test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
從網路攝影機讀取:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -c 0
V3: darknet08display_webcam animals
將結果儲存到影片:
V2: darknet detector demo animals.data animals.cfg animalsbest.weights test.mp4 -outfilename res.avi
V3: darknet05processvideosmultithreaded animals.cfg animals.names animals_best.weights test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
JSON:
V2: darknet detector demo animals.data animals.cfg animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
V3: darknet06imagestojson animals image1.jpg
DarkHelp: DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg
在特定GPU 上運行:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4
檢查神經網路的準確性:
`bash
darknet detector map driving.data driving.cfg driving_best.weights ...
`
`
Id Name AvgPrecision TP FN FP TN Accuracy ErrorRate Precision Recall Specificity FalsePosRate
-- ---- ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
0 vehicle 91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821
1 motorcycle 80.4499 2936 513 569 5393 0.8850 0.1150 0.8377 0.8513 0.9046 0.0954
2 bicycle 89.0912 570 124 104 3548 0.9475 0.0525 0.8457 0.8213 0.9715 0.0285
3 person 76.7937 7072 1727 2574 27523 0.8894 0.1106 0.7332 0.8037 0.9145 0.0855
4 many vehicles 64.3089 1068 509 733 11288 0.9087 0.0913 0.5930 0.6772 0.9390 0.0610
5 green light 86.8118 1969 239 510 4116 0.8904 0.1096 0.7943 0.8918 0.8898 0.1102
6 yellow 光 82.0390 126 38 30 1239 0.9525 0.0475 0.8077 0.7683 0.9764 0.0236
7 red light 94.1033 3449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
`
檢查準確率mAP@IoU=75:
`bash
darknet detector map animals.data animals.cfg animalsbest.weights -iouthresh 0.75
`
重新計算錨點最好在DarkMark 中完成,因為它將連續運行100 次並從所有計算的錨點中選擇最佳錨點。但是,如果您想在Darknet 中執行舊版本:
`bash
darknet detector calcanchors animals.data -numof_clusters 6 -width 320 -height 256
`
訓練新的網路:
`bash
darknet detector -map -dont_show train animals.data animals.cfg
`
(另請參閱下面的訓練部分)
訓練
Darknet/YOLO 常見問題中相關部分的快速連結:
1. 我應該如何設定我的文件和目錄?
2. 我應該使用哪個設定檔?
3. 訓練自己的網路時我應該使用哪一個指令?
使用DarkMark 建立所有必要的Darknet 文件,是最簡單的註解和訓練方法。這絕對是訓練新的神經網路的推薦方法。
如果您希望手動設定各種文件以訓練自訂網路:
1. 建立一個新的資料夾來儲存檔案。在此範例中,將建立一個檢測動物的神經網絡,因此建立以下目錄:~/nn/animals/。
2. 複製您想用作模板的Darknet 設定檔之一。例如,請參閱cfg/yolov4-tiny.cfg。將其放置在您建立的資料夾中。在此範例中,我們現在有~/nn/animals/animals.cfg。
3. 在您放置設定檔的相同資料夾中建立一個animals.names 文字檔案。在此範例中,我們現在有~/nn/animals/animals.names。
4. 使用文字編輯器編輯animals.names 檔案。列出您要使用的類別。您需要在每行中精確地包含1 個條目,沒有空白行,沒有註解。在此範例中,.names 檔案將精確地包含4 行:
`
dog
cat
鳥
horse
`
5. 在同一個資料夾中建立一個animals.data 文字檔。在此範例中,.data 檔案將包含:
`
classes=4
train=/home/username/nn/animals/animals_train.txt
valid=/home/username/nn/animals/animals_valid.txt
names=/home/username/nn/animals/animals.names
backup=/home/username/nn/animals
`
6. 建立一個資料夾來儲存您的圖像和註釋。例如,這可以是~/nn/animals/dataset。每個圖像都需要一個對應的.txt 檔案來描述該圖像的註釋。 .txt 註解文件的格式非常具體。您不能手動建立這些文件,因為每個註釋都需要包含註釋的精確座標。請參閱DarkMark 或其他類似軟體來註釋您的影像。 YOLO 註解格式在Darknet/YOLO 常見問題中描述。
7. 建立.data 檔案中命名的「train」和「valid」文字檔。這兩個文字檔案需要分別列出所有Darknet 必須用於訓練和驗證的影像,以便在計算mAP% 時進行驗證。每行恰好有一個圖像。路徑和檔案名稱可以是相對的或絕對的。
8. 使用文字編輯器修改您的.cfg 檔案。
* 確保batch=64。
* 注意subdivisions。根據網路尺寸和GPU 上可用的記憶體量,您可能需要增加subdivisions。最佳使用值為1,因此從該值開始。如果您無法使用1,請參閱Darknet/YOLO 常見問題。
注意maxbatches=.... 當開始時,最佳使用值為類別的數量2000。在此範例中,我們有4 種動物,因此4 * 2000 = 8000。這意味著我們將使用maxbatches=8000。
* 注意steps=.... 這應該設定為maxbatches 的80% 和90%。在此範例中,我們將使用steps=6400,7200,因為maxbatches 設定為8000。
* 注意width=... 和height=.... 這些是網路尺寸。 Darknet/YOLO 常見問題解答說明如何計算最佳使用尺寸。
* 搜尋所有包含行classes=... 的實例並使用.names 檔案中的類別數量進行修改。在此範例中,我們將使用classes=4。
在每個[yolo] 部分之前的[convolutional] 部分中,搜尋所有包含行filters=... 的實例。要使用的值為(類別數量+ 5) 3。這意味著在此範例中,(4 + 5) * 3 = 27。因此,我們將對適當的行使用filters=27。
9. 開始訓練!運行以下命令:
`bash
cd ~/nn/animals/
darknet detector -map -dont_show train animals.data animals.cfg
`
請耐心等待。最佳權重將儲存為animals_best.weights。可以透過查看chart.png 檔案來觀察訓練的進度。請參閱Darknet/YOLO 常見問題解答,以了解您可能想在訓練新網路時使用的其他參數。
如果您想在訓練期間查看更多詳細信息,請添加--verbose 參數。例如:
`bash
darknet detector -map -dont_show --verbose train animals.data animals.cfg
`
其他工具和鏈接
要管理您的Darknet/YOLO 專案、註釋圖像、驗證您的註釋以及產生使用Darknet 進行訓練的必要文件,請參閱DarkMark。
對於Darknet 的強大替代CLI,要使用圖像平鋪、在您的影片中進行目標追蹤或用於強大的C++ API,該API 可以輕鬆地在商業應用程式中使用,請參閱DarkHelp。
查看Darknet/YOLO 常見問題是否可以協助解答您的問題。
查看Stéphane 的YouTube 頻道上的許多教程和示例視頻
如果您有任何支援問題或想與其他Darknet/YOLO 用戶聊天,請加入Darknet/YOLO Discord 伺服器。
路線圖
最後更新時間:2024-10-30
已完成
1. 將訓練期間使用的qsort() 替換為std::sort()(其他一些的奇怪的仍然存在)
2. 擺脫check_mistakes、getchar() 和system()
3. 將Darknet 轉換為使用C++ 編譯器(Linux 上的g++,Windows 上的VisualStudio)
4. 修復Windows 構建
5. 修復Python 支持
6. 建置darknet 庫
7. 重新啟用預測中的標籤("alphabet" 代碼)
8. 重新啟用CUDA/GPU 代碼
9. 重新啟用CUDNN
10. 重新啟用CUDNN half
11. 不要硬編碼CUDA 架構
12. 更好的CUDA 版本信息
13. 重新啟用AVX
14. 刪除舊的解決方案和Makefile
15. 使OpenCV 成為非可選的
16. 刪除對舊的pthread 函式庫的依賴
17. 刪除STB
18. 重新編寫CMakeLists.txt 以使用新的CUDA 偵測
19. 刪除舊的「alphabet」程式碼,並刪除data/labels 中的700 多張影像
20. 建構源外
21. 有更好的版本號碼輸出
22. 與訓練相關的表現最佳化(正在進行的任務)
23. 與推理相關的效能最佳化(正在進行的任務)
24. 盡可能使用引用傳遞
25. 清理.hpp 文件
26. 重新編寫darknet.h
27. 不要將cv::Mat 轉換為void*,而是將其用作適當的C++ 對象
28. 修復或使內部影像結構的用法保持一致
29. 修復針對基於ARM 的Jetson 設備的構建
* 原始的Jetson 裝置不太可能已修復,因為它們不再受NVIDIA 支援(沒有C++17 編譯器)
* 新的Jetson Orin 設備正在運作
30. 修復V3 中的Python API
* 需要更好的Python 支援(是否有任何Python 開發人員想幫助解決這個問題?)
短期目標
1. 將printf() 替換為std::cout(正在進行中)
2. 查看舊的zed 攝影機支援
3. 更好、更一致的命令列解析(正在進行中)
中期目標
1. 刪除所有char* 程式碼並用std::string 替換
2. 不要隱藏警告並清理編譯器警告(正在進行中)
3. 更好地使用cv::Mat 而不是C 中的自訂影像結構(正在進行中)
4. 用std::vector 或std::list 取代舊的清單功能
5. 修復對1 通道灰階影像的支持
6. 增加對N 通道影像的支持,其中N > 3(例如,具有附加深度或熱通道的影像)
7. 正在進行的程式碼清理(正在進行中)
長期目標
1. 修正所有GPU 上的CUDA/CUDNN 問題
2. 重新編寫CUDA+cuDNN 程式碼
3. 考慮新增對非NVIDIA GPU 的支持
4. 旋轉的邊界框,或某種「角度」支持
5. 關鍵點/骨架
6. 熱圖(正在進行中)
7. 分割