darknet

GitHub
788 103 较难 2 次阅读 昨天Apache-2.0图像开发框架
AI 解读 由 AI 自动生成,仅供参考

Darknet 是一个基于 C、C++ 和 CUDA 编写的开源神经网络框架,专为运行 YOLO(You Only Look Once)系列目标检测算法而设计。它致力于解决物体检测任务中速度与精度难以兼顾的痛点,让系统能够在保证准确性的前提下实现实时处理。

对于计算机视觉开发者、研究人员以及需要将检测功能集成到现有项目中的工程师而言,Darknet 提供了极佳的解决方案。它不仅完全免费且开源,允许直接用于商业产品,无需支付授权费。在性能方面,Darknet 表现优异,在高端显卡上可实现每秒上千帧的视频流处理,同时支持 Linux、Windows、macOS 等多种操作系统,甚至能部署在树莓派等边缘设备上。

此外,Darknet 兼容 NVIDIA CUDA 和 AMD ROCm 硬件加速,构建方式灵活,支持 Docker 和 CMake。目前代码库已迁移至 Codeberg 持续维护,社区活跃并提供了丰富的预训练模型与文档,是探索和实践深度学习目标检测技术的可靠选择。

使用场景

某电子制造厂质检团队需要在高速流水线上实时检测电路板焊接缺陷。

没有 darknet 时

  • 依赖人工肉眼检查,工人易疲劳导致漏检率高达 5%,严重影响良品率。
  • 采购闭源商业视觉软件需支付高额年费,且无法根据特定缺陷定制模型。
  • 现有推理框架延迟高,单张图像处理耗时超过 200 毫秒,拖慢产线节拍。
  • 硬件适配困难,老旧工控机无法运行重型深度学习框架,算力浪费严重。

使用 darknet 后

  • 基于 YOLO 架构训练自定义模型,检测精度提升至 98% 以上,彻底消除漏检。
  • 完全开源免费,无需支付授权费,且代码可自由修改以适应特殊生产需求。
  • 利用 CUDA 加速,RTX 显卡下可达 1000 FPS,单帧处理仅需 1 毫秒,满足高速流转。
  • 支持 Linux 及嵌入式环境,可无缝部署至边缘计算盒子,降低整体硬件成本。

darknet 凭借高性能与零成本优势,帮助工厂实现了从人工质检到智能自动化的高效转型。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

非必需(支持 CPU 运行),GPU 版本需 NVIDIA CUDA 或 AMD ROCm 兼容显卡

内存

未说明

依赖
notes基于 C/C++ 编写;无需 Python 即可构建和运行;v5.1 版预测结构变更需重新编译以防段错误;使用 CMake 统一构建流程
python不需要
C++17
OpenCV
CMake
OpenBLAS
darknet hero image

快速开始

目录

Darknet 目标检测框架与 YOLO

darknet and hank.ai logos

Darknet 是一个用 C、C++ 和 CUDA (并行计算平台) 编写的开源神经网络框架。

YOLO (You Only Look Once) 是一种最先进的 (state-of-the-art)、实时 (real-time) 目标检测系统,运行在 Darknet 框架中。

论文

一般信息

Darknet/YOLO 框架继续比其它框架和 YOLO 版本更快更准确

该框架完全免费且开源。您可以将 Darknet/YOLO 整合到现有项目和产品中——包括商业产品——无需许可证或付费。

2024 年 10 月发布的 Darknet V3(“爵士”)在使用 NVIDIA RTX 3090 GPU (图形处理器) 时,可以准确地以高达1000 FPS (每秒帧数) 的速度运行 LEGO 数据集视频,这意味着每个视频帧会在 1 毫秒或更少的时间内被 Darknet/YOLO 读取、调整大小和处理。额外的性能改进已在 Darknet V4 和即将推出的 Darknet V5 中实施,同时不损害检测质量。

