暗网目标检测框架和 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 社区:
文件
YOLOv7:论文链接
Scaled-YOLOv4:论文链接
YOLOv4:论文链接
YOLOv3:论文链接
一般信息
Darknet/YOLO 框架仍然是目标检测领域的领导者,始终提供优于其他框架和 YOLO 版本的速度和准确性优势。
主要特点:
1. 开源和免费:该框架完全免费和开源,允许您将其无缝地合并到您的项目中,而没有任何许可限制。
2. 高性能:2024 年 10 月发布的 Darknet V3(“Jazz”)实现了令人印象深刻的性能,使用 NVIDIA RTX 3090 GPU 的 LEGO 数据集达到了 1000 FPS。
3. 多功能部署:Darknet/YOLO兼容各种设备,从Raspberry Pi和云服务器到桌面和高端训练设备。
4. 跨平台支持:众所周知,它可以在 Linux、Windows 和 Mac 操作系统上完美运行。
需要帮助或想讨论 Darknet/YOLO?加入 Discord 上充满活力的社区:
暗网版本
暗网的演变可以通过它的版本来追溯:
1.版本0.x(2013-2017):由Joseph Redmon开发的原始Darknet工具缺乏正式的版本号。
2.版本1.x(2017-2021):该版本由Alexey Bochkovskiy维护,也缺少版本号。
3. 版本 2.x“OAK”(2023):由 Hank.ai 赞助并由 Stéphane Charette 维护的 Darknet 存储库引入了版本命令。该版本带来了重大改进,包括:
* 使用适用于 Windows 和 Linux 的 CMake 统一构建步骤。
* 转换为 C++ 编译器。
* 增强训练期间的图表.png 可视化。
* 错误修复和性能优化以提高训练效率。
4. 版本 2.1:v2 代码库的最后一个分支。
5. 版本 3.x“JAZZ”(2024 年 10 月):此最新版本介绍了:
* 训练和推理的性能优化。
* 修改后的旧版 C API 需要对使用原始 Darknet API 的应用程序进行细微调整。
* 新的 Darknet V3 C 和 C++ API。
* src-examples 目录中的新应用程序和示例代码。
为了与旧版本兼容,v2 分支仍然可以访问。如果您需要使用以前版本中的特定命令,请告诉我们,我们将尝试将它们添加回来。
MSCOCO 预训练权重
YOLO 的几个流行版本都在 MSCOCO 数据集上进行了预训练,为试验该框架提供了一个方便的起点。 MSCOCO 包含 80 个类,在 cfg/coco.names 文件中列出。
可用的预训练权重:
YOLOv2(2016 年 11 月):
* yolov2-tiny.weights
* yolov2-full.weights
YOLOv3(2018 年 5 月):
* yolov3-tiny.weights
* yolov3-full.weights
YOLOv4(2020 年 5 月):
* yolov4-tiny.weights
* yolov4-full.weights
YOLOv7(2022 年 8 月):
* yolov7-tiny.weights
* yolov7-full.weights
请记住:虽然这些预先训练的权重对于演示很有帮助,但训练您自己的网络以获得量身定制的解决方案至关重要。 MSCOCO 主要用于验证您的设置是否正常运行。
使用预训练权重的示例命令:
`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 CLI
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
建筑
Darknet 利用 CMake 来简化 Windows 和 Linux 的构建过程。它需要 C++17 或更新的编译器以及 OpenCV。
构建指令现已统一,取代了旧的、更复杂的方法。
注意:如果您遇到旧教程的问题或与本指南不一致的构建步骤,请参阅此处提供的最新说明。
我们鼓励软件开发人员访问 https://darknetcv.ai/ 以深入了解 Darknet/YOLO 框架的内部工作原理。
谷歌合作实验室
Google Colab 指令反映了 Linux 指令。
浏览 colab 子目录中的笔记本,或按照下面的 Linux 说明进行操作。
Linux CMake方法
1.安装必要的包:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆暗网存储库:
`bash
mkdir ~/src 目录
cd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗网
mkdir 构建
光盘构建
`
3.配置CMake:
`bash
cmake -DCMAKEBUILDTYPE=发布 ..
`
4. 构建暗网:
`bash
使-j4
`
5. 打包暗网:
`bash
包裹
sudo dpkg -i darknet-VERSION.deb
`
可选:用于 GPU 加速的 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软件:
删除 Darknet 构建目录中的 CMakeCache.txt 文件以强制 CMake 重新查找依赖项。
重建暗网。
要在 Ubuntu 上升级 CMake:
`bash
sudo apt-get purge cmake
sudo snap install cmake --经典
`
高级用户:
要构建 RPM 安装文件而不是 DEB 文件,请将 CMpackage.cmake 中的 CPACKGENERATOR 修改为“RPM”。
对于 Centos 和 OpenSUSE,将 CPACK_GENERATOR 更改为“RPM”。
构建安装包后,使用适当的包管理器进行安装。
确认:
从命令行运行 darknet 版本以确认安装。
Windows CMake方法
1.安装所需软件:
`bash
winget 安装 Git.Git
winget 安装 Kitware.CMake
winget安装nsis.nsis
winget安装Microsoft.VisualStudio.2022.社区
`
2.修改Visual Studio安装:
* 打开“Visual Studio 安装程序”。
* 单击“修改”。
* 选择“使用 C++ 进行桌面开发”。
* 单击“修改”,然后单击“是”。
3. 打开 VS 2022 的开发人员命令提示符:
* 不要使用 PowerShell。
4.安装微软VCPKG:
`bash
CDC:
mkdir c:src
cd 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或CUDA+cuDNN用于GPU加速
* 按照 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。
安装后,确保 nvcc.exe 和 nvidia-smi.exe 可以访问。您可能需要修改 PATH 变量。
如果您稍后安装CUDA或CUDA+cuDNN或升级NVIDIA软件:
* 确保在 Visual Studio 之后安装 CUDA。
* 如果 Visual Studio 升级,请重新安装 CUDA。
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
`
7. 复制 CUDA DLL(如果需要):
* 如果您收到有关缺少 CUDA 或 cuDNN DLL 的错误,请手动将它们复制到 Darknet 输出目录中。例如:
`bash
复制“C:Program FilesNVIDIA GPU计算工具包CUDAv12.2bin * .dll”src-cliRelease
`
8、重新运行msbuild.exe命令生成NSIS安装包:
`bash
msbuild.exe /property:平台=x64;配置=发布 PACKAGE.vcxproj
`
高级用户:
您可以使用 Visual Studio GUI 中 CMake 生成的 Darknet.sln 解决方案文件,而不是命令行工具。
确认:
运行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本以确认安装。
要安装 Darknet,请运行 NSIS 安装向导:
在构建目录中查找 darknet-VERSION.exe 文件。
运行安装向导来安装 CLI 应用程序、库、包含文件和必要的 DLL。
使用暗网
命令行界面
注意:以下命令并不详尽。
除了 Darknet CLI 之外,还可以考虑使用 DarkHelp 项目 CLI,它提供替代功能和高级功能。
大多数命令需要 .weights 文件及其相应的 .names 和 .cfg 文件。您可以训练自己的网络或从互联网下载预先训练的模型。示例包括:
LEGO Gears:图像中的对象检测。
Rolodex:图像中的文本检测。
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 Driving_best.weights ...
`
11.计算mAP@IoU=75:
`bash
暗网探测器地图animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
`
12. 重新计算锚点:
`bash
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
`
13. 训练新网络:
`bash
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
训练
为了简化注释和训练,请使用 DarkMark。这是创建新神经网络的推荐方法。
手动训练设置(如果您愿意):
1.创建项目文件夹:
* 例如,~/nn/animals/ 用于动物检测。
2.复制Darknet配置文件作为模板:
* 例如,cfg/yolov4-tiny.cfg。
3. 创建animals.names文本文件:
* 列出每个类,每行一个条目,没有空行或注释。例子:
`
狗
猫
鸟
马
`
4. 创建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)。
* 使用 DarkMark 或类似软件对图像进行注释。 Darknet/YOLO FAQ 中概述了 YOLO 注释格式。
6. 创建animalstrain.txt和animalsvalid.txt:
* 列出用于训练和验证的所有图像,每行一张图像。
7.修改.cfg文件:
* 设置批次=64。
* 根据您的网络尺寸和 GPU 内存调整细分。从细分=1 开始。
* 将 max_batches 设置为类数的 2000 倍(例如,4 个类为 8000)。
* 将步长设置为 max_batches 的 80% 和 90%。
* 调整宽度和高度以匹配您所需的网络尺寸。
* 修改类以反映 .names 文件中的类数量。
更新每个 [yolo] 部分之前的 [卷积] 部分中的过滤器:(numberofclasses + 5) 3.
8. 开始训练:
`bash
cd ~/nn/动物/
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
有关更多训练细节和高级参数,请参阅 Darknet/YOLO 常见问题解答。
其他工具和链接
DarkMark:管理 Darknet/YOLO 项目、注释图像、验证注释并生成训练文件。
DarkHelp:为 Darknet 提供替代 CLI,支持图像平铺、对象跟踪以及用于商业应用程序的强大 C++ API。
Darknet/YOLO 常见问题解答:用于回答您的问题的综合资源。
Stéphane 的 YouTube 频道:访问大量教程和示例视频。
Darknet/YOLO Discord 服务器:与其他用户联系以获得支持和讨论。
路线图
最后更新于 2024 年 10 月 30 日:
完全的:
在训练期间适用的情况下,将 qsort() 替换为 std::sort() 。
删除了 check_mistakes、getchar() 和 system()。
将 Darknet 转换为使用 C++ 编译器(Linux 上为 g++,Windows 上为 VisualStudio)。
修复了 Windows 构建。
重新启用预测标签(“字母”代码)。
重新启用 CUDA/GPU 代码、CUDNN 和 CUDNN 一半。
删除了硬编码的 CUDA 架构。
改进了 CUDA 版本信息。
重新启用 AVX。
删除了旧的解决方案和 Makefile。
使 OpenCV 成为非可选依赖项。
删除了旧的 pthread 库依赖项。
删除了机顶盒。
重写 CMakeLists.txt 以改进 CUDA 检测。
删除了旧的“字母”代码和相关图像。
实施了源外构建。
增强版本号输出。
训练期间的性能优化(正在进行)。
推理期间的性能优化(正在进行)。
尽可能实现按引用传递。
清理了 .hpp 文件。
重写了darknet.h。
消除了将 cv::Mat 转换为 void 并将其用作 C++ 对象。
修复了内部图像结构的不一致问题。
修复了基于 ARM 的 Jetson 设备的构建(新的 Jetson Orin 设备正在运行)。
在 V3 中修复了 Python API。
短期目标:
将 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 的支持。
实现旋转边界框或“角度”支持。
添加关键点/骨架。
引入热图(正在进行中)。
探索细分。
请继续关注 Darknet/YOLO 框架的更新和贡献!