Marmite
Marmite [Markdown makes sites] is a very simple static site generator.
Downcodes小编说:“Marmite 是一个非常简单的静态网站生成器。我经常使用其他 SSG,但总是发现从头开始设置它们太麻烦了。只需要一个 markdown 文件目录并运行一个命令就能生成网站,这听起来真的很方便。”
如何使用
Marmite 只做一件简单的事:
将 markdown 文件转换为 HTML
它还可以处理静态文件或媒体文件的生成或复制到输出目录。
安装
使用 cargo 安装:
`bash
cargo install marmite
`
或者从发布页面下载预编译的二进制文件。
使用
使用起来非常简单!
`bash
$ marmite folderwithmarkdownfiles pathtogeneratedsite
`
网站将生成在 pathtogenerated_site/ 目录下。
CLI
`bash
❯ marmite --help
Marmite is the easiest static site generator.
Usage: marmite [OPTIONS]
Arguments:
Options:
--serve Serve the site with a built-in HTTP server
--watch Detect changes and rebuild the site automatically
--bind
Address to bind the server [default: localhost:8000]
--config
Path to custom configuration file [default: marmite.yaml]
--debug Print debug messages
--init-templates Initialize templates in the project
--start-theme Initialize a theme with templates and static assets
-h, --help Print help
-V, --version Print version
`
开始使用
阅读教程,了解如何开始使用 Marmite https://rochacbruno.github.io/marmite/getting-started.html 并花几分钟创建你的博客。
文档
在 https://rochacbruno.github.io/marmite/ 上阅读更多关于如何自定义模板、添加评论等内容。
总结
Marmite 非常简单。
如果这种简单性不适合你的需求,还有其他很棒的静态网站生成器。以下是一些我推荐的:
Jekyll
Hugo
Gatsby
Next.js
Darknet 对象检测框架和 YOLO
概述
Darknet 是一个用 C、C++ 和 CUDA 编写的开源神经网络框架。
YOLO(You Only Look Once)是一个最先进的实时对象检测系统,它运行在 Darknet 框架中。
重要链接:
Hank.ai 如何帮助 Darknet/YOLO 社区
Darknet/YOLO 网站
Darknet/YOLO 常见问题解答
Darknet/YOLO Discord 服务器
论文
YOLOv7 论文
Scaled-YOLOv4 论文
YOLOv4 论文
YOLOv3 论文
一般信息
Darknet/YOLO 框架在速度和准确性方面一直优于其他框架和 YOLO 版本。
该框架是完全免费和开源的。你可以将 Darknet/YOLO 整合到现有的项目和产品中,包括商业产品,无需许可或支付费用。
2024 年 10 月发布的 Darknet V3(“Jazz”)可以在使用 NVIDIA RTX 3090 GPU 时以高达 1000 FPS 的速度准确运行 LEGO 数据集视频,这意味着 Darknet/YOLO 在 1 毫秒或更短的时间内读取、调整大小和处理每个视频帧。
Darknet/YOLO 的 CPU 版本可以在 Raspberry Pi、云和 colab 服务器、台式机、笔记本电脑和高端训练设备等简单设备上运行。Darknet/YOLO 的 GPU 版本需要 NVIDIA 的 CUDA 兼容 GPU。
Darknet/YOLO 可以在 Linux、Windows 和 Mac 上运行。请参阅下面的构建说明。
Darknet 版本
Joseph Redmon 在 2013-2017 年编写的原始 Darknet 工具没有版本号。我们认为它是 0.x 版本。
Alexey Bochkovskiy 在 2017-2021 年维护的下一个流行的 Darknet 存储库也没有版本号。我们认为它是 1.x 版本。
Hank.ai 赞助并由 Stéphane Charette 从 2023 年开始维护的 Darknet 存储库是第一个具有版本命令的存储库。从 2023 年到 2024 年底,它返回版本 2.x "OAK"。
目标是在熟悉代码库的同时尽可能少地破坏现有的功能。
重写了构建步骤,因此我们有一种统一的方式来使用 CMake 在 Windows 和 Linux 上构建。
将代码库转换为使用 C++ 编译器。
增强了训练过程中的 chart.png。
错误修复和与性能相关的优化,主要与减少训练网络所需时间有关。
此代码库的最后一个分支是在 v2 分支中的 2.1 版本。
下一阶段的开发于 2024 年年中开始,并于 2024 年 10 月发布。版本命令现在返回 3.x "JAZZ"。
如果你需要运行这些命令中的一个,你可以随时检出以前的 v2 分支。让我们知道,以便我们可以调查添加任何缺少的命令。
删除了许多旧的和未维护的命令。
许多性能优化,包括训练和推理过程中的优化。
修改了旧的 C API;使用原始 Darknet API 的应用程序需要进行少量修改:https://darknetcv.ai/api/api.html
新的 Darknet V3 C 和 C++ API:https://darknetcv.ai/api/api.html
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-tiny.weights
- yolov2-full.weights
YOLOv3(2018 年 5 月)
- yolov3-tiny.weights
- yolov3-full.weights
YOLOv4(2020 年 5 月)
- yolov4-tiny.weights
- yolov4-full.weights
YOLOv7(2022 年 8 月)
- yolov7-tiny.weights
- yolov7-full.weights
MSCOCO 预训练权重仅用于演示目的。相应的 .cfg 和 .names 文件(用于 MSCOCO)位于 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 生成必要的项目文件。
你不需要了解 C++ 就可以构建、安装或运行 Darknet/YOLO,就像你不需要是机械师就可以驾驶汽车一样。
Google Colab
Google Colab 指示与 Linux 指示相同。提供了一些 Jupyter 笔记本,展示了如何执行某些任务,例如训练新的网络。
请参阅 colab 子目录中的笔记本,或遵循下面的 Linux 指示。
Linux CMake 方法
1. 安装必要软件:
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. 克隆 Darknet 存储库:
`bash
git clone https://github.com/hank-ai/darknet
`
3. 创建构建目录:
`bash
cd darknet
mkdir build
cd build
`
4. 使用 CMake 生成构建文件:
`bash
cmake -DCMAKEBUILDTYPE=Release ..
`
5. 构建 Darknet:
`bash
make -j4
`
6. 安装 Darknet(可选):
`bash
make package
sudo dpkg -i darknet-VERSION.deb
`
注意:
如果你的系统上安装了 NVIDIA GPU,可以安装 CUDA 或 CUDA+cuDNN 以加速图像(和视频)处理。
如果你在安装 CUDA 或 CUDA+cuDNN 后或升级了 NVIDIA 软件后,需要删除构建目录中的 CMakeCache.txt 文件,并重新构建 Darknet。
可以使用 darknet version 命令检查 Darknet 是否已成功安装。
Windows CMake 方法
1. 安装必要软件:
`bash
winget install Git.Git
winget install Kitware.CMake
winget install nsis.nsis
winget install Microsoft.VisualStudio.2022.Community
`
2. 修改 Visual Studio 安装:
- 打开“Windows 开始”菜单并运行“Visual Studio Installer”。
- 点击“修改”。
- 选择“使用 C++ 进行桌面开发”。
- 点击右下角的“修改”,然后点击“是”。
3. 安装 Microsoft VCPKG:
`bash
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
`
4. 克隆 Darknet 存储库:
`bash
cd c:src
git clone https://github.com/hank-ai/darknet.git
cd darknet
mkdir build
cd build
`
5. 使用 CMake 生成构建文件:
`bash
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
6. 构建 Darknet:
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
7. 安装 Darknet:
- 运行构建目录中的 darknet-VERSION.exe 文件以启动 NSIS 安装向导。
注意:
如果你的系统上安装了 NVIDIA GPU,可以安装 CUDA 或 CUDA+cuDNN 以加速图像(和视频)处理。
如果你在安装 CUDA 或 CUDA+cuDNN 后或升级了 NVIDIA 软件后,需要删除构建目录中的 CMakeCache.txt 文件,并重新构建 Darknet。
可以使用 darknet.exe version 命令检查 Darknet 是否已成功安装。
使用 Darknet
CLI
以下不是 Darknet 支持的所有命令的完整列表。
除了 Darknet CLI 之外,还要注意 DarkHelp 项目 CLI,它为 Darknet/YOLO 提供了替代的 CLI。DarkHelp CLI 还具有 Darknet 中不可用的几个高级功能。你可以同时使用 Darknet CLI 和 DarkHelp CLI,它们并不相互排斥。
对于下面显示的大多数命令,你需要使用与 .names 和 .cfg 文件相对应的 .weights 文件。你可以训练自己的网络(强烈推荐!)或下载其他人已经训练并免费发布在互联网上的神经网络。预训练数据集的示例包括:
LEGO Gears(在图像中查找物体)
Rolodex(在图像中查找文本)
MSCOCO(标准的 80 类对象检测)
要运行的命令包括:
darknet help:显示帮助信息。
darknet version:检查版本。
darknet detector test cars.data cars.cfg cars_best.weights image1.jpg:使用图像进行预测(V2)。
darknet02displayannotatedimages cars.cfg image1.jpg:使用图像进行预测(V3)。
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg:使用图像进行预测(DarkHelp)。
darknet detector test animals.data animals.cfg animalsbest.weights -extoutput dog.jpg:输出坐标(V2)。
darknet01inference_images animals dog.jpg:输出坐标(V3)。
DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg:输出坐标(DarkHelp)。
darknet detector demo animals.data animals.cfg animalsbest.weights -extoutput test.mp4:处理视频(V2)。
darknet03display_videos animals.cfg test.mp4:处理视频(V3)。
DarkHelp animals.cfg animals.names animals_best.weights test.mp4:处理视频(DarkHelp)。
darknet detector demo animals.data animals.cfg animals_best.weights -c 0:从网络摄像头读取(V2)。
darknet08display_webcam animals:从网络摄像头读取(V3)。
darknet detector demo animals.data animals.cfg animalsbest.weights test.mp4 -outfilename res.avi:将结果保存到视频(V2)。
darknet05processvideosmultithreaded animals.cfg animals.names animals_best.weights test.mp4:将结果保存到视频(V3)。
DarkHelp animals.cfg animals.names animals_best.weights test.mp4:将结果保存到视频(DarkHelp)。
darknet detector demo animals.data animals.cfg animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput:使用 JSON 格式(V2)。
darknet06imagestojson animals image1.jpg:使用 JSON 格式(V3)。
DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg:使用 JSON 格式(DarkHelp)。
darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4:在特定 GPU 上运行。
darknet detector map driving.data driving.cfg driving_best.weights ...:检查神经网络的准确性。
darknet detector map animals.data animals.cfg animalsbest.weights -iouthresh 0.75:检查 mAP@IoU=75 的准确性。
darknet detector calcanchors animals.data -numof_clusters 6 -width 320 -height 256:重新计算锚点。
darknet detector -map -dont_show train animals.data animals.cfg:训练新的网络。
训练
如何设置我的文件和目录?
我应该使用哪个配置文件?
训练自己的网络时我应该使用什么命令?
使用 DarkMark 注释和训练是最简单的方法,它可以创建所有必要的 Darknet 文件。这绝对是训练新的神经网络的推荐方法。
如果你更喜欢手动设置各种文件来训练自定义网络,请按照以下步骤操作:
1. 创建一个新的文件夹来存储文件。例如,将创建一个用于检测动物的神经网络,因此将创建以下目录:~/nn/animals/。
2. 复制一个你想用作模板的 Darknet 配置文件。例如,参见 cfg/yolov4-tiny.cfg。将它放在你创建的文件夹中。对于这个例子,我们现在有了 ~/nn/animals/animals.cfg。
3. 在放置配置文件的同一个文件夹中创建一个 animals.names 文本文件。对于这个例子,我们现在有了 ~/nn/animals/animals.names。
4. 使用文本编辑器编辑 animals.names 文件。列出你想要使用的类别。每行必须有且只有一项,没有空行或注释。对于这个例子,.names 文件将包含以下 4 行:
`
dog
cat
bird
horse
`
5. 在同一个文件夹中创建一个 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
`
6. 创建一个文件夹来存储你的图像和注释。例如,这可以是 ~/nn/animals/dataset。每个图像都需要一个相应的 .txt 文件,它描述了该图像的注释。.txt 注释文件的格式非常具体。你不能手动创建这些文件,因为每个注释都需要包含注释的精确坐标。请参阅 DarkMark 或其他类似软件来注释你的图像。YOLO 注释格式在 Darknet/YOLO 常见问题解答中进行了描述。
7. 创建 .data 文件中命名的“train”和“valid”文本文件。这两个文本文件需要分别列出 Darknet 必须用于训练和验证(在计算 mAP% 时)的所有图像。每行一个图像。路径和文件名可以是相对的或绝对的。
8. 使用文本编辑器修改你的 .cfg 文件。
- 确保 batch=64。
- 注意 subdivisions。根据网络维度和 GPU 上可用的内存量,你可能需要增加 subdivisions。最佳值为 1,所以先从它开始。如果 1 不适合你,请参阅 Darknet/YOLO 常见问题解答。
- 注意 maxbatches=...。开始时,一个好的值是类别的数量乘以 2000。对于这个例子,我们有 4 个动物,所以 4 * 2000 = 8000。这意味着我们将使用 maxbatches=8000。
- 注意 steps=...。这应该设置为 maxbatches 的 80% 和 90%。对于这个例子,由于 maxbatches 设置为 8000,所以我们将使用 steps=6400,7200。
- 注意 width=... 和 height=...。这些是网络维度。Darknet/YOLO 常见问题解答解释了如何计算要使用的最佳尺寸。
- 在所有 classes=... 行中查找并使用你的 .names 文件中的类别数量来修改它。对于这个例子,我们将使用 classes=4。
- 在每个 [yolo] 部分之前的 [convolutional] 部分中查找所有 filters=... 行。要使用的值是 (类别数量 + 5) 3。这意味着对于这个例子,(4 + 5) 3 = 27。因此,我们在适当的行上使用 filters=27。
9. 开始训练!运行以下命令:
`bash
cd ~/nn/animals/
darknet detector -map -dont_show train animals.data animals.cfg
`
请耐心等待。最佳权重将保存为 animals_best.weights。可以通过查看 chart.png 文件来观察训练的进度。请参阅 Darknet/YOLO 常见问题解答,了解你可能想要在训练新网络时使用的其他参数。
如果你想在训练期间看到更多详细信息,请添加 --verbose 参数。例如:
`bash
darknet detector -map -dont_show --verbose train animals.data animals.cfg
`
其他工具和链接
要管理你的 Darknet/YOLO 项目、注释图像、验证你的注释并生成与 Darknet 一起训练所需的必要文件,请参阅 DarkMark。
要获得 Darknet 的强大替代 CLI,使用图像平铺、视频中的对象跟踪或强大的 C++ API(可以轻松用于商业应用程序),请参阅 DarkHelp。
请参阅 Darknet/YOLO 常见问题解答,看看它是否可以帮助你解答问题。
请参阅 Stéphane 的 YouTube 频道上的许多教程和示例视频。
如果你有支持问题或想与其他 Darknet/YOLO 用户聊天,请加入 Darknet/YOLO Discord 服务器。
路线图
最后更新时间:2024-10-30
已完成
在训练期间将 qsort() 替换为 std::sort()(一些其他模糊的替换仍然存在)
删除 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 多张图像
在源代码外部构建
拥有更好的版本号输出
与训练相关的性能优化(正在进行的任务)
与推理相关的性能优化(正在进行的任务)
尽可能使用传值引用
清理 .hpp 文件
重写 darknet.h
不要将 cv::Mat 转换为 void*,而是将其用作正确的 C++ 对象
修复或保持内部图像结构的使用方式一致
修复 ARM 架构 Jetson 设备的构建
- 原始的 Jetson 设备不太可能被修复,因为它们不再受 NVIDIA 支持(没有 C++17 编译器)
- 新的 Jetson Orin 设备正在运行
修复 V3 中的 Python API
- 需要更好的 Python 支持(是否有 Python 开发人员愿意帮助解决这个问题?)
短期目标
将 printf() 替换为 std::cout(正在进行中)
查看旧的 zed 摄像头支持
更好的和更一致的命令行解析(正在进行中)
中期目标
删除所有 char* 代码,并替换为 std::string
不要隐藏警告并清理编译器警告(正在进行中)
更好地使用 cv::Mat 代替 C 中的自定义图像结构(正在进行中)
用 std::vector 或 std::list 替换旧的列表功能
修复对单通道灰度图像的支持
添加对 N 通道图像的支持,其中 N > 3(例如,带有额外深度或热通道的图像)
持续进行代码清理(正在进行中)
长期目标
修复 CUDA/CUDNN 与所有 GPU 相关的问题
重写 CUDA+cuDNN 代码
考虑添加对非 NVIDIA GPU 的支持
旋转的边界框,或某种形式的“角度”支持
关键点/骨架
热图(正在进行中)
分割