Darknet Object Detection Framework and YOLO
Downcodes小編帶您深入了解Darknet,一個用C、C++和CUDA編寫開源神經網路框架,以及運行在Darknet框架上的先進即時目標偵測系統YOLO(You Only Look Once)。
Darknet/YOLO框架比其他框架和YOLO版本更快、更精確。這個框架是完全免費和開源的。您可以將Darknet/YOLO整合到現有專案和產品中,包括商業項目,而無需許可證或付費。
Darknet V3(“Jazz”)於2024年10月發布,使用NVIDIA RTX 3090 GPU時,可以準確地運行LEGO數據集視頻,速度高達1000 FPS,這意味著每個視頻幀在1毫秒或更短的時間內由Darknet/YOLO讀取、調整大小和處理。
如果您需要協助或想討論Darknet/YOLO,請加入Darknet/YOLO Discord伺服器:https://discord.gg/zSq8rtW
Darknet/YOLO的CPU版本可在簡單裝置上運行,例如樹莓派、雲端和協作伺服器、桌上型電腦、筆記型電腦以及高階訓練設備。 Darknet/YOLO的GPU版本需要NVIDIA的CUDA支援GPU。
Darknet/YOLO已知可在Linux、Windows和Mac上運作。請查看下面的建置說明。
Joseph Redmon在2013-2017年寫的原始Darknet工具沒有版本號。我們認為這是0.x版本。
Alexey Bochkovskiy在2017-2021年維護的下一個流行Darknet庫也沒有版本號。我們認為這是1.x版本。
從2023年開始,由Hank.ai贊助,Stéphane Charette維護的Darknet庫是第一個擁有版本指令的函式庫。從2023年到2024年底,它返回版本2.x“OAK”。
目標是在熟悉程式碼庫的同時,盡量減少對現有功能的破壞。
重新編寫建置步驟,以便我們有1種統一的方法在Windows和Linux上使用CMake進行建置。
將程式碼庫轉換為使用C++編譯器。
增強訓練過程中的chart.png。
錯誤修復和與效能相關的最佳化,主要涉及減少訓練網路所需的時間。
此程式碼庫的最後一個分支是v2分支中的版本2.1。
下一階段的開發始於2024年中期,並在2024年10月發布。版本命令現在返回3.x“JAZZ”。
如果您需要執行這些命令之一,您始終可以簽出先前的v2分支。請告知我們,以便我們調查添加回任何缺失的命令。
刪除了許多舊的和未維護的命令。
在訓練和推理過程中,進行了許多效能最佳化。
更改了遺留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
為了方便起見,YOLO的幾個流行版本在MSCOCO資料集上進行了預訓練。此資料集有80個類別,可以在文字檔cfg/coco.names中看到。
還有幾個其他更簡單的可用於測試Darknet/YOLO的資料集和預訓練權重,例如LEGO Gears和Rolodex。有關詳細信息,請參閱Darknet/YOLO常見問題解答。
可以從多個不同的位置下載MSCOCO預訓練權重,也可以從此倉庫下載:
YOLOv2,2016年11月
* YOLOv2-tiny
* YOLOv2-full
YOLOv3,2018年5月
* YOLOv3-tiny
* YOLOv3-full
YOLOv4,2020年5月
* YOLOv4-tiny
* YOLOv4-full
YOLOv7,2022年8月
* YOLOv7-tiny
* YOLOv7-full
MSCOCO預訓練權重僅用於演示目的。 MSCOCO對應的.cfg和.names檔案位於cfg目錄中。範例命令:
`
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,就像您不需要成為機械師就可以駕駛汽車一樣。
Google Colab的說明與Linux的說明相同。提供了一些Jupyter筆記本,展示如何執行某些任務,例如訓練新網路。
請查看colab子目錄中的筆記本,或按照下面的Linux說明操作。
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的系統。如果您使用的是其他發行版,請根據需要進行調整。
`
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
git clone https://github.com/hank-ai/darknetcd darknet
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=Release ..
make -j4 package
sudo dpkg -i darknet-VERSION.deb
`
如果您使用的是舊版的CMake,則需要在執行上面的cmake指令之前升級CMake。可以使用以下指令在Ubuntu上升級CMake:
`
sudo apt-get purge cmakesudo snap install cmake --classic
`
如果您使用bash作為命令外殼,則需要在此時重新啟動外殼。如果使用fish,它應該立即獲取新的路徑。
進階用戶:
如果您想要建立RPM安裝文件而不是DEB文件,請參閱CM_package.cmake中的相關行。在運行make -j4 package之前,您需要編輯這兩行:
`
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
`
對於像Centos和OpenSUSE這樣的發行版,您需要將CM_package.cmake中的這兩行切換為:
`
SET (CPACKGENERATOR "DEB")SET (CPACKGENERATOR "RPM")
`
安裝套件建置完成後,可以使用發行版的常用套件管理器進行安裝。例如,在基於Debian的系統(如Ubuntu)上:
`
sudo dpkg -i darknet-2.0.1-Linux.deb
`
安裝.deb套件將複製以下檔案:
/usr/bin/darknet是常用的Darknet可執行檔。從CLI運行darknet version以確認它已正確安裝。
/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 version。
如果您沒有/usr/bin/darknet,則表示您沒有安裝它,您只是建置了它!請確保按照上面的說明安裝.deb或.rpm檔。
這些說明假設Windows 11 22H2全新安裝。
打開一個普通的cmd.exe命令提示字元窗口,並執行以下命令:
`
winget install Git.Git
winget install Kitware.CMake
winget install nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
此時,我們需要修改Visual Studio安裝以包含對C++應用程式的支援:
1. 點選「Windows開始」選單,然後執行「Visual Studio Installer」。
2. 點選修改。
3. 選擇使用C++的桌面開發。
4. 點選右下角的修改,然後點選是。
所有內容下載並安裝完成後,再次點擊「Windows開始」選單,然後選擇VS 2022的開發者命令提示字元。不要使用PowerShell進行這些步驟,您會遇到問題!
進階用戶:
除了執行開發者命令提示符,您也可以使用普通命令提示字元或ssh到設備,並手動執行「Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat」。
執行上述(不是PowerShell!)的開發者命令提示字元後,執行以下命令安裝Microsoft VCPKG,然後將使用它建置OpenCV:
`
cd c:
mkdir c:srccd c:src
git clone https://github.com/microsoft/vcpkgcd 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/[version]/中。您可能需要覆蓋一些文件。
如果您在稍後安裝CUDA或CUDA+cuDNN,或升級到NVIDIA軟體的較新版本:
CUDA必須在Visual Studio之後安裝。如果您升級Visual Studio,請記得重新安裝CUDA。
所有先前的步驟成功完成之後,您需要克隆Darknet並建置它。在此步驟中,我們還需要告訴CMake vcpkg的位置,以便它可以找到OpenCV和其他依賴:
`
cd c:src
git clone https://github.com/hank-ai/darknet.gitcd darknet
mkdir buildcd 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相同的輸出目錄中。例如:
`
copy "C:Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(這是一個範例!請檢查您正在執行的版本,並執行適合您已安裝內容的命令。)
複製完檔案後,重新執行最後一個msbuild.exe命令以產生NSIS安裝包:
`
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檔。例如:
`
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支援的所有命令的完整列表。
除了Darknet CLI之外,也要注意DarkHelp專案CLI,它提供了一個與Darknet/YOLO不同的CLI。 DarkHelp CLI還具有幾個在Darknet中無法直接使用的進階功能。您可以同時使用Darknet CLI和DarkHelp CLI,它們並不互相排斥。
對於下面顯示的大多數命令,您將需要.weights檔案以及對應的.names和.cfg檔案。您可以自行訓練網路(強烈建議!),或下載其他人已經訓練並在網路上免費提供的網路。預訓練資料集的範例包括:
LEGO Gears(在影像中尋找物體)
Rolodex(在圖像中尋找文字)
MSCOCO(標準80類目標偵測)
可以運行的命令包括:
列出一些可以運行的命令和選項:
`
darknet help
`
檢查版本:
`
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
`
檢查神經網路的準確性:
`
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的準確性:
`
darknet detector map animals.data animals.cfg animalsbest.weights -iouthresh 0.75
`
重新計算錨點最好在DarkMark中完成,因為它會連續運行100次並從所有計算的錨點中選擇最佳錨點。但是,如果您想在Darknet中執行舊版本,請使用以下命令:
`
darknet detector calcanchors animals.data -numof_clusters 6 -width 320 -height 256
`
訓練新網路:
`
darknet detector -map -dont_show train animals.data animals.cfg (另請參閱下面的訓練部分)
`
與Darknet/YOLO常見問題解答相關部分的快速連結:
我應該如何設定我的文件和目錄?
我應該使用哪個設定檔?
在訓練自己的網路時,我應該使用哪個指令?
使用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檔案。列出您要使用的類別。您需要每行正好有一個條目,沒有空白行也沒有註解。對於此範例,.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開始。如果您無法使用1,請參閱Darknet/YOLO常見問題。
注意maxbatches=.... 開始時使用的最佳值是類別數的2000倍。對於此範例,我們有4種動物,因此4 2000 = 8000。這意味著我們將使用maxbatches=8000。
* 注意steps=.... 這應該設定為maxbatches的80%和90%。對於此範例,我們將使用steps=6400,7200,因為maxbatches設定為8000。
* 注意width=...和height=.... 這些是網路尺寸。 Darknet/YOLO常見問題解答說明如何計算要使用的最佳大小。
* 在[convolutional]部分中搜尋classes=...行,並在每個[yolo]部分之前修改它,使其包含.names檔案中的類別數。對於此範例,我們將使用classes=4。
在每個[yolo]部分之前的[convolutional]部分中搜尋filters=...行。要使用的值為(類別數+5) 3。這表示對於此範例,(4 + 5)* 3 = 27。因此,我們在適當的行上使用filters=27。
9. 開始訓練!運行以下命令:
`
cd ~/nn/animals/
darknet detector -map -dont_show train animals.data animals.cfg
`
耐心等待。最佳權重將儲存為animals_best.weights。並且可以透過查看chart.png檔案來觀察訓練的進度。有關在訓練新網路時可能想要使用的其他參數,請參閱Darknet/YOLO常見問題。
如果您想在訓練期間查看更多詳細信息,請添加--verbose參數。例如:
`
darknet detector -map -dont_show --verbose train animals.data animals.cfg
`
要管理您的Darknet/YOLO專案、註釋圖像、驗證您的註釋以及產生與Darknet一起訓練的必要文件,請參閱DarkMark。
要獲得一個強大的Darknet替代CLI、使用圖像平鋪、在您的影片中進行目標追蹤或使用可以輕鬆地用於商業應用程式的強大C++ API,請參閱DarkHelp。
請查看Darknet/YOLO常見問題解答,看看它是否可以幫助您解答問題。
在Stéphane的YouTube頻道上觀看許多教程和示例視頻
如果您有支援問題或想與其他Darknet/YOLO用戶聊天,請加入Darknet/YOLO Discord伺服器。
最後更新時間:2024-10-30
將訓練期間使用的qsort()替換為std::sort()(其他一些鮮為人知的仍然存在)
擺脫check_mistakes、getchar()和system()
將Darknet轉換為使用C++編譯器(Linux上的g++、Windows上的VisualStudio)
修復Windows建置
修復Python支持
建置darknet庫
重新啟用預測的標籤(“alphabet”代碼)
重新啟用CUDA/GPU程式碼
重新啟用CUDNN
重新啟用CUDNN half
不要硬編碼CUDA架構
更好的CUDA版本信息
重新啟用AVX
刪除舊的解決方案和Makefile
使OpenCV成為非可選
刪除對舊pthread函式庫的依賴
刪除STB
重新編寫CMakeLists.txt以使用新的CUDA檢測
刪除舊的「alphabet」程式碼,並刪除data/labels中的700多張圖像
建構源外
擁有更好的版本號輸出
與訓練相關的效能最佳化(正在進行的任務)
與推理相關的效能最佳化(正在進行的任務)
盡可能使用傳值引用
清理.hpp文件
重新編寫darknet.h
不要將cv::Mat轉換為void,而應將其用作適當的C++對象
修復或保持內部影像結構的使用方式一致
修復ARM based Jetson設備的構建
* 由於NVIDIA不再支援原始的Jetson設備,因此它們不太可能被修復(沒有C++17編譯器)
* 新的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的支持
旋轉的邊界框,或某種“角度”支持
關鍵點/骨架
熱圖(進行中)
分割