安西布尔
Ansible 是一个非常简单的 IT 自动化系统。它能够熟练地处理配置管理、应用程序部署、云配置、临时任务执行、网络自动化和多节点编排。 Ansible 使您能够轻松执行复杂的更改,例如使用负载均衡器进行零停机滚动更新。在其官方网站上深入了解 Ansible 的功能。
设计原则
1. 使用 Ansible
您可以使用 pip 或您首选的包管理器无缝安装 Ansible 的发布版本。请参阅我们详细的安装指南,了解跨不同平台的全面说明。
2. 增强高级用户和开发人员的能力
对于高级用户和开发人员,开发分支提供对最新功能和修复的访问。虽然总体稳定,但重要的是要承认在使用此分支时可能会发生重大更改。如果您选择与开发分支合作,我们强烈建议您参与 Ansible 社区。
沟通
加入充满活力的 Ansible 论坛,与社区互动、寻求帮助并提出问题。如需其他沟通渠道,请浏览我们有关与 Ansible 社区联系的专用指南。
为 Ansible 做出贡献
编码指南
我们在开发者指南中精心记录了我们的编码指南。我们强烈建议您查看以下部分:
1. 分行信息
2. 路线图
根据团队和社区的宝贵反馈,为每个主要或次要版本(例如 2.7、2.8)发布了初始路线图。 Ansible 路线图页面概述了我们的计划并提供了影响我们方向的途径。
作者
Ansible 最初由 Michael DeHaan 构想,并受益于超过 5000 名用户(并且还在不断增加)的贡献。感谢所有做出贡献的人!
Ansible 很荣幸得到红帽公司赞助。
执照
GNU 通用公共许可证 v3.0 或更高版本。请参阅复制以获取完整的许可证文本。
暗网目标检测框架和 YOLO
!darknet 和 hank.ai 徽标
Darknet 是一个用 C、C++ 和 CUDA 开发的开源神经网络框架。
YOLO(You Only Look Once)代表了一种在暗网框架内运行的尖端实时物体检测系统。
了解 Hank.ai 如何为 Darknet/YOLO 社区做出贡献:https://darknetcv.ai/
探索 Darknet/YOLO 官方网站:https://pjreddie.com/darknet/
请参阅全面的 Darknet/YOLO 常见问题解答:https://pjreddie.com/darknet/yolo/
加入活跃的 Darknet/YOLO Discord 服务器:https://discord.gg/zSq8rtW
文件
1.YOLOv7论文:https://arxiv.org/abs/2207.02696
2. Scaled-YOLOv4 论文:https://arxiv.org/abs/2102.12074
3.YOLOv4论文:https://arxiv.org/abs/2004.10934
4.YOLOv3论文:https://arxiv.org/abs/1804.02769
一般信息
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 服务器、台式机、笔记本电脑和高端训练设备。 Darknet/YOLO 的 GPU 版本需要 NVIDIA 提供的支持 CUDA 的 GPU。
Darknet/YOLO 已被验证可以在 Linux、Windows 和 Mac 操作系统上无缝运行。请参阅下面列出的搭建说明。
暗网版本
最初的暗网工具由 Joseph Redmon 在 2013 年至 2017 年期间开发,缺乏版本号。我们认为这是版本 0.x。
随后流行的 Darknet 存储库由 Alexey Bochkovskiy 在 2017 年至 2021 年期间维护,也缺少版本号。我们将其归类为版本 1.x。
从 2023 年开始,由 Hank.ai 赞助并由 Stéphane Charette 管理的 Darknet 存储库首次引入了版本命令。从 2023 年到 2024 年底,它返回了版本 2.x“OAK”。
开发目标集中于最大限度地减少对现有功能的干扰,同时熟悉代码库。
2.x 版本的主要改进:
1. 统一构建过程:在 Windows 和 Linux 上使用 CMake 重写了统一方法的构建步骤。
2. C++ 转换:转换代码库以利用 C++ 编译器。
3.增强训练可视化:改进了训练过程中chart.png的可视化。
4. 性能优化:解决了错误并实施了与性能相关的优化,主要集中在减少训练时间。
版本 2.1 代表此代码库的最终分支,可在 v2 分支中使用。
下一阶段的开发于 2024 年中期开始,并最终于 2024 年 10 月发布版本 3.x“JAZZ”。
如果您需要访问该版本的特定命令,您可以保留查看之前的 v2 分支的选项。如果您遇到任何丢失的命令,请通知我们进行调查和可能的重新集成。
3.x 版本的重大变化:
1.命令修剪:删除了大量过时且无人维护的命令。
2. 增强性能:在训练和推理过程中实施了广泛的性能优化。
3. API修改:旧版C API进行了修改;依赖原始 Darknet API 的应用程序将需要进行细微调整。请参阅更新的文档以获取指导:https://darknetcv.ai/api/api.html
4.新API介绍:引入了新的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 文本文件中找到。
其他更简单的数据集和预训练权重可随时用于测试 Darknet/YOLO,包括 LEGO Gears 和 Rolodex。有关详细信息,请参阅 Darknet/YOLO 常见问题解答。
您可以从各个位置获取 MSCOCO 预训练权重,包括此存储库:
YOLOv2(2016 年 11 月):
yolov2-小
yolov2-完整
YOLOv3(2018 年 5 月):
yolov3-小
yolov3-完整
YOLOv4(2020 年 5 月):
yolov4-小
yolov4-完整
YOLOv7(2022 年 8 月):
yolov7-小
yolov7-完整
提供 MSCOCO 预训练权重用于演示目的。 MSCOCO 相应的 .cfg 和 .names 文件位于 cfg 目录中。
命令示例:
`bash
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 生成必要的项目文件。
构建 Darknet/YOLO 不需要 C++ 专业知识;类似于驾驶汽车,您无需成为机械师即可使用它。
我们鼓励软件开发人员访问 https://darknetcv.ai/ 以深入了解 Darknet/YOLO 对象检测框架的内部工作原理。
谷歌合作实验室
Google Colab 指令反映了 Linux 指令。几个 Jupyter 笔记本演示了特定任务,例如训练新网络。
浏览 colab 子目录中的笔记本或按照下面提供的 Linux 说明进行操作。
Linux CMake方法
1. 必备软件:
构建要点: sudo apt-get install build-essential git libopencv-dev cmake
2. 存储库克隆:
创建源目录:mkdir ~/srccd ~/src
克隆存储库: git clone https://github.com/hank-ai/darknetcd darknet
3. 构建目录:
创建构建目录:mkdir buildcd build
4.CMake配置:
配置 CMake:cmake -DCMAKEBUILDTYPE=Release ..
5. 构建暗网:
构建:make -j4
6. 软件包安装:
创建包:包
安装软件包: sudo dpkg -i darknet-VERSION.deb
可选:CUDA 或 CUDA+cuDNN 安装
为了加速图像和视频处理,您可以选择安装 CUDA 或 CUDA+cuDNN。
CUDA安装:
访问 https://developer.nvidia.com/cuda-downloads 下载并安装 CUDA。
cuDNN 安装:
访问 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview 下载并安装 cuDNN。
CUDA 安装后:
确保您可以执行 nvcc 和 nvidia-smi。您可能需要修改 PATH 变量。
升级CUDA或CUDA+cuDNN:
从 Darknet 构建目录中删除 CMakeCache.txt 文件,以强制 CMake 重新查找必要的文件。
重建暗网。
CMake版本升级(如有必要):
清除现有的 CMake: sudo apt-get purge cmake
安装最新的 CMake: sudo snap install cmake --classic
重新启动 shell (bash) 或确保新路径被识别 (fish)。
高级用户:
要构建 RPM 安装文件而不是 DEB,请修改 CM_package.cmake 中的相关行。在运行 make -j4 package 之前,调整以下行:
`cmake
设置(CPACK_GENERATOR“DEB”)
设置(CPACK_GENERATOR“RPM”)
`
对于 CentOS 和 OpenSUSE 等发行版,请修改以下行:
`cmake
设置(CPACK_GENERATOR“DEB”)
设置(CPACK_GENERATOR“RPM”)
`
构建安装包后,使用发行版的包管理器进行安装。例如,在基于 Debian 的系统(如 Ubuntu)上:
`bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
安装后:
安装的文件包括:
- /usr/bin/darknet:Darknet 可执行文件。运行 darknet 版本以确认安装。
- /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 版本。
Windows CMake方法
1.先决条件:
使用 Winget 安装以下内容:
- Git:winget 安装 Git.Git
- CMake:winget 安装 Kitware.CMake
- NSIS: winget 安装 nsis.nsis
- Visual Studio 2022 社区:winget install Microsoft.VisualStudio.2022.Community
2. Visual Studio配置:
从 Windows 开始菜单中打开“Visual Studio 安装程序”。
单击“修改”。
选择“使用 C++ 进行桌面开发”。
单击右下角的“修改”,然后单击“是”。
3. 开发者命令提示符:
打开“Windows 开始”菜单并选择“VS 2022 的开发人员命令提示符”。请勿使用 PowerShell 执行这些步骤。
4. Microsoft VCPKG 安装(适用于 OpenCV):
导航到 C:: cd c:
创建src目录:mkdir c:src
克隆 VCPKG: cd c:src git clone https://github.com/microsoft/vcpkg
引导 VCPKG:cd vcpkg bootstrap-vcpkg.bat
集成 VCPKG:.vcpkg.exe 集成安装
安装 OpenCV(包括依赖项): .vcpkg.exe install opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
5. 可选:CUDA 或 CUDA+cuDNN 安装 (Windows)
为了加速图像和视频处理,您可以选择安装 CUDA 或 CUDA+cuDNN。
CUDA安装:
访问 https://developer.nvidia.com/cuda-downloads 下载并安装 CUDA。
cuDNN 安装:
访问 https://developer.nvidia.com/rdp/cudnn-download 或 https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows 下载并安装 cuDNN。
CUDA 安装后:
确保您可以执行 nvcc.exe。您可能需要修改 PATH 变量。
解压下载的cuDNN,并将bin、include、lib目录复制到C:/Program Files/NVIDIA GPUComputing Toolkit/CUDA/[版本]/中。您可能需要覆盖一些文件。
升级CUDA或CUDA+cuDNN:
CUDA 必须在 Visual Studio 之后安装。如果升级 Visual Studio,请重新安装 CUDA。
6. 克隆和构建暗网:
导航到您的源目录: cd c:src
克隆存储库: git clone https://github.com/hank-ai/darknet.git
创建构建目录: cd darknetmkdir build
使用 VCPKG 配置 CMake: cd build cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
构建解决方案: msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
生成NSIS安装包:msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
7. 处理丢失的 CUDA/cuDNN DLL:
如果遇到有关缺少 CUDA 或 cuDNN DLL(例如 cublas64_12.dll)的错误,请手动将相关 CUDA .dll 文件复制到与 Darknet.exe 相同的输出目录。例如:
`bash
复制“C:Program FilesNVIDIA GPU计算工具包CUDAv12.2bin * .dll”src-cliRelease
`
调整命令中的版本号以匹配您的安装。
重新运行msbuild.exe命令生成NSIS安装包。
高级用户:
cmake 命令生成 Visual Studio 解决方案文件 (Darknet.sln)。如果您更喜欢 Visual Studio GUI,则可以在 Visual Studio 中加载 Darknet 项目,而不是使用命令行工具。
构建后验证:
验证 C:srcDarknetbuildsrc-cliReleasedarknet.exe 是否存在。运行 C:srcDarknetbuildsrc-cliReleasedarknet.exe 版本进行确认。
安装:
运行NSIS安装向导(例如,构建目录中的darknet-VERSION.exe)来安装Darknet、库、包含文件和必要的DLL。
安装后验证:
验证 C:/Program Files/darknet/bin/darknet.exe 是否存在。运行 C:/Program Files/darknet/bindarknet.exe 版本进行确认。
使用暗网
命令行界面
此列表不包含所有暗网命令。
除了 Darknet CLI 之外,还可以考虑使用 DarkHelp 项目 CLI,它提供了替代且更高级的界面。两个 CLI 可以一起使用。
对于大多数命令,您需要一个 .weights 文件以及相应的 .names 和 .cfg 文件。您可以训练自己的网络或下载预先训练的网络。
预训练数据集:
LEGO Gears:图像中的对象检测。
Rolodex:图像中的文本检测。
MSCOCO:标准80级物体检测。
常用 CLI 命令:
1.帮助:暗网帮助
2.版本:暗网版本
3.图像预测(V2):
暗网探测器测试 cars.data cars.cfg cars_best.weights image1.jpg
4.图像预测(V3):
darknet02displayannotatedimages cars.cfg image1.jpg
5.图像预测(DarkHelp):
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
6. 输出坐标(V2):
暗网探测器测试animals.dataanimals.cfganimalsbest.weights-extoutputdog.jpg
7. 输出坐标(V3):
darknet01inference_images 动物 狗.jpg
8.输出坐标(DarkHelp):
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Dog.jpg
9. 视频处理(V2):
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights -extoutput test.mp4
10.视频处理(V3):
darknet03display_videos Animals.cfg test.mp4
11.视频处理(DarkHelp):
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
12.网络摄像头处理(V2):
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -c 0
13.网络摄像头处理(V3):
darknet08display_网络摄像头动物
14.视频保存(V2):
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test.mp4 -outfilename res.avi
15.视频保存(V3):
darknet05processvideos多线程animals.cfganimals.namesanimals_best.weightstest.mp4
16.视频保存(DarkHelp):
DarkHelp Animals.cfg Animals.names Animals_best.weights test.mp4
17.JSON输出(V2):
暗网探测器演示 Animals.data Animals.cfg Animalbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
18.JSON输出(V3):
darknet06imagestojson 动物 image1.jpg
19. JSON 输出(DarkHelp):
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
20.GPU选择(V2):
暗网探测器演示 Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
21. 网络准确性检查:
暗网探测器地图 Driving.data Driving.cfg moving_best.weights ...
22. 精度检查(mAP@IoU=75):
暗网探测器地图animals.dataanimals.cfganimalsbest.weights-iothresh 0.75
23.锚点重新计算(推荐使用DarkMark):
暗网探测器 calcanchors Animals.data -numof_clusters 6 -宽度 320 -高度 256
24. 训练新网络:
darknet detector -map -dont_show train Animals.data Animals.cfg(参见下面的训练部分)
训练
暗网/YOLO 常见问题解答相关部分的快速链接:
设置:https://pjreddie.com/darknet/yolo/
配置文件选择:https://pjreddie.com/darknet/yolo/
训练命令:https://pjreddie.com/darknet/yolo/
最简化的注释和训练方法涉及利用 DarkMark。这是训练新神经网络的推荐方法。
手动训练设置:
1. 创建项目文件夹:例如~/nn/animals/。
2. 复制配置模板:
选择一个配置文件(例如cfg/yolov4-tiny.cfg)。
将其放入项目文件夹中。
现在你有了~/nn/animals/animals.cfg。
3. 创建animals.names文件:
在项目文件夹中创建一个名为animals.names 的文本文件。
使用您想要的类编辑此文件。
确保每个类都在单独的行上,没有空行或注释。
例如:
`
狗
猫
鸟
马
`
4. 创建animals.data文件:
在项目文件夹中创建一个名为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。
每个图像都需要一个相应的 .txt 文件来定义其注释。
您无法手动创建这些 .txt 文件;需要使用 DarkMark 或类似工具来注释图像并生成这些文件。
有关 YOLO 注释格式,请参阅 Darknet/YOLO FAQ。
6. 创建animalstrain.txt 和animalsvalid.txt 文件:
按照 Animals.data 文件中的指定创建这些文本文件。
这些文件分别列出了用于训练和验证的所有图像。
每行一张图像,使用相对或绝对路径。
7.修改配置文件(animals.cfg):
批次:设置批次=64。
细分:从细分=1 开始。根据网络尺寸和 GPU 内存根据需要进行调整。
最大批次:一个好的起始值是 maxbatches=2000 * numberofclasses。在此示例中,maxbatches=8000(4 只动物)。
步骤:设置为 max_batches 的 80% 和 90%。在此示例中,步数=6400,7200。
宽度和高度:定义网络尺寸。请参阅 Darknet/YOLO 常见问题解答以获取指导。
类:设置classes=... 以匹配.names 文件中的类数(本例中为4)。
过滤器:在yolo层之前的每个卷积层中,将filters=...设置为(numberofclasses + 5) * 3。在本例中,filters=27。
8. 开始训练:
导航到您的项目文件夹:cd ~/nn/animals/
开始训练:darknet detector -map -dont_show train Animals.data Animals.cfg
要有耐心。最佳权重将保存为animals_best.weights。
通过查看chart.png文件观察训练进度。
有关其他训练参数,请参阅 Darknet/YOLO 常见问题解答。
要获得更详细的训练输出,请添加 --verbose 标志:
`bash
暗网探测器-map-dont_show--verbose火车animals.dataanimals.cfg
`
其他工具和链接
DarkMark:用于管理 Darknet/YOLO 项目、注释图像、验证注释以及生成训练文件。 https://darknetcv.ai/darkmark/
DarkHelp:提供 Darknet、图像平铺、对象跟踪和商业友好的 C++ API 的强大替代 CLI。 https://darknetcv.ai/darkhelp/
Darknet/YOLO 常见问题解答:常见问题的解答。 https://pjreddie.com/darknet/yolo/
Stéphane 的 YouTube 频道:提供教程和示例视频。 https://www.youtube.com/@stephane-charette
Darknet/YOLO Discord Server:用于支持问题和社区讨论。 https://discord.gg/zSq8rtW
路线图
最后更新:2024-10-30
完全的
在训练期间将 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 库的依赖。
删除了机顶盒。
重写 CMakeLists.txt 以使用新的 CUDA 检测。
删除了旧的“字母”代码并删除了数据/标签中的 700 多个图像。
启用外源构建。
改进了版本号输出。
实施与培训相关的性能优化(正在进行)。
实施了与推理相关的性能优化(正在进行)。
在适用的情况下采用引用传递。
清理了 .hpp 文件。
重写darknet.h。
避免将 cv::Mat 转换为 void* 并将其用作正确的 C++ 对象。
解决了内部图像结构使用的不一致问题。
修复了基于 ARM 的 Jetson 设备的构建。
新的 Jetson Orin 设备可以正常运行。
解决了 V3 中的 Python API 问题。
短期目标
将 printf() 替换为 std::cout (正在进行中)。
研究旧的 zed 相机支持。
改进命令行解析以实现一致性(正在进行中)。
中期目标
删除所有 char* 代码并替换为 std::string。
消除隐藏警告并解决编译器警告(正在进行中)。
增强 cv::Mat 的使用,而不是自定义 C 图像结构(正在进行中)。
用 std::vector 或 std::list 替换旧的列表功能。
修复对 1 通道灰度图像的支持。
添加对 N 通道图像(其中 N > 3)的支持(例如,具有深度或热通道的图像)。
继续正在进行的代码清理(正在进行中)。
长期目标
解决所有 GPU 上的 CUDA/CUDNN 问题。
重写CUDA+cuDNN代码。
探索对非 NVIDIA GPU 的支持。
实现旋转边界框或角度支持。
介绍关键点/骨架。
添加对热图的支持(正在进行中)。
纳入细分。