深度学习框架-Darknet

Darknet——一个源码为C的神经网络框架

今天路同学介绍一个相对小众的深度学习框架——Darknet。

与流行的Tensorflow以及Caffe框架相比,Darknet框架在某些方面有着自己独特的优势。
GitHub源代码https://github.com/pjreddie/darknet

官网上阅读完成更多事情https://pjreddie.com/darknet/

关于Darknet深度学习框架

       Darknet深度学习框架是由Joseph Redmon提出的一个用C和CUDA编写的开源神经网络框架。它安装速度快,易于安装,并支持CPU和GPU计算。Darknet是一个比较小众的深度学习框架,没有社区,主要靠作者团队维护,所以推广较弱,用的人不多。而且由于维护人员有限,功能也不如tensorflow等框架那么强大,但是该框架还是有一些独有的优点:

  • 易于安装:在makefile里面选择自己需要的附加项(cuda,cudnn,opencv等)直接make即可,几分钟完成安装;
  • 没有任何依赖项:整个框架都用C语言进行编写,可以不依赖任何库,连opencv作者都编写了可以对其进行替代的函数;
  • 结构明晰,源代码查看、修改方便:其框架的基础文件都在src文件夹,而定义的一些检测、分类函数则在example文件夹,可根据需要直接对源代码进行查看和修改;
  • 友好python接口:虽然darknet使用c语言进行编写,但是也提供了python的接口,通过python函数,能够使用python直接对训练好的.weight格式的模型进行调用;
  • 易于移植:该框架部署到机器本地十分简单,且可以根据机器情况,使用cpu和gpu,特别是检测识别任务的本地端部署,darknet会显得异常方便。

代码框架

  • cfg文件夹内是一些模型的架构,每个cfg文件类似与caffe的prototxt文件,通过该文件定义的整个模型的架构
  • data文件夹内放置了一些label文件,如coco9k的类别名等,和一些样例图(该文件夹主要为演示用,或者是直接训练coco等对应数据集时有用,如果要用自己的数据自行训练,该文件夹内的东西都不是我们需要的)
  • src文件夹内全是最底层的框架定义文件,所有层的定义等最基本的函数全部在该文件夹内,可以理解为该文件夹就是框架的源码;
  • examples文件夹是更为高层的一些函数,如检测函数,识别函数等,这些函数直接调用了底层的函数,我们经常使用的就是example中的函数;
  • include文件夹,顾名思义,存放头文件的地方;
  • python文件夹里是使用python对模型的调用方法,基本都在darknet.py中。当然,要实现python的调用,还需要用到darknet的动态库libdarknet.so,这个动态库稍后再介绍;
  • scripts文件夹中是一些脚本,如下载coco数据集,将voc格式的数据集转换为训练所需格式的脚本等
  • 除了license文件,剩下的就是Makefile文件,如下图,在问价开头有一些选项,把你需要使用的选项设为1即可

安装(linux环境下)

  1. 点开Makefile,将需要的选项设置为1,如图上图,使用GPU和CUDNN;
  2. 打开终端,进入到darknet文件夹根目录,输入make,开始编译;
  3. 几分钟后编译完成,文件夹中会多出一些文件夹和文件,obj文件中存放了编译过程中的.o文件,其他的几个空文件夹也不需要太大关注,这里最重要的就是三个:名为darknet的exe文件,名为libdarknet.a的静态链接库和名为libdarknet.so的动态链接库。如果直接在本地进行模型调用尝试,可以直接运行darknet这个exe文件,如果需要移植调用,则需要用到libdarknet.so这个动态链接库,这个动态链接库中只包含了src文件夹中定义的框架基础函数,没有包含examples中的高层函数,所以调用过程中需要自己去定义检测函数;

测试 

Release 

 

发布了142 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/100654916