Darknet YoloV3学习笔记

一、当前配置

Win10 专业版 x64位、vs2017 、Opencv4.0、 Cuda10.0、cuDNN7.4.1

二、环境配置流程

darknet是一个用c和cuda编写的开源神经网络框架,可以用它来训练或是推理。

yolo是一种对象检测模型,对象检测就是在一张图像中找出若干对象,比如一只猫或者一只狗,并指出他们在图像中的具体位置。将darknet与yolo结合,对图像进行识别,准确率有了很大的提高。

  1. 安装vs2017

  2. 安装opencv

    添加opencv\build\x64\vc14\bin路径到环境变量path中

  3. 安装cuda

    1. 下载地址:https://developer.nvidia.com/cuda-toolkit-archive
      环境配置:

    CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0
    CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
    CUDA_BIN_PATH = %CUDA_PATH%\bin
    CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
    CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64

    注意:CUDA _PATH与CUDA _PATH_V10_0是CUDA安装时自动添加的;
    然后将下列变量添加到path中

    %CUDA_LIB_PATH%
    %CUDA_BIN_PAHT%
    %CUDA_SDK_BIN_PAHT%
    %CUDA_SDK_LIB_PATH%

  4. 安装cuDnn

    1. 下载地址:https://developer.nvidia.com/rdp/cudnn-archive

    解压完后就可以将里面bin、include、lib文件夹中的内容分别拷入Cuda的安装目录下

  5. 配置darknet

    修改工程文件后,添加include等配置项,才能编译成功。
    将…\opencv\build\x64\vc14\bin下的opencv_world400.dll 和opencv_ffmpeg400_64.dll 复制到 …\darknet-master\build\darknet\x64 目录下。

三、darknet用法

test表示检测,train表示训练,valid表示验证,recall表示测试其召回率,demo为调用摄像头的实时检测

  • 检测
    darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
  • 训练
    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 如果是在原来基础上继续训练的话,把权重文件换成原来的那个即可
  • 测试
    darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_100.weights

四、使用darknet训练yolov3的模型

官方说明

  1. 在darknet-master\build\darknet\x64 新建yolo-obj.cfg文件(可以直接复制yolov3.cfg,然后重命名为yolo-obj.cfg)

  2. 将batch 改成64 :batch=64,如果内存溢出 改小点并且将random改成0关闭多尺度训练;
    将subdivisions 改成8 :subdivisions=8;
    将每个yolo下(共有3处)的classes改成你自己的类的数量 :classes = 1(我的是1类);

    将每个yolo上面第一个convolutional下的filters改成你自己的大小,计算方法是: filters=(classes + 5)x3 ,由于我的是1类,所以我的filters=18;
    修改max_batches和steps;
    注:其中batch表示batchsize,而subdivisions是为了解决想要大batchsize而显存又不够的情况,每次代码只读取batchsize/subdivisions 个图像,如图中设置为64/16=4,但是会将16次的结果也就是64张图的结果,作为一个batch来统一处理(调用的时候再将testing部分解除注释,并将train部分注释)

  3. 在build\darknet\x64\data\下新建obj.names文件,里面写入你的类名,每个类名占一行。

  4. 在build\darknet\x64\data\下新建obj.data文件 类别改成自己的数量,其他不变

classes=1
train = data/train.txt
valid = data/test.txt
names = data/obj.names
backup = backup/
  1. 将所有样本图片和txt标签 放到:build\darknet\x64\data\obj\下

  2. 在build\darknet\x64\data\下新建train.txt,内容为要训练的图片,每行一个。

  3. 将darknet的预训练权重放入build\darknet\x64 文件:darknet53.conv.74

  4. 修改网络配置文件Makefile(在\darknet-master路径下) 开启了哪个 哪个就设置为1 没开就设置为0

  5. cd进入darknet-master\build\darknet\x64路径,然后输入:darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 开始训练。 每1000次迭代会在build\darknet\x64\backup\ 目录下生成一次权重文件

  6. darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_last.weights(最后的权重改为你自己的权重)。终端会提醒你输入图片路径,然后你输入测试图片的绝对路径即可看到效果。

  7. darknet.exe detector train data/obj.data yolo-obj.cfg xxx…weights xxx.weights作为预权重文件训练,因为包含所有层,相当于恢复快照训练,会从已经保存的迭代次数往下训练。如果cfg中迭代次数没改,所以不会继续训练,直接保存结束。

  8. 监测视频中的目标,并且输出到mp4文件。

    darknet detector demo data/obj.data yolov3-tiny-obj.cfg yolov3-tiny-obj_10000.weights ./Video_20190523113300603.avi -out_filename test_result.mp4

你可能感兴趣的:(CV,yolov3)