如果您需要帮助或想讨论 Darknet/YOLO 及相关工具,请加入 Darknet/YOLO Discord 服务器:https://discord.gg/MQw32W9Cqr

Darknet/YOLO 的 CPU (中央处理器) 版本可以在简单的设备上运行,例如 Raspberry Pi、云 & Colab 服务器、台式机、笔记本电脑和高端训练设备。Darknet/YOLO 的 GPU (图形处理器) 版本需要 NVIDIA 的 CUDA 兼容 GPU,或者 AMD 的 ROCm (AMD Radeon Open Compute 平台) 兼容 GPU。

已知 Darknet/YOLO 可在 Linux、Windows 和 Mac 上运行。请参阅下面的 构建说明

Darknet 版本

  • 2013-2017 年间由 Joseph Redmon 编写的原始 Darknet 工具没有版本号。我们将此版本视为 0.x。
  • 2017-2021 年间由 Alexey Bochkovskiy 维护的下一个流行的 Darknet 仓库也没有版本号。我们将此版本视为 1.x。
  • 2023 年开始由 Hank.ai 赞助并由 Stéphane Charette 维护的 Darknet 仓库是第一个拥有 version 命令的版本。从 2023 年到 2024 年末,它返回版本 2.x "OAK"。
    • 目标是尽可能少地破坏现有功能,同时熟悉代码库。
    • 重写了构建步骤,以便我们在 Windows、Linux 和 Mac 上使用 CMake (构建工具) 进行构建的统一方式。
    • 将代码库转换为使用 C++ 编译器。
    • 增强了训练时的 chart.png。
    • 修复了错误并进行了与性能相关的优化,主要涉及减少训练网络所需的时间。
    • 该代码库的最后一个分支是 v2 分支中的 2.1 版本。
  • 下一阶段开发始于 2024 年中,并于 2024 年 10 月发布。version 命令现在返回 3.x "JAZZ"。
    • 删除了许多旧且未维护的命令。
      • 如果需要运行这些命令之一,您始终可以检出之前的 v2 分支。请告知我们,以便我们调查添加回任何缺失的命令。
    • 许多性能优化,无论是在训练期间还是推理期间。
    • 遗留 C API (应用程序编程接口) 已修改;使用原始 Darknet API 的应用程序需要进行少量修改:https://darknetcv.ai/api/api.html
    • 新的 Darknet V3 C 和 C++ API,使开发人员更容易编写使用 Darknet/YOLO 的应用程序:https://darknetcv.ai/api/api.html
    • src-examples 中的新应用程序和示例代码:https://darknetcv.ai/api/files.html
  • 下一次发布是在 2025 年初。version 命令现在返回 4.x "SLATE"。
    • 添加了使用 ROCm 的 AMD GPU 支持。
      • 仍需添加对 MIOpen 的支持。
    • 所有 printf()std::cout 调用均已替换,以便 Darknet/YOLO 日志消息可以轻松重定向。
  • 下一次发布是在 2025 年 8 月。version 命令现在返回 5.x "Moonlit"。
    • 将源代码仓库从 github 移至 codeberg
    • 更多性能优化。
    • 在构建仅 CPU 版本的 Darknet 时使用 OpenBLAS (开源 BLAS 库)。
    • 支持基于分析的配置优化 (Profile-Guided Optimization)。
    • ONNX (开放神经网络交换格式) 导出功能。[实验性]
    • JAVA 语言绑定。[不完整,进行中]
  • 最新版本是 v5.1,延续了 v5.0 中引入的 "Moonlit" 名称。
    • 发布于 2025 年 12 月。
    • ONNX 导出工具现在包含必要的节点来导出 "confs" 和 "boxes"。
    • mAP (平均精度均值) 函数被重写。
    • 少量新的性能优化。

预训练权重

通常人们被期望 训练自己的网络。但预训练权重也很流行。这些是别人已经训练好并免费在互联网上提供的权重。这在初次安装 Darknet/YOLO 时有时很方便,因为软件可以快速测试,而无需训练新的神经网络。

