[*_*/]Darknet && Mobilnet

Darknet

是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式。

优点:

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

darknet源码如图:

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

Darknet框架安装

1.点开Makefile,将需要的选项设置为1,如图,使用GPU和CUDNN

在这里插入图片描述

2.打开终端,进入到darknet文件夹根目录,输入make,开始编译

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

检测

运行如下代码

./darknet detector test data/detect.data data/yolov3.cfg data/yolov3.weight

分类

./darknet classifier predict classify.data classify.cfg classify.weights

在Darknet框架下YOLOv2便使用即是Darknet-19 的backbone网络

darknet-19

darknet-53

YOLOv3使用的是darknet-53为backbone



MobilNet

论文:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

mobilnet是专注于移动端或者嵌入式设备中的轻量级CNN网络(backbone网络之一)。该论文最大的创新点是,提出了深度可分离卷积(depthwise separable convolution),即是分组卷积在分组数和卷积核数相等的特例情况

Mobilnet v1

 mobilnet之所以是轻量化的能够快速推理是因为卷积层的改进,如图:

 深度网络最大的应用就是卷积层;对于特征的提取方式。但卷积计算是最占用时间的,所以在卷基层上的轻量化是将MobileNet称为轻量级网络的根本原因

多种backbone网络实现:https://github.com/xiaohu2015/DeepLearning_tutorials/

Reference

[1] https://zhuanlan.zhihu.com/p/159262928

[2] https://github.com/xiaohu2015/DeepLearning_tutorials/

[3] https://www.zhihu.com/question/397371461

[4] https://www.zhihu.com/question/334208050

原文地址:https://www.cnblogs.com/nanmi/p/13628360.html