Project Icon

darknet

开源实时目标检测框架及YOLO算法

Darknet是一个开源神经网络框架,为YOLO实时目标检测系统提供基础。最新的YOLOv7算法在5-160 FPS范围内性能优异,超越了同类检测器。项目支持Linux和Windows平台,提供预训练模型、详细构建指南和命令行操作接口,方便用户进行目标检测、模型训练等任务。

目录

Darknet目标检测框架和YOLO

darknet和hank.ai标志

Darknet是一个用C、C++和CUDA编写的开源神经网络框架。

YOLO(You Only Look Once)是一个最先进的实时目标检测系统,在Darknet框架中运行。

论文

基本信息

YOLOv7的准确性和速度比YOLOv5快120% FPS,比YOLOX快180% FPS,比Dual-Swin-T快1200% FPS,比ConvNext快550% FPS,比SWIN-L快500% FPS,比PPYOLOE-X快150% FPS

在5 FPS到160 FPS的范围内,YOLOv7在速度和准确性方面都超过了所有已知的目标检测器,并且在GPU V100上,batch=1,30 FPS或更高的所有已知实时目标检测器中具有最高的准确性56.8% AP。

比较

MSCOCO预训练权重

为了方便起见,YOLO的几个流行版本在MSCOCO数据集上进行了预训练。该数据集有80个类别,可以在文本文件cfg/coco.names中查看。

预训练权重可以从多个不同的位置下载,也可以从本仓库下载:

MSCOCO预训练权重仅供演示使用。人们应该训练自己的网络

构建

过去可用的各种构建方法已合并为一个统一的解决方案。Darknet需要OpenCV,并使用CMake生成必要的项目文件。

**注意,如果你正在按照旧教程进行更复杂的构建步骤,或者构建步骤与本readme中的不一致,请小心。**新的构建步骤如下所述,始于2023年8月。

鼓励软件开发人员访问https://darknetcv.ai/ 获取有关Darknet/YOLO目标检测框架内部的信息。

Linux CMake方法

Linux上的Darknet构建教程

这些说明假设系统运行Ubuntu 22.04。

sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/src
cd ~/src
git clone https://github.com/hank-ai/darknet
cd darknet
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4 package
sudo dpkg -i darknet-VERSION.deb

如果你使用的是较旧版本的CMake,那么在运行上述cmake命令之前,你需要升级CMake。在Ubuntu上升级CMake可以通过以下命令完成:

sudo apt-get purge cmake
sudo snap install cmake --classic

高级用户:

如果你想构建RPM安装文件而不是DEB文件,请查看CM_package.cmake中的相关行。在运行make -j4 package之前,你需要编辑这两行:

SET (CPACK_GENERATOR "DEB")
# SET (CPACK_GENERATOR "RPM")

对于Centos和OpenSUSE等发行版,你需要将CM_package.cmake中的这两行切换为:

# SET (CPACK_GENERATOR "DEB")
SET (CPACK_GENERATOR "RPM")

要安装安装包,请使用你的发行版通常使用的包管理器。例如,在基于Debian的系统(如Ubuntu)上:

sudo dpkg -i darknet-2.0.1-Linux.deb

安装软件包将复制以下文件:

  • /usr/bin/darknet 是常用的 Darknet 可执行文件。从命令行运行 darknet version 以确认安装正确。
  • /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 已构建并安装到 /usr/bin/。运行以下命令进行测试: darknet version

如果您没有 /usr/bin/darknet,这意味着您只是构建了它,而没有安装它!请确保按照上述说明安装 .deb.rpm 文件。

Windows CMake 方法

这些说明假设是全新安装的 Windows 11 22H2。

打开普通的 cmd.exe 命令提示符窗口,运行以下命令:

winget install Git.Git
winget install Kitware.CMake
winget install nsis.nsis
winget install Microsoft.VisualStudio.2022.Community

此时我们需要修改 Visual Studio 安装以包含对 C++ 应用程序的支持:

  • 点击"Windows 开始"菜单并运行"Visual Studio Installer"
  • 点击 修改
  • 选择 使用 C++ 的桌面开发
  • 点击右下角的 修改,然后点击 一切下载安装完成后,再次点击"Windows 开始"菜单并选择 Developer Command Prompt for VS 2022不要使用 PowerShell 进行这些步骤,否则会遇到问题!

高级用户:

不运行 Developer Command Prompt 的话,您可以使用普通命令提示符或 ssh 到设备上,然后手动运行 "\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"

按上述说明运行 Developer Command Prompt 后,运行以下命令安装 Microsoft VCPKG,然后用它来构建 OpenCV:

cd c:\
mkdir c:\src
cd c:\src
git clone https://github.com/microsoft/vcpkg
cd 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 并构建它。在这一步中,我们还需要告诉 CMake vcpkg 的位置,以便它可以找到 OpenCV 和其他依赖项:

