darknet是一个基于c与cuda轻量级深度学习框架,编译部署简单,移植性好,适合初学者上手。下面来介绍一下dark的安装和简单使用。1.darknet源码的下载和编译1.1 darknet介绍 Darknet深度学习框架是由Joseph Redmon提出的一个用C和CUDA编写的开源神经网络框架。它安装速度快,易于安装,并支持CPU和GPU(CUDA/cuDNN)计算。且支持opencv(可选,用于图像和视频的显示)和openmp(可选,用于支持for语句的并行处理,可以加快cpu的并行处理速度并大幅提高框架的检测效率)。1.2 YOLO算法1.2.1 算法简介 YOLO(You Only Look Once)是Joseph Redmon针对darknet框架提出的核心目标检测算法,作者在算法中把物体检测问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。 YOLO是基于深度学习的端到端的实时目标检测系统。与大部分目标检测与识别方法(比如Fast R-CNN)将目标识别任务分类目标区域预测和类别预测等多个流程不同,YOLO将目标区域预测和目标类别预测整合于单个神经网络模型中,实现在准确率较高的情况下快速目标检测与识别,更加适合现场应用环境。1.2.2 算法的优点: 1、YOLO的速度非常快。在cpu上是7秒一帧图像(开启openmp的情况下),在Titan X GPU上的速度是45 fps(frames per second),加速版的YOLO差不多是150fps。 2、YOLO是基于图像的全局信息进行预测的。这一点和基于sliding window以及region proposal等检测算法不一样。与Fast R-CNN相比,YOLO在误检测(将背景检测为物体)方面的错误率能降低一半多。 3、可以学到物体的generalizable-representations。可以理解为泛化能力强。 4、准确率高。1.2.3 算法的缺点:1、位置精确性差2、召回率低注:召回率:正确的结果有多少被你给出了1.2.4 支持person,bicycle,car,motorbike,aeroplane,bus,traintruck,boat等共80中物体的识别(见darknet/data/coco.names)。2. darknet源码编译 进入darknet官网,运行$ git clone https://github.com/pjreddie/darknet$ cd darknet$ make 可以编译出c版本的darknet,如果需要编译GPU版本、打开cudnn(cuDNN只是NVIDIA深度神经网络软件开发包中的其中一种加速库)、opencv(跨平台计算机视觉库)、openmp(for语句并行处理),可用gedit打开makefile,打开相应的项(注:opencv、cudnn需要另行安装,GPU、cudnn需要NVIDIA显卡):GPU=0CUDNN=0OPENCV=0OPENMP=0DEBUG=0 由于本人的电脑没有NVIDIA显卡,故这里只说明一下opencv的安装,先到opencv官网下载opencv2,主要当前最新的版本是opencv4,但是darknet只支持opencv2。然后解压、安装:$ unzip opencv-2.4.13.6.zip$ sudo apt-get install cmake$ udo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev $ cd opencv-2.4.13.6$ mkdir build$ cd build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..$ make -j7$ make install opencv安装成功,开始编译opencv的darknet,进入darknet目录:$ vi MakefileGPU=0CUDNN=0OPENCV=1OPENMP=1DEBUG=0 如上所示,打开opencv和openmp选项,然后wq保存退出。然后执行:make 程序将在当前目录下生成darknet文件. 下载官方训练的权重:到darknet当前目录:$ wget https://pjreddie.com/media/files/yolov3.weights3. 检测图片 使用官网训练的权重进行检测:$ ./darknet detect cfg/yolov3.cfg yolov3.weights ./data/dog.jpg 不打开OPENMP时检测一张图片消耗的时间分别为(五次): 24.889,23.650,23.705,22.262,23.095, 平均时间为: 23.520 打开OPENMP检测一张图片消耗的时间分别为(五次): 7.384,7.892,7.627,7.203,7.796 平均时间为: 7.580s 而检测的结果相同: 如此可见,使用OPENMP之后,程序的CPU并行效率提高3倍以上。opencv用于打开图片和视频,对检测的效率无提升作用。