darknet

darknet

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

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

DarknetYOLO目标检测神经网络计算机视觉Github开源项目

目录

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 的支持
  • 旋转边界框,或某种 "角度" 支持

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多