暗网目标检测框架和 YOLO
Darknet 是一个用 C、C++ 和 CUDA 编写的开源神经网络框架。
YOLO(You Only Look Once)是一个最先进的实时目标检测系统,运行在 Darknet 框架中。
了解 Hank.ai 如何帮助 Darknet/YOLO 社区
宣布暗网 V3“爵士乐”
请参阅 Darknet/YOLO 网站
请仔细阅读 Darknet/YOLO 常见问题解答
加入 Darknet/YOLO Discord 服务器
文件
1.论文YOLOv7
2. 纸尺度-YOLOv4
3.论文YOLOv4
4.论文YOLOv3
一般信息
Darknet/YOLO 框架仍然比其他框架和 YOLO 版本更快、更准确。
该框架是完全免费且开源的。您可以将 Darknet/YOLO 整合到现有的项目和产品中 - 包括商业项目和产品 - 无需许可证或支付费用。
2024 年 10 月发布的 Darknet V3(“Jazz”)在使用 NVIDIA RTX 3090 GPU 时可以以高达 1000 FPS 的速度准确运行乐高数据集视频,这意味着每个视频帧都可以由 Darknet/YOLO 在 1 毫秒或 1 毫秒内读取、调整大小和处理。较少的。
如果您需要帮助或想讨论 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 上运行。请参阅下面的搭建说明。
暗网版本
Joseph Redmon 在 2013-2017 年编写的原始暗网工具没有版本号。我们认为这个版本是 0.x。
Alexey Bochkovskiy 在 2017 年至 2021 年间维护的下一个流行的暗网存储库也没有版本号。我们认为这个版本是 1.x。
从 2023 年开始,由 Hank.ai 赞助并由 Stéphane Charette 维护的 Darknet 存储库是第一个带有版本命令的存储库。从 2023 年到 2024 年底,它返回了版本 2.x“OAK”。
目标是在熟悉代码库的同时尝试尽可能少地破坏现有功能。
该版本的主要变化包括:
1. 重写了构建步骤,以在 Windows 和 Linux 上使用 CMake 提供 1 种统一的构建方式。
2. 转换代码库以使用 C++ 编译器。
3. 训练时增强chart.png。
4. 错误修复和与性能相关的优化,主要与减少训练网络所需的时间有关。
该代码库的最后一个分支是 v2 分支中的版本 2.1。
下一阶段的开发于 2024 年中期开始,并于 2024 年 10 月发布。版本命令现在返回 3.x“JAZZ”。
如果您需要运行这些命令之一,您始终可以签出之前的 v2 分支。请告诉我们,以便我们研究添加回所有丢失的命令。
该版本的主要变化包括:
1.删除了许多旧的和未维护的命令。
2. 在训练和推理过程中进行许多性能优化。
3. 修改了旧版C API;使用原始 Darknet API 的应用程序需要进行少量修改:https://darknetcv.ai/api/api.html
4. 新的 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 预训练权重可以从几个不同的位置下载,也可以从此存储库下载:
1.YOLOv2,2016 年 11 月
- YOLOv2-微小
- YOLOv2-full
2.YOLOv3,2018 年 5 月
- YOLOv3-微小
- YOLOv3-full
3.YOLOv4,2020 年 5 月
- YOLOv4-小
- YOLOv4-full
4.YOLOv7,2022 年 8 月
- YOLOv7-小
- 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 指令与 Linux 指令相同。有多个 Jupyter 笔记本可以展示如何执行某些任务,例如训练新网络。
请参阅 colab 子目录中的笔记本,和/或按照下面的 Linux 说明进行操作。
Linux CMake方法
1.安装必要的包:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆暗网存储库:
`bash
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknetcd darknet
`
3. 创建构建目录并运行 CMake:
`bash
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=发布 ..
`
4. 构建暗网:
`bash
使-j4
`
5.打包安装Darknet:
`bash
包裹
sudo dpkg -i darknet-VERSION.deb
`
6. 验证安装:
`bash
暗网版本
`
Windows CMake方法
1.安装必要的包:
`bash
winget安装Git.Git winget安装Kitware.CMake winget安装nsis.nsis winget安装Microsoft.VisualStudio.2022.Community
`
2.修改Visual Studio安装:
- 单击“Windows 开始”菜单并运行“Visual Studio 安装程序”。
- 单击“修改”。
- 选择使用 C++ 进行桌面开发。
- 单击右下角的“修改”,然后单击“是”。
3. 打开 VS 2022 的开发人员命令提示符:
- 单击“Windows 开始”菜单并选择 VS 2022 的开发人员命令提示符。请勿使用 PowerShell 执行这些步骤。
4.安装微软VCPKG:
`bash
cd c:mkdir c:srccd c:src git clone https://github.com/microsoft/vcpkgcd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe 集成
安装.vcpkg.exe 集成 powershell.vcpkg.exe 安装 opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5.克隆暗网存储库:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.gitcd darknet
`
6. 创建构建目录并运行 CMake:
`bash
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=发布-DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
7. 构建暗网:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
`
8.生成NSIS安装包:
`bash
msbuild.exe /property:平台=x64;配置=发布 PACKAGE.vcxproj
`
9. 运行 NSIS 安装向导:
- 在构建目录中打开文件 darknet-VERSION.exe。例如:darknet-2.0.31-win64.exe。
10. 验证安装:
`bash
C:Program FilesDarknetbindarknet.exe 版本
`
使用暗网
命令行界面
以下不是 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级物体检测)
要运行的命令包括:
1. 列出一些可能运行的命令和选项:
`bash
暗网帮助
`
2、检查版本:
`bash
暗网版本
`
3. 使用图像进行预测:
- V2:
`bash
暗网探测器测试 cars.data cars.cfg cars_best.weights image1.jpg
`
- V3:
`bash
darknet02displayannotatedimages cars.cfg image1.jpg
`
- 黑暗帮助:
`bash
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
4、输出坐标:
- V2:
`bash
暗网探测器测试animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
`
- V3:
`bash
darknet01inference_images 动物 狗.jpg
`
- 黑暗帮助:
`bash
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
`
5. 处理视频:
- V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
`
- V3:
`bash
darknet03display_videos Animals.cfg test.mp4
`
- 黑暗帮助:
`bash
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
6. 从网络摄像头读取数据:
- V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -c 0
`
- V3:
`bash
darknet08display_网络摄像头动物
`
7. 将结果保存到视频中:
- V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test.mp4 -outfilename res.avi
`
- V3:
`bash
darknet05processvideos多线程animals.cfganimals.namesanimals_best.weightstest.mp4
`
- 黑暗帮助:
`bash
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
8.JSON:
- V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
- V3:
`bash
darknet06imagestojson 动物 image1.jpg
`
- 黑暗帮助:
`bash
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
9. 在特定GPU上运行:
`bash
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10. 检查神经网络的准确性:
`bash
暗网探测器地图 Driving.data Driving.cfg moving_best.weights ...
`
输出:
`
ID 名称 AvgPrecision TP FN FP TN 准确率 错误率 精确率 召回率 特异性 FalsePosRate
------ ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
0 辆 91.2495 32648 3903 5826 65129 0.9095 0.0905 0.8486 0.8932 0.9179 0.0821
1 摩托车 80.4499 2936 513 569 5393 0.8850 0.1150 0.8377 0.8513 0.9046 0.0954
2 自行车 89.0912 570 124 104 3548 0.9475 0.0525 0.8457 0.8213 0.9715 0.0285
3人 76.7937 7072 1727 2574 27523 0.8894 0.1106 0.7332 0.8037 0.9145 0.0855
4多辆车 64.3089 1068 509 733 11288 0.9087 0.0913 0.5930 0.6772 0.9390 0.0610
5 绿光 86.8118 1969 239 510 4116 0.8904 0.1096 0.7943 0.8918 0.8898 0.1102
6 黄光 82.0390 126 38 30 1239 0.9525 0.0475 0.8077 0.7683 0.9764 0.0236
7 红光 94.1033 3449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
`
11. 检查精度 mAP@IoU=75:
`bash
暗网探测器地图animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
`
12. 重新计算锚点:
- 最好在 DarkMark 中完成。
- 在暗网中,使用:
`bash
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
`
13. 训练新网络:
`bash
cd ~/nn/动物/
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
训练
暗网/YOLO 常见问题解答相关部分的快速链接:
1. 我应该如何设置我的文件和目录?
2. 我应该使用哪个配置文件?
3. 训练自己的网络时应该使用什么命令?
最简单的注释和训练方法是使用 DarkMark 创建所有必要的 Darknet 文件。这绝对是训练新神经网络的推荐方法。
如果您想手动设置各种文件来训练自定义网络:
1. 为您的项目创建一个新文件夹:
- 对于本例,将创建一个神经网络来检测动物,因此创建以下目录:~/nn/animals/。
2.复制Darknet配置文件作为模板:
- 例如,将cfg/yolov4-tiny.cfg复制到项目文件夹中。您现在将拥有 ~/nn/animals/animals.cfg。
3. 创建animals.names文本文件:
- 该文件将包含您要检测的类的列表,每行一个。例如:
`
狗
猫
鸟
马
`
4. 创建animals.data文本文件:
- 该文件指定训练和验证数据的路径,以及名称和备份目录。例如:
`
班级=4
train=/home/用户名/nn/animals/animals_train.txt
valid=/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. 创建“train”和“valid”文本文件:
- 这两个文本文件需要单独列出 Darknet 在计算 mAP% 时必须用于训练和验证的所有图像。每行只有一张图像。路径和文件名可以是相对的或绝对的。
7. 修改您的.cfg 文件:
- 批次:设置为 64。
- 细分:从 1 开始。如果您需要根据内存可用性进行调整,请参阅 Darknet/YOLO 常见问题解答。
- maxbatches:一个好的起始值为 2000 numberof_classes。对于本例,我们有 4 只动物,因此 4 2000 = 8000。
- 步骤:设置为最大批次的 80% 和 90%。对于此示例,我们将使用steps=6400,7200,因为 maxbatches 设置为 8000。
- 宽度和高度:这些是网络尺寸。 Darknet/YOLO 常见问题解答解释了如何计算最佳使用大小。
- 类:使用 .names 文件中的类数修改此行。对于本例,我们将使用classes=4。
- 过滤器:在每个[yolo]部分之前的[卷积]部分中,将filters=...修改为值(numberofclasses + 5) * 3。在本例中,我们使用filters=27。
8. 开始训练:
`bash
cd ~/nn/动物/
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
要有耐心。最佳权重将保存为animals_best.weights。通过查看chart.png文件可以观察训练进度。请参阅 Darknet/YOLO 常见问题解答,了解训练新网络时可能需要使用的其他参数。
如果您想在训练过程中查看更多详细信息,请添加 --verbose 参数。例如:
`bash
暗网探测器-map-dont_show--verbose火车animals.dataanimals.cfg
`
其他工具和链接
1. DarkMark:管理您的 Darknet/YOLO 项目、注释图像、验证注释并生成使用 Darknet 进行训练所需的文件。
2. DarkHelp:用于 Darknet 的强大替代 CLI,使用图像平铺,用于视频中的对象跟踪,或用于可轻松在商业应用程序中使用的强大 C++ API。
3. Darknet/YOLO FAQ:帮助解答您的问题。
4. Stéphane 的 YouTube 频道:提供教程和示例视频。
5. Darknet/YOLO 不和谐服务器:与其他 Darknet/YOLO 用户聊天并寻求支持。
路线图
最后更新于 2024 年 10 月 30 日:
完全的
1. 将训练期间使用的 qsort() 替换为 std::sort()。
2. 摆脱 check_mistakes、getchar() 和 system()。
3. 将 Darknet 转换为使用 C++ 编译器。
4.修复Windows构建。
5.修复Python支持。
6. 构建暗网库。
7. 重新启用预测标签(“字母”代码)。
8. 重新启用 CUDA/GPU 代码。
9. 重新启用 CUDNN。
10. 重新启用 CUDNN 一半。
11.不要对CUDA架构进行硬编码。
12.更好的CUDA版本信息。
13. 重新启用 AVX。
14. 删除旧的解决方案和 Makefile。
15. 使 OpenCV 成为非可选。
16. 删除对旧 pthread 库的依赖。
17. 卸下机顶盒。
18. 重写 CMakeLists.txt 以使用新的 CUDA 检测。
19. 删除旧的“字母”代码,并删除数据/标签中的 700 多个图像。
20. 外源构建。
21.有更好的版本号输出。
22. 与培训相关的性能优化(正在进行的任务)。
23. 与推理相关的性能优化(正在进行的任务)。
24. 尽可能通过引用传递。
25. 清理.hpp 文件。
26.重写darknet.h。
27. 不要将 cv::Mat 转换为 void*,而是将其用作正确的 C++ 对象。
28. 修复或保持内部图像结构的使用方式一致。
29. 修复基于 ARM 的 Jetson 设备的构建。
30. 新的 Jetson Orin 设备正在运行。
31.修复V3中的Python API。
短期目标
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. 细分。