zoukankan      html  css  js  c++  java
  • [*_*/]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

  • 相关阅读:
    20道JS原理题助你面试一臂之力!
    10实用的JS实用技巧
    10实用的JS实用技巧
    比尔盖茨的30条经典语录
    比尔盖茨的30条经典语录
    成为优秀程序员应该具备的8个特质
    成为优秀程序员应该具备的8个特质
    不懂开发的人员,请不要随意说这功能很容易实现
    不懂开发的人员,请不要随意说这功能很容易实现
    15句乔布斯经典语录(中英文)
  • 原文地址:https://www.cnblogs.com/nanmi/p/13628360.html
Copyright © 2011-2022 走看看