cd c:\src
git clone https://github.com/hank-ai/darknet.git
cd darknet
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=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 相同的输出目录。例如:

copy "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2\bin\*.dll" src-cli\Release\

(这只是一个示例!请确认您正在运行的版本,并运行适合您安装内容的命令。)

文件复制完成后,重新运行最后一个 msbuild.exe 命令以生成 NSIS 安装包:

msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj

高级用户:

请注意,cmake 命令的输出是一个普通的 Visual Studio 解决方案文件 Darknet.sln。如果您是经常使用 Visual Studio GUI 而不是 msbuild.exe 来构建项目的软件开发人员,可以忽略命令行并在 Visual Studio 中加载 Darknet 项目。

您现在应该有这个可以运行的文件: C:\src\Darknet\build\src-cli\Release\darknet.exe。运行以下命令进行测试: C:\src\Darknet\build\src-cli\Release\darknet.exe version

要正确安装 Darknet、库文件、包含文件和必要的 DLL,请运行在最后一步构建的 NSIS 安装向导。查看 build 目录中的 darknet-VERSION.exe 文件。例如:

darknet-2.0.31-win64.exe

安装 NSIS 安装包将:

  • 创建一个名为 Darknet 的目录,例如 C:\Program Files\Darknet\
  • 安装 CLI 应用程序 darknet.exe
  • 安装所需的第三方 .dll 文件,例如来自 OpenCV 的文件。
  • 安装必要的 Darknet .dll.lib.h 文件,以便从其他应用程序使用 darknet.dll
  • 安装模板 .cfg 文件。

现在您已完成! 安装向导完成后,Darknet 将被安装到 C:\Program Files\Darknet\。运行以下命令进行测试: C:\Program Files\Darknet\bin\darknet.exe version

如果您没有 C:/Program Files/darknet/bin/darknet.exe,这意味着您只是构建了它,而没有安装它! 确保完成前面步骤中 NSIS 安装向导的每个面板。

使用 Darknet

CLI

以下并非 Darknet 支持的所有命令的完整列表。有关其他详细信息和示例,请参阅之前的自述文件

除了 Darknet CLI 之外,还请注意 DarkHelp 项目 CLI,它提供了 Darknet/YOLO 的替代 CLI。DarkHelp CLI 还具有 Darknet 中不直接提供的一些高级功能。您可以同时使用 Darknet CLI 和 DarkHelp CLI,它们并不互斥。

对于下面显示的大多数命令,您需要 .weights 文件以及相应的 .names.cfg 文件。您可以训练自己的网络(强烈推荐!)或下载 MSCOCO 预训练 .weights 文件.cfg.names 文件位于仓库中的 cfg 目录。

  • 检查版本:darknet version
  • 获取一些(非常有限的!)命令运行帮助:darknet help
  • 使用图像进行预测:darknet detector test animals.data animals.cfg animals_best.weights dog.jpg
  • 下载YOLOv4-tiny权重并使用artwork目录中的样本图像进行预测:
cd src/darknet/
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet detector test cfg/coco.data cfg/yolov4-tiny.cfg yolov4-tiny.weights artwork/dog.jpg
  • 使用DarkHelp时的等效命令为:
cd src/darknet/
DarkHelp cfg/coco.names cfg/yolov4-tiny.cfg yolov4-tiny.weights artwork/dog.jpg
# DarkHelp对.names、.cfg和.weights文件的列出顺序并不重要。
  • 输出坐标:darknet detector test animals.data animals.cfg animals_best.weights -ext_output dog.jpg
  • 处理视频:darknet detector demo animals.data animals.cfg animals_best.weights -ext_output test.mp4
  • 从网络摄像头读取:darknet detector demo animals.data animals.cfg animals_best.weights -c 0
  • 智能网络摄像头:darknet detector demo animals.data animals.cfg animals_best.weights http://192.168.0.80:8080/video?dummy=param.mjpg
  • 将结果保存到视频:darknet detector demo animals.data animals.cfg animals_best.weights test.mp4 -out_filename res.avi
  • JSON和MJPEG服务器:darknet detector demo animals.data animals.cfg animals_best.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
  • 在特定GPU上运行:darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4
  • 检查神经网络的准确性:
darknet detector map driving.data driving.cfg driving_best.weights
...
  Id 名称             平均精度     TP     FN     FP     TN 准确率 错误率 精确度 召回率 特异性 假阳性率
  -- ----             ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
   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的准确性:darknet detector map animals.data animals.cfg animals_best.weights -iou_thresh 0.75
  • 重新计算锚点最好在DarkMark中进行,因为它会连续运行100次并从所有计算出的锚点中选择最佳的。但如果你想在Darknet中运行旧版本:
