#neural-network #deep-learning #machine-learning #yolo

darknet

AlexeyAB 的 Darknet 的 Rust 封装,Darknet 是一个用 C 和 CUDA 编写的开源神经网络框架

13 个版本

0.4.0 2023年5月2日
0.3.5 2022年12月17日
0.3.4 2022年5月7日
0.3.3 2021年10月25日
0.1.4 2020年3月31日

机器学习 类别中排名 204

Download history 23/week @ 2024-03-12 1/week @ 2024-03-26 18/week @ 2024-04-02 21/week @ 2024-04-23 404/week @ 2024-04-30 10/week @ 2024-05-07 13/week @ 2024-05-14

每月下载量 110

MIT 许可证 MIT

250KB
983

darknet-rust: AlexeyAB 的 Darknet 的 Rust 绑定

Crates.io

该软件包是 AlexeyAB 的 Darknet 的 Rust 封装。

它提供了以下功能

  • 训练和推理能力。
  • 从上游加载配置文件和模型权重而不做修改。
  • C API 的安全类型封装。包括网络、检测和层类型。

最低 rustc 版本:1.43.0

0.4 版本变更

  • 更新 image 到 0.24

示例

tiny_yolov3_inference 示例自动下载 YOLOv3 tiny 权重,并在 output 目录中生成推理结果。

cargo run --release --example tiny_yolov3_inference

run_inference 示例是一个工具程序,您可以在图像文件上测试模型配置和权重的组合。例如,您可以测试 YOLOv4 模式。

cargo run --release --example run_inference -- \
    --label-file darknet/data/coco.names \
    --model-cfg darknet/cfg/yolov4.cfg \
    --weights yolov4.weights \
    darknet/data/*.jpg

阅读 examples/ 中的示例代码以了解实际用法。更多模型配置和权重可以在这里找到:(https://pjreddie.com/darknet/yolo/)。

使用方法

API 文档

如果您正在使用 0.1 版本,建议迁移到 0.3 或更高版本,因为已修复了几个关键错误和内存泄漏。

构建

术语定义

darknet-sys, darknet = Rust 封装

libdarknet = C/C++ Darknet 实现

默认情况下,Darknet 将静态编译和链接 libdarknet。您可以通过控制功能标志来更改此行为。

在运行测试之前

gitsubmodule init && gitsubmodule update --recursive

Cargo 功能

  • enable-cuda: 启用 CUDA(期望 CUDA 10.x 和 cuDNN 7.x)。
  • enable-cudnn: 启用 cuDNN
  • enable-opencv: 启用 OpenCV。
  • enable-openmp: 在 darknet 中启用 OpenMP。用于在 CPU 上运行时的并行化。默认启用。
  • runtime:指向libdarknet动态库的链接。例如,Linux上的libdark.so
  • dylib:构建动态库而不是静态库。
  • buildtime-bindgen:从libdarknet头文件生成绑定。

方法1:从源代码下载和构建(默认)

[dependencies]
darknet = "0.4"

您可以选择启用CUDA和OpenCV功能。请阅读使用CUDA构建获取更多信息。

[dependencies]
darknet = {version = "0.4", features = ["enable-cuda", "enable-opencv"] }

方法2:使用自定义源代码构建

如果您想使用自定义的libdarknet源代码,请将环境变量DARKNET_SRC指向您的源路径。它应该包含CMakeLists.txt

export DARKNET_SRC=/path/to/your/darknet/repo

使用runtime功能,darknet-sys将不会编译libdarknet源代码,而是动态链接到libdarknet。如果您正在使用Linux,请确保系统已安装libdark.so

[dependencies]
darknet = {version = "0.4", features = ["runtime"] }

重新生成绑定

使用buildtime-bindgen功能,darknet-sys将重新从头文件生成绑定。只有在darknet更新或修改时才需要此选项。

[dependencies]
darknet = {version = "0.4", features = ["buildtime-bindgen"] }

如果您想使用(可能已修改的)头文件,请将环境变量DARKNET_INCLUDE_PATH指向您的头文件目录。

使用CUDA构建

请确认已安装CUDA 10.x和cuDNN 7.x。

Darknet读取环境变量CUDA_PATH(如果没有设置,默认为/opt/cuda)并假设可以在${CUDA_PATH}/lib64中找到cuda库。

export CUDA_PATH=/usr/local/cuda-10.1
[dependencies]
darknet = {version = "0.4", features = ["enable-cuda", "enable-opencv"] }

您还可以设置CUDA_ARCHITECTURES,该值传递给libdarknet的cmake。默认为Auto,它会根据构建期间系统中的显卡自动检测GPU架构。

许可

该软件包采用MIT许可。

致谢

向所有贡献者表示衷心的感谢!

依赖项

~19MB
~223K SLoC