People-R-People 预训练权重

People-R-People 预训练权重用于识别人。该数据集仅包含 2 个类别:personhead

people-r-people example output

您可以直接从 C Code Run 的网站 下载这些预训练权重。

MSCOCO 预训练权重

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

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

MSCOCO 预训练权重仅提供用于演示目的。对应的 .cfg.names 文件位于 cfg 目录 中。示例命令:

wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet_02_display_annotated_images coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
darknet_03_display_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

构建

过去可用的各种构建方法(2023 年之前)已合并为单一的统一解决方案。Darknet 需要 C++17 或更高版本、OpenCV,并使用 CMake 生成必要的项目文件。

[!NOTE] 您不需要了解 CMake、C++、C、Python 或其他任何编程语言即可构建、安装或运行 Darknet/YOLO。一些高级主题——例如使用 Darknet/YOLO API——确实需要编程经验。

选择以下构建类型之一:

[!CAUTION] 如果您正在遵循旧的教程,其中包含更复杂的构建步骤,或者构建步骤似乎与本文档中的内容不匹配,请小心。新的构建步骤始于 2023 年 8 月。

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

[!IMPORTANT] Darknet v5.1 中对其中一个预测结构进行了重要更改。如果您的软件包含 darknet.hdarknet.hpp,则需要重新编译您的应用程序以防止段错误。

Google Colab

Google Colab 的说明与 Linux 说明相同。有几个 Jupyter notebook 可用,展示如何执行某些任务,例如训练新网络。

查看 colab 子目录 中的 notebook 以获取详细信息,和/或遵循下面的 Linux 说明

WSL

如果您拥有现代版本的 Windows 和一台不错的电脑,那么强烈建议使用 WSL (Windows Subsystem for Linux) 和 Ubuntu 24.04 LTS。

WSL 是 Windows 的一项功能,允许用户在 Windows 桌面内运行基于 Linux 的应用程序。这类似于带有主机/客户机扩展的虚拟机。如果您 为 WSL 安装了 Linux NVIDIA 驱动程序,则在 WSL 中运行的 Linux 应用程序可以访问 GPU,并且您可以在 WSL 内运行 Darknet/YOLO 来训练新网络。

[!TIP] 一旦安装好 WSL,请记住至少从 Ubuntu 命令提示符运行一次 sudo apt-get update 以获取更新后的软件包列表,然后遵循常规的 Linux 说明

如果您不想在 WSL 内使用 Darknet/YOLO,请直接跳转到 Windows 说明

Linux CMake 构建方法

Darknet build tutorial for Linux

[!IMPORTANT] Darknet 可以在没有访问 GPU (图形处理单元) 的情况下运行,但如果你想 训练 自定义网络或者你需要更高的性能,那么 强烈建议 使用现代 NVIDIA GPU 或 AMD GPU。

[!TIP] 如果你正在构建仅 CPU 版本的 Darknet,你可能想要安装 OpenBLAS (开源 BLAS 库) 以提升性能。这些库仅在仅 CPU 的构建中使用:

sudo apt-get install libopenblas64-0 libopenblas64-0-openmp libopenblas64-openmp-dev

以下说明假设(但不强制!)系统运行 Ubuntu 22.04。如果使用不同的 Linux 发行版,请根据需要调整。

sudo apt-get install build-essential git libopencv-dev cmake libprotobuf-dev protobuf-compiler
mkdir ~/src
cd ~/src
git clone https://codeberg.org/CCodeRun/darknet.git
cd darknet
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4 package
sudo dpkg -i darknet-<INSERT-VERSION-YOU-BUILT-HERE>.deb

[!WARNING] 如果你使用的是旧版本的 CMake (构建工具) 那么在运行上述 cmake 命令之前,你需要升级 CMake。在 Ubuntu 上升级 CMake 可以通过以下命令完成:

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

