linux下darknet深度学习框架上手
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,train
truck,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=0 CUDNN=0 OPENCV=0 OPENMP=0 DEBUG=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 Makefile GPU=0 CUDNN=0 OPENCV=1 OPENMP=1 DEBUG=0
如上所示,打开opencv和openmp选项,然后wq保存退出。然后执行:
make
程序将在当前目录下生成darknet文件.
下载官方训练的权重:到darknet当前目录:
$ wget https://pjreddie.com/media/files/yolov3.weights
3. 检测图片
使用官网训练的权重进行检测:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights ./data/timg.jpeg
注:该检测照片是本人从网上下载的一张照片。
不打开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用于打开图片和视频,对检测的效率无提升作用。