如何在自己的项目中使用暗网?

How to use darknet in my own project?

我已经安装了 Darknet,我可以从命令行 运行 它执行各种任务,例如:

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg

这将使用 cfg/cifar_small.cfg 中指定的网络架构训练分类器 CIFAR 数据。

好的,但是如何在自己的C项目中使用Darknet呢?例如,我想从我自己的代码中调用在 darknet.h 中声明的 load_network()train_network()save_weights()network_predict()

我可以将 Darknet 用作静态库或共享库吗?我在网站上没有看到任何关于如何执行此操作的说明。

到目前为止,我唯一的方法是按照示例文件夹中示例的样式创建自己的源文件,并修改 darknet.hdarknet.cMakefile 以提供我自己是一个入口点,我可以从命令行调用类似于我上面发布的分类器示例。但这感觉不太理想,因为我想有自己的项目结构。

好的,看起来 Makefile 支持生成共享库和静态库,这些是 运行 安装时默认生成的:

git clone https://github.com/pjreddie/darknet.git
cd darknet
make

后来 libdarknet.alibdarknet.so 出现在我的暗网目录中。

所以我可以#include darknet.h在我自己的项目中,然后编译通过:

gcc -Wall -o myprog main.c -ldarknet

对于那些对细节感兴趣并使用 CMakeLists.txt 的人,这里是亮点,假设 Darkned 已经编译:

# Path to Darknet project folder.
set(DARKNET_PATH /home/<custom_path_to>/darknet)

# Give a custom name to shared library which is provided by Darkned when 
# the one compiled.
set(DARKNET_LIB_NAME libdarknet)

# Link Darknet library' include folder.
include_directories(${DARKNET_PATH}/include)

# Define Darknet library' shared library.
add_library(${DARKNET_LIB_NAME} SHARED IMPORTED)

# Set a path to Darknet library' shared library
set_property(
        TARGET ${DARKNET_LIB_NAME}
        PROPERTY IMPORTED_LOCATION 
        "${DARKNET_PATH}/libdarknet.so"
)

# Link all libraries together.
target_link_libraries(${PROJ_NAME} ${DARKNET_LIB_NAME})

下一个使用Darknet库的项目link:

DarknetApp