Data.gov 主存储库
这是 Data.gov 平台的主存储库。它主要用于跟踪团队的工作,但也用于存储 datagov 范围内的代码(GitHub Actions 模板、出口等)。
如果您正在寻找 cloud.gov 环境的文档,请参阅应用程序存储库。
GitHub 操作和模板
多个 GitHub Actions 已被重构以使用此存储库中的模板。您可以在此处找到这些模板以及在库存和目录中调用它们的示例。
暗网目标检测框架和 YOLO
Darknet 是一个使用 C、C++ 和 CUDA 构建的开源神经网络框架。
YOLO(You Only Look Once)是一种在 Darknet 框架内运行的尖端实时物体检测系统。
了解 Hank.ai 如何支持 Darknet/YOLO 社区。
探索 Darknet/YOLO 网站。
探索暗网/YOLO 常见问题解答。
加入 Darknet/YOLO Discord 服务器。
文件
1. YOLOv7论文(论文链接)
2. Scaled-YOLOv4 论文(论文链接)
3.YOLOv4论文(论文链接)
4. YOLOv3论文(论文链接)
一般信息
Darknet/YOLO 框架仍然比其他框架和 YOLO 版本更快、更准确。它是完全免费和开源的,允许您将 Darknet/YOLO 合并到您的项目和产品中,而无需任何许可限制或费用。
Darknet V3(“Jazz”)于 2024 年 10 月发布,可以使用 NVIDIA RTX 3090 GPU 以高达 1000 FPS 的速度处理乐高数据集视频。这意味着每个视频帧的处理时间不到 1 毫秒。
加入 Darknet/YOLO Discord 服务器寻求帮助和讨论:https://discord.gg/zSq8rtW
Darknet/YOLO 的 CPU 版本可以在各种设备上运行,包括 Raspberry Pi、云和 Colab 服务器、台式机、笔记本电脑和高端训练设备。 GPU 版本需要支持 CUDA 的 NVIDIA GPU。
众所周知,Darknet/YOLO 可在 Linux、Windows 和 Mac 上运行。下面提供了构建说明。
暗网版本
版本 0.x:由 Joseph Redmon 在 2013 年至 2017 年期间创建的原始暗网工具。
版本 1.x:2017-2021 年由 Alexey Bochkovskiy 维护的流行暗网存储库。
版本 2.x(“OAK”):由 Hank.ai 赞助并由 Stéphane Charette 维护的暗网存储库,从 2023 年开始。此版本引入了版本命令。
版本 2.1:版本 2 代码库的最后一个分支,可在 v2 分支中使用。
版本 3.x(“JAZZ”):最新开发阶段于 2024 年 10 月发布。
3.x 版本中的主要变化:
1.删除了许多旧的和未维护的命令。
2. 训练和推理的性能显着优化。
3.修改遗留C API;使用原始 Darknet API 的应用程序可能需要进行细微调整。
4.引入新的Darknet V3 C和C++ API:https://darknetcv.ai/api/api.html
5. src-examples 中的新应用程序和示例代码:https://darknetcv.ai/api/files.html
MSCOCO 预训练权重
为了方便起见,YOLO 的几个流行版本都在 MSCOCO 数据集上进行了预训练。该数据集包含 80 个类,在 cfg/coco.names 文本文件中列出。
其他更简单的数据集和预训练权重,例如 LEGO Gears 和 Rolodex,可用于测试 Darknet/YOLO。有关详细信息,请参阅 Darknet/YOLO 常见问题解答。
您可以从不同位置下载 MSCOCO 预训练权重,包括此存储库:
YOLOv2(2016 年 11 月)
YOLOv2-微小
YOLOv2-full
YOLOv3(2018 年 5 月)
YOLOv3-微小
YOLOv3-full
YOLOv4(2020 年 5 月)
YOLOv4-小
YOLOv4-full
YOLOv7(2022 年 8 月)
YOLOv7-微小
YOLOv7-full
命令示例:
`
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 coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
请记住,我们鼓励您训练自己的网络。 MSCOCO 主要用于确认一切正常工作。
建筑
2023 年之前可用的构建方法已合并为一个统一的解决方案。 Darknet 需要 C++17 或更高版本、OpenCV,并使用 CMake 生成项目文件。
您不需要了解 C++ 来构建、安装或运行 Darknet/YOLO,就像您不需要成为一名机械师来驾驶汽车一样。
谷歌合作实验室
Google Colab 指令与 Linux 指令相同。 colab 子目录中提供了几个演示训练新网络等任务的 Jupyter 笔记本。您还可以按照下面的 Linux 说明进行操作。
Linux CMake方法
1. 可选:如果您有现代 NVIDIA GPU,请安装 CUDA 或 CUDA+cuDNN。 Darknet 将利用您的 GPU 进行更快的图像和视频处理。
2. 从 Darknet 构建目录中删除 CMakeCache.txt 文件,以强制 CMake 重新查找所有必需的文件。
3. 重建暗网。
4. 安装 CUDA(可选):访问 https://developer.nvidia.com/cuda-downloads 下载并安装 CUDA。
5. 安装 cuDNN(可选):访问 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package -manager-installation-overview 下载并安装 cuDNN。
6. 验证 CUDA 安装:确保您可以运行 nvcc 和 nvidia-smi。您可能需要修改 PATH 变量。
7.安装依赖项并克隆Darknet:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
git 克隆 https://github.com/hank-ai/darknetcd darknet
mkdir 构建
光盘构建
`
8.配置CMake:
`bash
cmake -DCMAKEBUILDTYPE=发布 ..
`
9. 构建暗网:
`bash
制作-j4包
`
10.安装暗网:
`bash
sudo dpkg -i darknet-VERSION.deb
`
11、测试安装:
`bash
暗网版本
`
附加说明:
如果您使用的是旧版本的 CMake,请在运行 cmake 命令之前升级它:
`bash
sudo apt-get purge cmake
sudo snap install cmake --经典
`
如果使用 bash,请重新启动 shell,否则 Fish 会自动更新路径。
要构建 RPM 安装文件而不是 DEB 文件,请修改 CM_package.cmake 文件。
构建安装包后,使用您的发行版的包管理器来安装它(例如,在基于 Debian 的系统上使用 sudo dpkg -i darknet-2.0.1-Linux.deb)。
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
cd c:mkdir c:srccd c:src
git 克隆 https://github.com/microsoft/vcpkgcd 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(如 Linux 说明中所示)。
6. 删除 CMakeCache.txt(如 Linux 说明中所示)。
7. 重新构建 Darknet(如 Linux 说明中所示)。
8. 安装 CUDA(可选):访问 https://developer.nvidia.com/cuda-downloads 下载并安装 CUDA。
9. 安装 cuDNN(可选):访问 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows下载并安装 cuDNN。
10. 验证 CUDA 安装:确保可以运行 nvcc.exe。您可能需要修改 PATH 变量。
11. 解压并复制 cuDNN 文件:下载后,解压并将 bin、include 和 lib 目录复制到 C:/Program Files/NVIDIA GPU Compute Toolkit/CUDA/[version]/。您可能需要覆盖一些文件。
12.克隆暗网并构建:
`bash
cd c:src
git 克隆 https://github.com/hank-ai/darknet.gitcd darknet
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
`
13. 复制 CUDA DLL(可选):如果遇到有关缺少 CUDA 或 cuDNN DLL(例如 cublas64_12.dll)的错误,请手动将 CUDA DLL 复制到 Darknet.exe 输出目录:
`bash
复制“C:Program FilesNVIDIA GPU计算工具包CUDAv12.2bin * .dll”src-cliRelease
`
(确保将版本号替换为您正在使用的版本号。)
14、重新运行msbuild.exe命令生成NSIS安装包:
`bash
msbuild.exe /property:平台=x64;配置=发布 PACKAGE.vcxproj
`
15、测试安装:
`bash
C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本
`
16. 运行 NSIS 安装向导:这将安装 CLI 应用程序、所需的 DLL、库、包含文件和模板配置文件。
附加说明:
cmake 命令生成 Visual Studio 解决方案文件 (Darknet.sln)。您可以使用 Visual Studio GUI 来生成项目,而不是使用 msbuild.exe。
NSIS安装包(例如darknet-VERSION.exe)可以在build目录中找到。
使用暗网
命令行界面
以下并不是所有暗网命令的详尽列表。
暗网帮助:显示帮助信息。
暗网版本:查看暗网版本。
预测命令:
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
`
输出坐标:
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
`
视频处理:
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
`
网络摄像头输入:
V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -c 0
`
V3:
`bash
darknet08display_网络摄像头动物
`
将结果保存到视频:
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
`
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
`
指定GPU:
V2:
`bash
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
精度计算:
地图:
`bash
暗网探测器地图 Driving.data Driving.cfg moving_best.weights ...
`
映射@IoU=75:
`bash
暗网探测器地图animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
`
重新计算锚点:
DarkMark(推荐):使用 DarkMark 运行 100 次连续计算并选择最佳锚点。
暗网:
`bash
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
`
训练新网络:
使用 DarkMark(推荐):使用 DarkMark 创建训练所需的所有文件。
手动设置:
1. 为您的项目创建一个新文件夹(例如~/nn/animals/)。
2. 将配置文件作为模板(例如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)。
6. 使用 DarkMark 或类似软件对图像进行注释并生成相应的 .txt 注释文件。
7. 创建animalstrain.txt 和animalsvalid.txt 文件,分别列出用于训练和验证的图像,每行一个。
8、修改配置文件:
- 设置批次=64。
- 根据需要调整细分。
- 设置 max_batches=8000(或 2000 x 类数)。
- 设置steps=6400,7200(max_batches的80%和90%)。
- 将宽度和高度设置为您的网络尺寸。
- 使用 .names 文件中的类数量更新类。
- 更新 [yolo] 部分之前每个 [卷积] 部分中的过滤器:(numberofclasses + 5) * 3。
9. 开始训练:
`bash
cd ~/nn/动物/
暗网探测器-map-dont_show火车animals.dataanimals.cfg
`
其他培训提示:
使用 --verbose 参数获取更详细的训练信息:
`bash
暗网探测器-map-dont_show--verbose火车animals.dataanimals.cfg
`
其他工具和链接
DarkMark:管理 Darknet/YOLO 项目、注释图像、验证注释并生成训练文件。
DarkHelp:Darknet 的强大替代 CLI,支持图像平铺、对象跟踪以及用于商业应用程序的 C++ API。
Darknet/YOLO 常见问题解答:常见问题解答的综合资源。
Stéphane 的 YouTube 频道:Darknet/YOLO 上的教程和示例视频。
Darknet/YOLO Discord 服务器:用于支持和讨论的社区论坛。
路线图
已完成的任务:
将 qsort() 替换为 std::sort() 以提高效率。
删除了已弃用的函数,例如 check_mistakes、getchar() 和 system()。
将 Darknet 转换为使用 C++ 编译器(Linux 上为 g++,Windows 上为 VisualStudio)。
修复了 Windows 构建问题。
恢复了 Python 支持。
建立了暗网库。
重新启用预测标签(字母代码)。
重新启用 CUDA/GPU、CUDNN 和 CUDNN 半支持。
删除了硬编码的 CUDA 架构。
改进了 CUDA 版本信息。
重新启用 AVX 支持。
删除了旧的解决方案和 Makefile。
使 OpenCV 成为非可选依赖项。
删除了对旧 pthread 库的依赖。
删除了 STB 依赖性。
重写 CMakeLists.txt 以使用新的 CUDA 检测。
删除了旧的字母代码并删除了不必要的图像。
启用外源构建。
改进了版本号输出。
优化训练和推理性能。
在适用的情况下实施了引用传递。
清理了 .hpp 文件。
重写了darknet.h。
使用 cv::Mat 作为正确的 C++ 对象,而不是转换为 void*。
修复了内部图像结构使用不一致的问题。
修复了基于 ARM 的 Jetson 设备的构建问题(不支持的旧型号除外)。
修复了版本 3 中的 Python API。
短期目标:
将 printf() 替换为 std::cout。
研究对旧版 Zed 相机的支持。
改进和标准化命令行解析。
中期目标:
删除所有 char* 代码并替换为 std::string。
消除编译器警告并确保一致的代码风格。
在自定义 C 映像结构上增强 cv::Mat 的使用。
用 std::vector 或 std::list 替换旧的列表功能。
修复对 1 通道灰度图像的支持。
添加对 N 通道图像的支持(例如,具有附加深度或热通道)。
正在进行的代码清理。
长期目标:
解决所有 GPU 上的 CUDA/CUDNN 问题。
重写CUDA+cuDNN代码。
探索对非 NVIDIA GPU 的支持。
实现旋转边界框或“角度”支持。
添加关键点/骨架、热图和分段支持。