[!WARNING] 如果你使用 bash 作为命令行 Shell 此时你需要重启你的 Shell。如果使用 fish,它应该会立即识别新的路径。

[!TIP] 高级用户:
参见 PGO (Profile-Guided Optimization) 的说明文档,如果你想运行优化后的 Darknet/YOLO。

[!TIP] 高级用户:
如果你想构建 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

安装 .deb(或 .rpm)包将安装以下文件:

  • /usr/bin/darknet*... 是常规的 Darknet 可执行文件。从 CLI (命令行界面) 运行 darknet version 以确认安装正确。
  • /usr/include/darknet*... 是为 C、C++ 和 Python 开发者提供的 Darknet API (应用程序编程接口) 头文件。
  • /usr/lib/libdarknet.so 是供 C、C++ 和 Python 开发者链接使用的库。
  • /opt/darknet/cfg/... 是所有 .cfg 模板的存储位置。

你现在完成了!Darknet 已构建并安装到 /usr/bin/。运行此命令进行测试:darknet version

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

Windows CMake 方法

[!IMPORTANT] 在构建适用于 Windows 的 Darknet/YOLO 之前,请参阅关于使用 WSL (Windows Subsystem for Linux) 的说明。(剧透……Darknet/YOLO 在 WSL 中运行效果极佳!)

  • 本指南假设(但不强制要求)全新安装 Windows 11 22H2。
  • 本指南适用于原生 Windows 安装,不使用 WSL。如果您更倾向于使用 WSL,请参见 上方

打开普通的 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"
  • 点击 Modify
  • 选择 Desktop Development With C++
  • 点击右下角的 Modify,然后点击 Yes

[!IMPORTANT] 一旦所有内容下载并安装完成,再次点击“Windows 开始”菜单并选择 Developer Command Prompt for VS 2022不要在这些步骤中使用 PowerShell,否则会遇到问题!

[!TIP] 如果不运行 Developer Command Prompt,您可以使用普通命令提示符或 SSH 登录设备并手动运行 "\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"

[!WARNING] 请不要跳过此步骤! 重新阅读上面的“重要”描述,查看您必须使用的窗口类型。任何时候您想从命令提示符使用 Visual Studio 编译 C++ 代码,都必须如上所述使用 Visual Studio 开发者命令提示符。

获得 开发者命令提示符 后,运行以下命令安装 Microsoft VCPKG,随后将用于构建 OpenBlas 和 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 protobuf:x64-windows

在最后这一步请耐心等候,因为它可能需要很长时间才能运行完毕。它需要下载并构建许多内容。

[!TIP] 注意,在构建 OpenCV 时您可能还想添加许多其他可选模块。运行 .\vcpkg.exe search opencv 可查看完整列表。

[!IMPORTANT] Darknet 可以在没有 GPU 访问权限的情况下运行,但如果您想要 训练 自定义网络或需要更高的性能,则 强烈建议 使用现代 NVIDIA GPU 或 AMD GPU。

[!TIP] 将 vcpkg bin 目录添加到环境变量 PATH 可以防止后续出现问题。您需要添加的目录是 C:/src/vcpkg/installed/x64-windows/bin/

[!TIP] 如果您正在构建仅 CPU 版本的 Darknet,您可能希望安装 OpenBLAS 以提高性能。这些库仅用于仅 CPU 构建:

.\vcpkg.exe install openblas[core,threads]:x64-windows

成功完成上述所有步骤后,您需要克隆 Darknet 并构建它。在此步骤中,我们还需要告诉 CMake vcpkg 的位置,以便它能找到 OpenCV 和其他依赖项。运行这些命令时,请确保继续使用上述描述的 开发者命令提示符

cd c:\src
git clone https://codeberg.org/CCodeRun/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

[!TIP] 请注意,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-<INSERT-VERSION-YOU-BUILT-HERE>-win64.exe。例如:

