暗网目标检测框架和 YOLO
!Darknet 和 Hank.ai 徽标
Darknet 是一个用 C、C++ 和 CUDA 编写的开源神经网络框架。 YOLO(You Only Look Once)是一种在 Darknet 框架内运行的最先进的实时对象检测系统。
了解 Hank.ai 如何支持 Darknet/YOLO 社区
探索 Darknet/YOLO 官方网站
查阅全面的 Darknet/YOLO 常见问题解答
加入活跃的 Darknet/YOLO Discord 服务器
文件
1.YOLOv7论文
2. Scaled-YOLOv4 论文
3.YOLOv4论文
4.YOLOv3论文
一般信息
Darknet/YOLO 框架不断突破性能界限,始终提供超越其他框架和 YOLO 版本的速度和准确性。该框架完全免费且开源,允许您将 Darknet/YOLO 无缝集成到现有项目和产品中,包括商业应用程序,而无需许可或费用。
Darknet V3(“Jazz”)于 2024 年 10 月发布,性能卓越,能够使用 NVIDIA RTX 3090 GPU 以高达 1000 FPS 的速度准确处理乐高数据集视频。这意味着 Darknet/YOLO 在 1 毫秒或更短的时间内处理每个视频帧,包括调整大小和处理。
通过 https://discord.gg/zSq8rtW 加入充满活力的 Darknet/YOLO Discord 服务器以获得帮助、讨论并与其他用户联系。
Darknet/YOLO 的 CPU 版本可以在多种设备上运行,包括 Raspberry Pi、云和 Colab 服务器、台式机、笔记本电脑和高端训练设备。 Darknet/YOLO 的 GPU 版本需要 NVIDIA 提供的支持 CUDA 的 GPU。
众所周知,Darknet/YOLO 可在 Linux、Windows 和 Mac 上无缝运行。有关详细说明,请参阅下面的构建部分。
暗网版本
1.版本0.x:这是指Joseph Redmon在2013-2017年开发的原始Darknet工具,该工具缺少版本号。
2. 版本 1.x:这包括 Alexey Bochkovskiy 在 2017-2021 年间维护的流行暗网存储库,也没有官方版本号。
3. 2.x 版“OAK”:该版本于 2023 年推出,由 Hank.ai 赞助,由 Stéphane Charette 维护。它标志着暗网存储库首次合并版本命令。
- 目标是在熟悉代码库的同时尽量减少对现有功能的干扰。
- 主要变化包括:
- 适用于 Windows 和 Linux 的统一 CMake 构建系统
- 代码库转换为 C++ 编译器
- 训练期间增强的chart.png
- 错误修复和性能优化,特别是减少训练时间
- 该代码库的最后一个分支是 v2 分支中的版本 2.1。
4.版本3.x“JAZZ”:此阶段的开发于2024年中期开始,并于2024年10月推出。版本命令现在返回3.x。
- 此版本的变化包括:
- 删除了几个过时且不受支持的命令。
- 训练和推理的全面性能优化。
- 对旧版 C API 的修改,需要对使用原始 Darknet API 的应用程序进行细微调整。 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 文本文件中查看。
除了 MSCOCO 之外,您还可以找到其他预训练的权重和更简单的数据集来测试 Darknet/YOLO,例如 LEGO Gears 和 Rolodex。详细信息可以在 Darknet/YOLO 常见问题解答中找到。
MSCOCO 预训练权重可从各个位置访问,包括在此存储库中:
1.YOLOv2(2016 年 11 月)
- yolov2-tiny.weights
- yolov2-full.weights
2.YOLOv3(2018 年 5 月)
- yolov3-tiny.weights
- yolov3-full.weights
3.YOLOv4(2020 年 5 月)
- yolov4-tiny.weights
- yolov4-full.weights
4.YOLOv7(2022 年 8 月)
- yolov7-tiny.weights
- yolov7-full.weights
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主要用于验证Darknet/YOLO的正确运行。
建筑
过去(2023 年之前)采用的各种构建方法已被简化为统一的解决方案。 Darknet 需要 C++17 或更高版本、OpenCV,并利用 CMake 生成项目文件。
请记住,构建、安装和运行 Darknet/YOLO 不需要 C++ 知识。这类似于无需成为机械师即可驾驶汽车。
请注意:如果您参考的是具有更复杂构建步骤的旧教程或那些与本自述文件不一致的教程,请谨慎操作。下面概述的新构建说明于 2023 年 8 月推出。
如需深入了解 Darknet/YOLO 对象检测框架的内部工作原理,我们鼓励软件开发人员访问 https://darknetcv.ai/。
谷歌合作实验室
Google Colab 指令与 Linux 指令相同。有多个 Jupyter 笔记本可供使用,演示如何执行特定任务,例如训练新网络。
浏览 colab 子目录中的笔记本,或按照下面提供的 Linux 说明进行操作。
Linux CMake方法
Linux 暗网构建教程
1.安装依赖项:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆暗网存储库:
`bash
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗网
`
3.创建构建目录:
`bash
mkdir buildcd build
`
4. 使用 CMake 配置:
`bash
cmake -DCMAKEBUILDTYPE=发布 ..
`
5. 构建暗网:
`bash
使-j4
`
6. 打包安装:
`bash
包裹
sudo dpkg -i darknet-VERSION.deb
`
可选:CUDA 和 cuDNN 安装
为了加速图像和视频处理,您可以选择安装 CUDA 或 CUDA+cuDNN。如果可用,Darknet 将利用您的 GPU。
1.安装CUDA:
- 从 https://developer.nvidia.com/cuda-downloads 下载并安装 CUDA。
- 确保您可以执行 nvcc 和 nvidia-smi。您可能需要修改 PATH 变量。
2.安装cuDNN:
- 从 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager- 下载并安装 cuDNN安装概述。
如果您在初始设置或升级 NVIDIA 软件后安装 CUDA 或 CUDA+cuDNN:
1、删除CMakeCache.txt:
- 从 Darknet 构建目录中删除 CMakeCache.txt 文件,以强制 CMake 重新发现所有依赖项。
2. 重建暗网:
- 重复上面的 cmake 和 make 步骤。
注意:这些说明假定 Ubuntu 22.04,但可以适用于其他发行版。
高级用户:
要创建 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 的系统上:
`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 版本以确认 Darknet 安装成功。
Windows CMake方法
Windows 构建说明(假设 Windows 11 22H2)
1.安装依赖项:
`bash
winget 安装 Git.Git
winget 安装 Kitware.CMake
winget安装nsis.nsis
winget安装Microsoft.VisualStudio.2022.社区
`
2.修改Visual Studio安装:
- 打开“Windows 开始”菜单并运行“Visual Studio 安装程序”。
- 单击“修改”。
- 选择“使用 C++ 进行桌面开发”。
- 单击右下角的“修改”,然后单击“是”。
3.打开开发者命令提示符:
- 打开“Windows 开始”菜单并选择“VS 2022 的开发人员命令提示符”。请勿使用 PowerShell 执行这些步骤。
4.安装微软VCPKG:
`bash
CDC:
mkdir c:srccd c:src
git 克隆 https://github.com/microsoft/vcpkg
cd vcpkg
bootstrap-vcpkg.bat
.vcpkg.exe集成安装
.vcpkg.exe 集成 powershell.vcpkg.exe 安装 opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5.可选:CUDA和cuDNN安装:
- 安装 CUDA 或 CUDA+cuDNN 以进行 GPU 加速。
- 按照 Linux 说明中的相同步骤进行操作。
6. 克隆暗网并构建:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.git
CD暗网
mkdir 构建
光盘构建
cmake -DCMAKEBUILDTYPE=发布-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:平台=x64;配置=发布 PACKAGE.vcxproj
`
如果您遇到有关缺少 CUDA 或 cuDNN DLL(例如 cublas64_12.dll)的错误:
1.复制CUDA DLL:
- 手动将 CUDA .dll 文件复制到与 Darknet.exe 相同的输出目录。例如:
`bash
复制“C:Program FilesNVIDIA GPU计算工具包CUDAv12.2bin * .dll”src-cliRelease
`
2.重新运行msbuild.exe:
- 再次执行最后一条msbuild.exe命令,生成NSIS安装包。
高级用户:
您可以使用普通命令提示符或 SSH 并运行“Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat”,而不是使用开发人员命令提示符。
cmake 命令生成 Visual Studio 解决方案文件 (Darknet.sln)。如果您更喜欢使用 Visual Studio GUI,请加载项目而不是依赖命令行工具。
确认:运行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本来验证安装。
使用 NSIS 向导安装:
执行构建目录中的 NSIS 安装向导(例如,darknet-VERSION.exe)。这将:
- 创建一个 Darknet 目录(例如,C:Program FilesDarknet)。
- 安装 CLI 应用程序、darknet.exe 和其他示例应用程序。
- 安装必要的第 3 方 .dll 文件(例如,来自 OpenCV)。
- 安装 Darknet .dll、.lib 和 .h 文件以供其他应用程序使用。
- 安装模板 .cfg 文件。
确认:安装后,运行C:Program FilesDarknetbindarknet.exe版本以确认Darknet已准备就绪。
使用暗网
命令行界面
以下是 Darknet 支持的部分命令列表。
除了 Darknet CLI 之外,还可以考虑 DarkHelp 项目 CLI,它提供了具有 Darknet 中无法直接提供的高级功能的替代 CLI。您可以同时使用这两个 CLI。
对于大多数命令,您需要 .weights 文件及其相应的 .names 和 .cfg 文件。您可以训练自己的网络(强烈推荐)或免费在线下载预训练的网络。示例包括:
LEGO Gears(图像中的对象检测)
Rolodex(图像中的文本检测)
MSCOCO(标准80级物体检测)
常见暗网 CLI 命令:
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选择:
- V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10.网络精度评估:
- 计算mAP:
`bash
暗网探测器地图 Driving.data Driving.cfg moving_best.weights ...
`
- 详细的准确度信息:
`bash
Id 名称 AvgPrecision TP FN FP TN 准确度 ErrorRate 精确度 Recall 特异性 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
`
- 计算mAP@IoU=75:
`bash
暗网探测器地图animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
`
- 计算锚点:
`bash
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
`
11. 训练新网络:
`bash
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
训练
暗网/YOLO 常见问题解答的基本链接:
设置文件和目录
选择正确的配置文件
训练自定义网络命令
为了实现无缝注释和训练,DarkMark 通过自动创建所有必要的 Darknet 文件来简化流程。强烈建议使用 DarkMark 来训练新的神经网络。
手动训练设置:
1.创建项目目录:
- 例如,创建一个名为 ~/nn/animals/ 的目录用于检测动物。
2.复制配置文件:
- 将合适的 Darknet 配置文件作为模板(例如 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 文件来定义其注释。该格式是特定的,无法手动创建。使用 DarkMark 或类似软件对图像进行注释。 YOLO 注释格式在 Darknet/YOLO FAQ 中有解释。
6. 创建训练和验证文件:
- 创建.data 文件中提到的文件animalstrain.txt 和animalsvalid.txt。这些文件分别列出了用于训练和验证的所有图像,每行一张图像。路径可以是相对路径或绝对路径。
7.配置.cfg文件:
- 使用文本编辑器打开 .cfg 文件。
- 确保批次=64。
- 根据网络尺寸和GPU内存调整细分。从细分=1 开始。有关替代值,请参阅 Darknet/YOLO 常见问题解答。
- 将 max_batches 设置为 2000 * 类数(例如,4 个类为 8000)。
- 将步长设置为 maxbatches 的 80% 和 90%(例如,maxbatches=8000 时为 6400,7200)。
- 使用 Darknet/YOLO 常见问题解答中的指南配置宽度和高度(网络尺寸)。
- 将classes=... 替换为.names 文件中的类数(例如classes=4)。
- 在每个[yolo]部分之前的[卷积]部分中修改filters=...。使用公式 (numberofclasses + 5) * 3(例如,对于 4 个类,filters=27)。
8. 开始训练:
- 导航到您的项目目录:
`bash
cd ~/nn/动物/
`
- 运行训练命令:
`bash
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
9. 监控进度:
- 最佳权重将保存为animals_best.weights。
- 通过查看 Chart.png 文件来跟踪训练进度。
- 有关其他训练参数,请参阅 Darknet/YOLO 常见问题解答。
10. 详细培训:
- 要在训练期间获得更详细的输出,请包含 --verbose 参数:
`bash
暗网探测器-map-dont_show--verbose火车animals.dataanimals.cfg
`
其他工具和链接
DarkMark:用于管理 Darknet/YOLO 项目、注释图像、验证注释以及生成训练文件。
DarkHelp:为 Darknet、图像平铺、视频中的对象跟踪以及用于商业应用程序的综合 C++ API 提供强大的替代 CLI。
Darknet/YOLO 常见问题解答:回答您的问题的宝贵资源。
Stéphane 的 YouTube 频道:大量教程和示例视频。
Darknet/YOLO Discord Server:加入社区以获得支持和讨论。
路线图
最后更新:2024-10-30
完全的:
在训练期间用 std::sort() 替换了 qsort() (除了少数剩余情况)。
删除了 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 型号除外)。
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 的支持。
实现旋转边界框或“角度”支持。
添加关键点/骨架。
实施热图(正在进行中)。
引入分段功能。