darknet detector calc_anchors animals.data -num_of_clusters 6 -width 320 -height 256
  • 训练新网络:darknet detector -map -dont_show train animals.data animals.cfg(另请参阅下面的训练部分

训练

Darknet/YOLO常见问题解答相关部分的快速链接:

最简单的注释和训练方法是使用DarkMark来创建所有必要的Darknet文件。这绝对是训练新神经网络的推荐方法。

如果你更愿意手动设置各种文件来训练自定义网络:

  • 创建一个新文件夹来存储文件。在这个例子中,将创建一个用于检测动物的神经网络,因此创建以下目录:~/nn/animals/
  • 复制一个你想用作模板的Darknet配置文件。例如,参见cfg/yolov4-tiny.cfg。将其放在你创建的文件夹中。在这个例子中,我们现在有了~/nn/animals/animals.cfg
  • 在放置配置文件的同一文件夹中创建一个animals.names文本文件。在这个例子中,我们现在有了~/nn/animals/animals.names
  • 用文本编辑器编辑animals.names文件。列出你想使用的类别。每行必须恰好有1个条目,没有空行和注释。在这个例子中,.names文件将包含恰好4行:
dog
cat
bird
horse
  • 在同一文件夹中创建一个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
  • 创建一个文件夹来存储你的图像和标注。例如,可以是 ~/nn/animals/dataset。每张图像都需要一个对应的 .txt 文件来描述该图像的标注。.txt 标注文件的格式非常特殊。你不能手动创建这些文件,因为每个标注都需要包含精确的坐标。请使用 DarkMark 或其他类似软件来标注你的图像。YOLO 标注格式在 Darknet/YOLO FAQ 中有描述。

  • 创建 .data 文件中指定的"train"和"valid"文本文件。这两个文本文件需要分别列出 Darknet 必须用于训练和验证时计算 mAP% 的所有图像。每行一个图像。路径和文件名可以是相对路径或绝对路径。

  • 用文本编辑器修改你的 .cfg 文件。

    • 确保 batch=64
    • 注意 subdivisions。根据网络尺寸和 GPU 可用内存量,你可能需要增加 subdivisions。最佳值是 1,所以从这个开始。如果 1 不适合你,请参阅 Darknet/YOLO FAQ
    • 注意 max_batches=...。开始时使用的一个好值是类别数量的 2000 倍。在这个例子中,我们有 4 种动物,所以 4 * 2000 = 8000。意味着我们将使用 max_batches=8000
    • 注意 steps=...。这应该设置为 max_batches 的 80% 和 90%。对于这个例子,我们将使用 steps=6400,7200,因为 max_batches 设置为 8000。
    • 注意 width=...height=...。这些是网络尺寸。Darknet/YOLO FAQ 解释了如何计算最佳使用尺寸
    • 搜索所有 classes=... 行的实例,并修改为 .names 文件中的类别数。对于这个例子,我们将使用 classes=4
    • 搜索每个 [yolo] 部分之前的 [convolutional] 部分中所有 filters=... 行的实例。使用的值是 (类别数 + 5) * 3。意味着对于这个例子,(4 + 5) * 3 = 27。所以我们在适当的行上使用 filters=27
  • 开始训练! 运行以下命令:

cd ~/nn/animals/
darknet detector -map -dont_show train animals.data animals.cfg

请耐心等待。最佳权重将保存为 animals_best.weights。训练进度可以通过查看 chart.png 文件观察。有关训练新网络时可能想要使用的其他参数,请参阅 Darknet/YOLO FAQ

如果你想在训练期间看到更多细节,添加 --verbose 参数。例如:

darknet detector -map -dont_show --verbose train animals.data animals.cfg

其他工具和链接

路线图

最后更新 2024-05-13:

已完成

  • 将训练中使用的 qsort() 替换为 std::sort()(一些其他obscure的仍然保留)
  • 去除 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" 代码,并删除 data/labels 中的 700 多张图像
  • 源外构建
  • 有更好的版本号输出

短期目标

  • 将 printf() 替换为 std::cout(进行中)
  • 清理 .hpp 文件
  • 重写 darknet.h
  • 查看旧的 zed 相机支持
  • 更好更一致的命令行解析

中期目标

  • 修复基于 ARM 的 Jetson 设备的构建
  • 更好地使用 cv::Mat 而不是 C 中的自定义 image 结构
  • 不将 cv::Mat 转换为 void*,而是将其作为proper的 C++ 对象使用
  • 完全移除内部/过时的 image 结构
  • 修复对 1 通道灰度图像的支持
  • 添加对 N 通道图像的支持,其中 N > 3(例如,具有额外深度或热通道的图像)
  • 持续代码清理

长期目标

  • 修复所有 GPU 的 CUDA/CUDNN 问题
  • 研究添加对非 NVIDIA GPU 的支持
  • 旋转边界框,或某种 "角度" 支持
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号