Darknet Object Detection Framework and YOLO
Downcodes小编 整理
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整合到现有的项目和产品中,包括商业产品,无需许可或付费。
2024年10月发布的Darknet V3(“Jazz”)可以使用NVIDIA RTX 3090 GPU以高达1000 FPS的精度运行LEGO数据集视频,这意味着每个视频帧在1毫秒或更短的时间内由Darknet/YOLO读取、调整大小和处理。
如果你需要帮助或想讨论Darknet/YOLO,请加入Darknet/YOLO Discord服务器:https://discord.gg/zSq8rtW
Darknet/YOLO的CPU版本可以在简单的设备上运行,例如树莓派、云和colab服务器、台式机、笔记本电脑以及高端训练设备。Darknet/YOLO的GPU版本需要NVIDIA的CUDA支持GPU。
Darknet/YOLO已知可以在Linux、Windows和Mac上运行。请查看下面的构建说明。
Darknet Version
由Joseph Redmon在2013-2017年编写的原始Darknet工具没有版本号。我们认为这是0.x版本。
Alexey Bochkovskiy在2017-2021年维护的下一个流行Darknet repo也没有版本号。我们认为这是1.x版本。
Hank.ai赞助并由Stéphane Charette从2023年开始维护的Darknet repo是第一个具有版本命令的repo。从2023年到2024年底,它返回版本2.x“OAK”。
目标是在尽可能少地破坏现有功能的同时,熟悉代码库。
重写构建步骤,以便我们有一种统一的方式来使用CMake在Windows和Linux上构建。
将代码库转换为使用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
MSCOCO Pre-trained Weights
为了方便起见,几个流行的YOLO版本在MSCOCO数据集上进行了预训练。这个数据集有80个类别,可以在文本文件cfg/coco.names中看到。
还有其他几个更简单的数据集和预训练权重可用于测试Darknet/YOLO,例如LEGO Gears和Rolodex。有关详细信息,请参阅Darknet/YOLO常见问题解答。
MSCOCO预训练权重可以从多个不同位置下载,也可以从这个repo下载:
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通常用于确认一切正常。
Building
过去(2023年以前)可用的各种构建方法已合并到一个统一的解决方案中。Darknet需要C++17或更高版本、OpenCV,并使用CMake生成必要的项目文件。
你不需要了解C++来构建、安装或运行Darknet/YOLO,就像你不需要成为机械师才能开车一样。
Google Colab
Google Colab说明与Linux说明相同。有几个Jupyter笔记本展示了如何执行某些任务,例如训练新的网络。
查看colab子目录中的笔记本,或按照下面的Linux说明操作。
Linux CMake Method
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/darknetcd darknet
mkdir buildcd 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作为你的命令外壳,你可能需要重新启动你的外壳。如果你使用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 Method
这些说明假设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++应用程序的支持:
1. 点击“Windows开始”菜单,并运行“Visual Studio Installer”。
2. 点击“修改”。
3. 选择“使用C++进行桌面开发”。
4. 点击右下角的“修改”,然后点击“是”。
一旦所有内容都下载并安装完毕,再次点击“Windows开始”菜单,并选择“VS 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/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和其他依赖项:
`bash
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相同的输出目录中。例如:
`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安装向导。查看build目录中的文件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安装向导的每个面板。
Using Darknet
CLI
以下不是Darknet支持的所有命令的完整列表。
除了Darknet CLI之外,还要注意DarkHelp项目CLI,它提供了Darknet/YOLO的替代CLI。DarkHelp CLI还具有几个Darknet中没有的 advanced功能。你可以同时使用Darknet CLI和DarkHelp CLI,它们并不相互排斥。
对于下面显示的大多数命令,你需要.weights文件以及相应的.names和.cfg文件。你可以训练自己的网络(强烈推荐!)或下载其他人已经训练并免费在互联网上提供的 neural network。预训练数据集的示例包括:
LEGO Gears(在图像中查找物体)
Rolodex(在图像中查找文本)
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 light 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
`
(另请参阅下面的训练部分)
Training
有关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
bird
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文件。
9. 确保batch=64。
10. 注意subdivisions。根据网络尺寸和你GPU上的可用内存,你可能需要增加subdivisions。要使用的最佳值为1,因此从该值开始。如果1对你不起作用,请参阅Darknet/YOLO常见问题解答。
11. 注意maxbatches=...。启动时要使用的一个好值是类别的数量乘以2000。在这个示例中,我们有4种动物,因此4 * 2000 = 8000。这意味着我们将使用maxbatches=8000。
12. 注意steps=...。这应该设置为maxbatches的80%和90%。在这个示例中,由于maxbatches设置为8000,因此我们将使用steps=6400,7200。
13. 注意width=...和height=...。这些是网络尺寸。Darknet/YOLO常见问题解答解释了如何计算要使用的最佳尺寸。
14. 搜索所有classes=...行的实例,并使用.names文件中的类别数量修改它。在这个示例中,我们将使用classes=4。
15. 搜索每个[yolo]部分之前[convolutional]部分中所有filters=...行的实例。要使用的值为(类别数量 + 5) 3。这意味着在这个示例中,(4 + 5) 3 = 27。因此,我们将在适当的行上使用filters=27。
开始训练!运行以下命令:
`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
`
Other Tools and Links
要管理你的Darknet/YOLO项目,注释图像,验证你的注释,并生成使用Darknet进行训练的必要文件,请参阅DarkMark。
有关Darknet的可靠替代CLI、使用图像拼贴、在你的视频中进行目标跟踪,或用于可以轻松用于商业应用程序的可靠C++ API,请参阅DarkHelp。
看看Darknet/YOLO常见问题解答是否可以帮助你解答问题。
查看Stéphane YouTube频道上的许多教程和示例视频。
如果你有支持问题,或想与其他Darknet/YOLO用户聊天,请加入Darknet/YOLO Discord服务器。
Roadmap
最后更新时间: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”代码,并删除数据/标签中的700多张图像
构建源外
有更好的版本号输出
与训练相关的性能优化(正在进行的任务)
与推理相关的性能优化(正在进行的任务)
尽可能使用传值引用
清理.hpp文件
重写darknet.h
不要将cv::Mat转换为void,而是将其用作适当的C++对象
修复或保持内部图像结构的使用方式一致
修复针对基于ARM的Jetson设备的构建
由于不再受NVIDIA支持(没有C++17编译器),原始Jetson设备不太可能被修复
新的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的支持
旋转的边界框,或某种“角度”支持
关键点/骨架
热图(正在进行中)
分割