darknet-<INSERT-VERSION-YOU-BUILT-HERE>-win64.exe

安装 NSIS 安装包将:

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

[!IMPORTANT] 请确保更新您的 PATH 以包含 C:/Program Files/Darknet/bin(或您选择安装的任何位置)。更新 PATH 后,您需要重启命令提示符。

[!TIP] 如果在运行 ONNX 导出工具时遇到有关缺少 Protocol Buffer (协议缓冲区) DLL 文件(如 libprotobuf.dllabseil_dll.dll)的错误,这很可能意味着您忘记更新 PATH 或重启命令提示符。缺失的 DLL 可以在 C:/src/vcpkg/installed/x64-windows/bin/ 中找到。

您已完成!安装向导完成后且 PATH 已更新,运行此命令进行测试:darknet.exe version

[!CAUTION] 如果您没有 C:/Program Files/darknet/bin/darknet.exe 那么这意味着您 安装它,仅构建了它!请确保在上一步中通过 NSIS 安装向导的每个面板。

Docker

要通过 Docker 构建支持 GPU 的 Darknet,必须在系统上安装 nvidia-container-toolkit,并且构建过程必须在 docker run 中执行。

以下是使用以下命令构建的示例 Dockerfile:

docker build -t darknet-hankai . && docker run -it --gpus all darknet-hankai

FROM nvidia/cuda:12.8.0-cudnn-devel-ubuntu24.04

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV PATH="/usr/local/cuda/bin:${PATH}"
ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}"

# Install dependencies
RUN apt-get update
RUN apt-get install -y build-essential git libopenblas64-openmp-dev libopencv-dev wget file cmake

# Set working directory for Darknet
WORKDIR /workspace

# Clone Darknet
RUN git clone https://codeberg.org/CCodeRun/darknet.git

