暗网目标检测框架和 YOLO
Darknet 是一个开源神经网络框架,主要用 C 和 C++ 编写,带有一些用于 GPU 加速的 CUDA 代码。它以其速度和效率而闻名,使其成为实时物体检测应用的流行选择。
YOLO(You Only Look Once)是一个强大的实时目标检测系统,设计用于在 Darknet 框架内运行。它在速度和准确性方面表现出色,在基准测试中始终优于其他物体检测系统。
深入了解暗网/YOLO 世界:
Hank.ai 的贡献:了解 Hank.ai 如何积极支持 Darknet/YOLO 社区。
官方网站:浏览 Darknet/YOLO 官方网站以获取全面信息。
常见问题:查找有关 Darknet/YOLO 的常见问题的答案。
Discord 服务器:加入充满活力的 Darknet/YOLO Discord 社区进行讨论和寻求帮助。
文件
YOLO 的演变记录在几篇研究论文中:
1. YOLOv7:突破深度学习目标检测的界限
2. Scaled-YOLOv4:针对工业应用扩展 YOLOv4
3. YOLOv4:目标检测的最佳速度和精度
4. YOLOv3:渐进式改进
一般信息
Darknet/YOLO 框架继续处于目标检测的最前沿,拥有速度和准确性。该框架完全免费且开源,允许开发人员将其无缝合并到他们的项目中,而无需任何许可或费用限制。
Darknet V3 代号“Jazz”,于 2024 年 10 月发布,凭借 NVIDIA RTX 3090 GPU 实现了卓越的性能。它可以以高达 1000 FPS 的速度处理 LEGO 数据集视频,这意味着每个帧的分析时间仅为 1 毫秒或更短。
保持联系:
Discord:加入 Darknet/YOLO Discord 服务器以获得支持和讨论:https://discord.gg/zSq8rtW。
Darknet/YOLO 适应性强,可以在各种平台上运行,从 Raspberry Pi 和云服务器到桌面和高端培训系统。虽然 CPU 版本可在多种设备上运行,但 GPU 版本需要 NVIDIA 提供的支持 CUDA 的 GPU。
暗网版本
暗网框架自诞生以来已经发生了显着的发展,有几个关键版本:
1. 版本 0.x:这个原始版本由 Joseph Redmon 在 2013-2017 年间开发,缺乏具体的版本号。
2. 版本1.x:由Alexey Bochkovskiy于2017-2021年维护,该版本也没有版本号。
3. 版本 2.x“OAK”:由 Hank.ai 赞助,并由 Stéphane Charette 从 2023 年开始维护,这标志着第一个带有版本命令的版本。该版本运行至 2024 年底。
4. 3.x 版“JAZZ”:最新版本于 2024 年 10 月发布,引入了重大改进和新的 API。
构建暗网
构建 Darknet 需要 C++17 编译器或更新版本、OpenCV 和 CMake 构建系统。虽然该过程可能看起来很复杂,但您不需要成为 C++ 专家即可构建、安装和运行 Darknet/YOLO。
建筑选项:
1. Google Colab:Google Colab 指令与 Linux 指令相同。
2. Linux CMake方法:该方法为Linux用户提供了详细的指导。
3. Windows CMake 方法:按照以下说明在 Windows 上构建 Darknet。
注意:如果您使用旧教程,它们的构建步骤可能与下面概述的新的统一方法不同。
软件开发人员:访问 https://darknetcv.ai/ 了解 Darknet/YOLO 对象检测框架的内部工作原理。
谷歌合作实验室
Google Colab 指令与 Linux CMake 方法非常相似。 colab 子目录中有几个 Jupyter Notebook,它们演示了训练新网络等特定任务。
Linux CMake方法
请按照以下说明在 Linux 上构建 Darknet:
1.前提条件:安装必要的工具:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2.克隆Darknet:下载Darknet存储库:
`bash
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknet
CD暗网
`
3. 创建构建目录:为构建过程创建目录:
`bash
mkdir 构建
光盘构建
`
4. 使用 CMake 配置:生成构建文件:
`bash
cmake -DCMAKEBUILDTYPE=发布 ..
`
5. 构建 Darknet:构建 Darknet 可执行文件:
`bash
使-j4
`
6、安装包:创建DEB包,方便安装(可选):
`bash
制作包
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN(可选):对于GPU加速,安装CUDA或CUDA+cuDNN:
* CUDA:https://developer.nvidia.com/cuda-downloads
* cuDNN:https://developer.nvidia.com/rdp/cudnn-download
8.验证安装:安装后,检查Darknet版本:
`bash
暗网版本
`
Windows CMake方法
这些说明适用于在干净的 Windows 11 22H2 安装上构建 Darknet。
1.安装先决条件:
`bash
winget安装Git.Git winget安装Kitware.CMake winget安装nsis.nsis winget安装Microsoft.VisualStudio.2022.Community
`
2. Visual Studio C++ 支持:
* 打开 Visual Studio 安装程序并选择“修改”。
* 启用“使用 C++ 进行桌面开发”并单击“修改”。
3. VS 2022 的开发人员命令提示符:打开 VS 2022 的开发人员命令提示符。
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/cuDNN(可选):对于GPU加速,安装CUDA或CUDA+cuDNN:
* CUDA:https://developer.nvidia.com/cuda-downloads
* cuDNN:https://developer.nvidia.com/rdp/cudnn-download
6.克隆暗网:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.git
CD暗网
mkdir 构建
光盘构建
`
7.使用CMake配置:
`bash
cmake -DCMAKEBUILDTYPE=发布-DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. 使用 MSBuild 构建 Darknet:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:平台=x64;配置=发布 PACKAGE.vcxproj
`
9. 验证安装:运行 Darknet 可执行文件并检查版本:
`bash
C:srcdarknetbuildsrc-cliReleasedarknet.exe 版本
`
10. 安装 NSIS 软件包:运行构建目录中的 darknet-VERSION.exe 文件来安装 Darknet、库、包含文件和 DLL。
使用暗网
Darknet 提供了用于与框架交互的命令行界面 (CLI)。
注意:除了 Darknet CLI 之外,DarkHelp 项目还提供了具有增强功能的替代 CLI。您可以同时使用 Darknet CLI 和 DarkHelp CLI。
常见暗网 CLI 命令:
帮助:列出可用命令:
`bash
暗网帮助
`
版本:查看暗网版本:
`bash
暗网版本
`
预测(图像):对图像执行对象检测:
`bash
# 版本 2
暗网探测器测试 cars.data cars.cfg cars_best.weights image1.jpg
# 版本 3
darknet02displayannotatedimages cars.cfg image1.jpg
# 黑暗帮助
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
输出坐标(图像):获取对象坐标:
`bash
# 版本 2
暗网探测器测试animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
# 版本 3
darknet01inference_images 动物 狗.jpg
# 黑暗帮助
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
`
视频处理:
`bash
# 版本 2
# 在视频文件上运行
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
# 在网络摄像头上运行
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -c 0
# 版本 3
# 在视频文件上运行
darknet03display_videos Animals.cfg test.mp4
# 在网络摄像头上运行
darknet08display_网络摄像头动物
# 黑暗帮助
# 在视频文件上运行
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
将结果保存到视频:
`bash
# 版本 2
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test.mp4 -outfilename res.avi
# 版本 3
darknet05processvideos多线程animals.cfganimals.namesanimals_best.weightstest.mp4
# 黑暗帮助
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
`
JSON 输出:
`bash
# 版本 2
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# 版本 3
darknet06imagestojson 动物 image1.jpg
# 黑暗帮助
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
特定GPU:在指定GPU上运行:
`bash
# 版本 2
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
准确性检查:评估网络的准确性:
`bash
暗网探测器地图 Driving.data Driving.cfg Driving_best.weights
`
计算锚点:
`bash
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
`
训练新网络
DarkMark:要获得直观且简化的注释和训练方法,请使用 DarkMark。
手动设置:
1. 创建目录:为您的训练数据设置一个文件夹。
2. 复制配置:选择一个配置文件作为模板,例如cfg/yolov4-tiny.cfg,并将其复制到您的目录中。
3. 创建.names 文件:创建一个文本文件(例如animals.names),列出您的类,每行一个。
4. 创建.data 文件:创建具有以下结构的文本文件(例如animals.data):
`
班级 = 4
火车=/path/to/animals_train.txt
有效 = /path/to/animals_valid.txt
名称 = /path/to/animals.names
备份 = /path/to/backup_directory
`
5.准备数据集:将图像和相应的注释文件组织在一个目录中。
6. 创建训练/有效文本文件:创建两个文本文件(animalstrain.txt、animalsvalid.txt),列出用于训练和验证的图像的路径。
7.修改配置:
* 设置批次=64。
* 根据您的 GPU 内存调整细分。
将 max_batches 设置为合适的值(例如,2000 个类)。
* 将步长设置为 max_batches 的 80% 和 90%。
* 根据您的网络尺寸调整宽度和高度。
* 更新类以匹配类的数量。
* 修改[yolo]部分之前的[卷积]部分中的过滤器。
8. 开始训练:
`bash
cd /路径/到/动物
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
9.查看进度:通过chart.png文件监控训练进度。
其他工具和链接
DarkMark:该工具简化了使用 Darknet 进行训练的图像注释、验证和文件生成。
DarkHelp:Darknet 的强大替代 CLI,具有图像平铺和对象跟踪等功能。
Darknet/YOLO 常见问题解答:查找常见问题的答案。
Stéphane 的 YouTube 频道:访问教程和示例视频。
Darknet/YOLO Discord Server:加入社区以获得支持和讨论。
路线图
完全的:
将 qsort() 替换为 std::sort() 以提高效率。
删除了已弃用的代码(例如,check_mistakes、getchar()、system())。
将 Darknet 迁移到 C++ 编译器。
修复了 Windows 构建问题。
恢复了 Python 支持。
建立了暗网库。
重新启用 CUDA/GPU 代码、CUDNN 和 CUDNN 一半。
改进了 CUDA 版本信息。
重新启用 AVX 指令集。
删除了旧的解决方案和 Makefile。
使 OpenCV 成为强制依赖项。
删除了过时的库依赖项(例如,pthread、STB)。
重写 CMakeLists.txt 以改进 CUDA 检测。
启用外源构建。
增强版本号输出。
实施了训练和推理的性能优化。
清理代码以获得更好的可读性。
重写 darknet.h 以改进 API。
改进了对基于 ARM 的 Jetson 设备的支持。
在 V3 中修复了 Python API。
短期目标:
将 printf() 替换为 std::cout。
研究 zed 相机支持。
改进命令行解析。
中期目标:
将所有 char 代码替换为 std::string。
解决编译器警告。
增强 cv::Mat 的使用,而不是自定义图像结构。
将列表功能升级为 std::vector 或 std::list。
支持1通道灰度图像。
添加对 N 通道图像 (N > 3) 的支持。
正在进行的代码清理。
长期目标:
解决不同 GPU 上的 CUDA/CUDNN 问题。
重写CUDA+cuDNN代码以提高效率。
探索对非 NVIDIA GPU 的支持。
实现旋转边界框和“角度”支持。
添加关键点、骨架和热图。
引入分段功能。