```markdown
# 将 Darknet 包的构建推迟到运行时(可见 GPU)
CMD ["/bin/bash", "-c", "\
    cd /workspace/darknet && \
    # initialize cmake
    mkdir build && cd build && cmake ..; \
    # build darknet
    make -j$(nproc) package && \
    # package darknet
    dpkg -i /workspace/darknet/build/darknet-*.deb && \
    # run darknet version to verify build & enter terminal
    darknet version && \
    exec /bin/bash"]

使用 Darknet

命令行界面 (CLI)

以下并非 Darknet 支持的所有命令的完整列表。

[!IMPORTANT] 除了 Darknet 命令行界面 (CLI),还请注意 DarkHelp 项目的 CLI,它为 Darknet/YOLO 提供了额外的 CLI。DarkHelp CLI 还具有几个 Darknet 中不可用的高级功能。您可以同时使用 Darknet CLI 和 DarkHelp CLI,它们不是互斥的。

[!TIP] 对于下面显示的大多数命令,您需要 .weights 文件以及对应的 .names.cfg 文件。您可以 训练自己的网络(强烈推荐!)或者下载别人已经训练好并在互联网上免费提供的神经网络。预训练数据集的示例包括:

运行的命令包括:

  • 列出一些可能的运行命令和选项:

    • darknet help
  • 检查版本:

    • darknet version
  • 使用图像进行预测:

    • V2: darknet detector test cars.data cars.cfg cars_best.weights image1.jpg
    • V3+: darknet_02_display_annotated_images cars.cfg image1.jpg
    • DarkHelp: DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
  • 输出坐标:

    • V2: darknet detector test animals.data animals.cfg animals_best.weights -ext_output dog.jpg
    • V3+: darknet_01_inference_images animals dog.jpg
    • DarkHelp: DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg
  • 处理视频:

    • V2: darknet detector demo animals.data animals.cfg animals_best.weights -ext_output test.mp4
    • V3+: darknet_03_display_videos animals.cfg test.mp4
    • DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
  • 从网络摄像头读取:

    • V2: darknet detector demo animals.data animals.cfg animals_best.weights -c 0
    • V3+: darknet_08_display_webcam animals
  • 将结果保存到视频中:

    • V2: darknet detector demo animals.data animals.cfg animals_best.weights test.mp4 -out_filename res.avi
    • V3+: darknet_05_process_videos_multithreaded animals.cfg animals.names animals_best.weights test.mp4
    • DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
  • JSON:

    • V2: darknet detector demo animals.data animals.cfg animals_best.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
    • V3+: darknet_06_images_to_json animals image1.jpg
    • DarkHelp: DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg
  • 在特定 GPU 上运行:

    • V2: 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 Name             AvgPrecision     TP     FN     FP     TN Accuracy ErrorRate Precision Recall Specificity FalsePosRate
  -- ----             ------------ ------ ------ ------ ------ -------- --------- --------- ------ ----------- ------------
   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
  • 重新计算锚框 (anchors) 最好在 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 (另见下方的 训练部分)
  • 显示 YOLO 热力图:

    • V3+: darknet_02_display_annotated_images --heatmaps cars images/*.jpg
    • V3+: darknet_03_display_videos --heatmaps cars videos/*.m4v
  • ONNX (开放神经网络交换) 导出:

    • darknet_onnx_export cars.cfg

## 训练

Darknet/YOLO FAQ (常见问题解答) 中相关部分的快速链接:
* [我应该如何设置我的文件和目录?](https://www.ccoderun.ca/programming/yolo_faq/#directory_setup)
* [我应该使用哪个配置文件?](https://www.ccoderun.ca/programming/yolo_faq/#configuration_template)
* [训练我自己的网络时应使用什么命令?](https://www.ccoderun.ca/programming/yolo_faq/#training_command)

> [!TIP]
> 最简单的方法是使用 [DarkMark](https://codeberg.org/CCodeRun/DarkMark#what-is-darkmark) 来创建所有必要的 Darknet 文件进行标注和训练。这绝对是训练新神经网络的推荐方式。

如果您更倾向于手动设置各种文件以训练自定义网络:

* 创建一个新文件夹用于存储文件。本例中,将创建一个检测动物的神经网络,因此创建以下目录: `~/nn/animals/`。
* 复制一个您想用作模板的 Darknet 配置文件。例如,参见 `cfg/yolov4-tiny.cfg`。将其放入您创建的文件夹中。本例中,我们现在有 `~/nn/animals/animals.cfg`。
* 在您放置配置文件的同一文件夹中创建一个 `animals.names` 文本文件。本例中,我们现在有 `~/nn/animals/animals.names`。
* 使用文本编辑器编辑 `animals.names` 文件。列出您想要使用的类别。您需要确保每行恰好有一个条目,没有空行且没有注释。本例中,`.names` 文件将恰好包含 4 行:
```txt
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 (图形处理器) 上的可用内存量,您可能需要增加细分值。要使用的最佳值是 1,所以从该值开始。如果 1 对您不起作用,请参阅 Darknet/YOLO FAQ
    • 注意 max_batches=...。开始时使用的良好值是类别数的 2000 倍。本例中,我们有 4 种动物,所以 4 * 2000 = 8000。这意味着我们将使用 max_batches=8000
    • 注意 steps=...。这应设置为 max_batches 的 80% 和 90%。本例中,由于 max_batches 设置为 8000,我们将使用 steps=6400,7200
    • 注意 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
  • 如果您有多个 GPU,则像这个具有 4 个 GPU 的示例一样使用 -gpus ... 标志:
cd ~/nn/animals/
darknet detector -gpus 0,1,2,3 -map -dont_show train animals.data animals.cfg

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

如果您想在训练期间查看更多详细信息,请添加 -verbose 参数。例如:

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

-log ... 标志可用于将所有控制台输出发送到文件。例如:

cd ~/nn/animals/
darknet detector -gpus 0 -verbose -log output.log -map -dont_show train animals.data animals.cfg

其他工具和链接

路线图

最后更新 2025-12-06:

已完成

  • 在训练期间使用的地方将 qsort() 替换为 std::sort()(其他一些晦涩的仍保留)
  • 移除 check_mistakes、getchar() 和 system()
  • 转换 Darknet 以使用 C++ 编译器(Linux 上使用 g++,Windows 上使用 VisualStudio)
  • 修复 Windows 构建
  • 修复 Python 支持
  • 构建 darknet 库
  • 重新启用预测标签(“字母表”代码)
  • 重新启用 CUDA(计算统一设备架构)/GPU(图形处理器)代码
  • 重新启用 CUDNN
  • 重新启用 CUDNN 半精度
  • 不要硬编码 CUDA 架构
  • 更好的 CUDA 版本信息
  • 重新启用 AVX
  • 移除旧的解决方案文件和 Makefile
  • 使 OpenCV 成为必选项
  • 移除对旧 pthread 库的依赖
  • 移除 STB
  • 重写 CMakeLists.txt 以使用新的 CUDA 检测
  • 移除旧的“字母表”代码,并删除 data/labels 中的 700 多张图像
  • 执行源外构建
  • 生成更好的版本号输出
  • 与训练相关的性能优化(进行中任务)
  • 与推理(inference)相关的性能优化(进行中任务)
  • 尽可能使用按引用传递
  • 清理 .hpp 文件
  • 重写 darknet.h
  • 不要将 cv::Mat 强制转换为 void*,而是将其作为正确的 C++ 对象使用
  • 修复或统一内部 image 结构的使用方式
  • 修复基于 ARM 的 Jetson(英伟达嵌入式平台)设备的构建
    • 原始 Jetson 设备(不太可能修复,因为它们不再受 NVIDIA 支持且没有 C++17 编译器)
    • 新的 Jetson Orin 设备已正常工作
  • 修复 V3 中的 Python API
    • 需要更好的 Python 支持 (有 Python 开发者愿意帮忙吗?)
  • 热力图
  • 移除所有 printf() 和 std::cout 调用,替换为 std::ofstream 以将日志记录到文件
  • 添加对 AMD GPU 的支持
  • 添加对 OpenBLAS(开源基础线性代数子程序库)的支持(仅限 CPU 构建)
  • 添加对 Profile Guided Optimization(基于分析的性能优化)的支持
  • 从 GitHub 迁移到 Codeberg
  • ONNX(开放神经网络交换格式)导出工具
  • 重写计算 mAP(平均精度均值)的函数
  • 支持 ONNX 导出工具的 FP32(32 位浮点数)和 FP16(16 位浮点数)

短期目标

  • Java 绑定(进行中)
  • 研究旧版 ZED 相机支持
  • 更好且更一致的命令行解析(进行中)
  • 添加对 MIOpen(AMD 深度学习库)的支持

中期目标

  • 移除所有 char* 代码并用 std::string 替换
  • 不要隐藏警告并清理编译器警告(进行中)
  • 更好地使用 cv::Mat 而不是 C 语言中的自定义 image 结构(进行中)
  • 用 std::vector 或 std::list 替换旧的 list 功能(进行中)
  • 修复对 1 通道灰度(greyscale)图像的支持
  • 添加对 N 通道图像的支持(其中 N > 3,例如具有额外深度或热通道的图像)
  • 持续进行代码清理(进行中)
  • 在 ONNX 导出工具中添加对 8 位量化(quantization)的支持

长期目标

  • 修复所有 GPU 的 CUDA/CUDNN 问题
  • 重写 CUDA+cuDNN 代码
  • 研究添加对额外硬件的支持
  • 旋转边界框(bounding boxes),或某种“角度”支持
  • 关键点/骨架
  • 分割(segmentation)

版本历史

v2.02023/11/13

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架