Yolov3在windows下的训练

一:搭建环境

        一:Opencv安装

  • 下载3.4.0版本:https://zh.osdn.net/projects/sfnet_opencvlibrary/releases/
  • 接着配置opencv环境变量:
    • 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量--->path--->编辑
    • 将OpenCV安装目录的bin目录添加进去
    • 二、显卡驱动、CUDA(版本 >= 7.5)、CUDNN

    • 三、下载darknet

      • 安装VS
        • 步骤1:打开 darknet-master\build\darknet\darknet.vcxproj用记事本修改

          • 修改CUDA 后面的版本,原来写的是10.0,改成自己的版本就好
        • 步骤2:如果要使用GPU的话,用VS打开同目录下的darknet.exe,在项目上右键选择”重定向项目“,修改如下:

          • 注意的是一定要选择”无升级“。如果不甚选择了升级的话,下一次再次选择”重定向项目“就没这个选项了,这个时候项目右键选择”属性“,在配置属性->常规->平台工具集处选择Visual Studio 2015(v140)

        • 步骤3:将…\opencv\build\x64\vc14\bin下的opencv_world340.dll 和opencv_ffmpeg340_64.dll 复制到 \darknet-master\build\darknet\x64 目录下
        • 步骤4:将将 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\extras\visual_studio_integration\MSBuildExtensions 下的四个文件复制到VS的目录下:

        • 步骤5:
          • 包含目录:在darknet项目上点击鼠标右键->属性,弹出如下界面:然后VC++目录-->包含目录-->编辑
          • 添加的目录:

            • ...\opencv\build\include(...代表opencv的安装路径,下文同理)
            • ...\opencv\build\include\opencv2
            • ...\opencv\build\include\opencv
        • 步骤6:库目录:方法与包含目录类似,添加的目录为:...\opencv\build\x64\vc14\lib
        • 步骤7:链接器:添加目录...\opencv\build\x64\vc14\lib下库的名字:opencv_world340 .lib

        • 步骤8:
          • 在...\darknet-master\build\darknet\x64目录下,然后将..\opencv\build\x64\vc14\bin下的opencv_world340.dll 和opencv_ffmpeg340_64.dll 复制到 darknet.exe的同级别目录下。

        • 步骤9:右键项目,生成,在:\darknet-master\build\darknet\x64下,成功后会生成一个darknet.exe

        • 步骤10:下权重模型yolov3.weights文件
          • 在.\darknet\build\darknet\build\darknet\x64下,打开该目录,双击darknet_yolo_v3.cmd会出现那张狗狗的照片及检测结果,说明编译成功了
          • 在\darknet-master\build\darknet\x64下生成了一个darknet.exe,这东西就和Ubuntu下通过make生成的darknet可执行文件一样的啦。在该目录下测试一下来一个快捷键,shift按住,然后鼠标右键,选择”在此处打开powershell 窗口“,虽然可能打开出来有点丑,但是能用的。输入:.\darknet.exe detect .\cfg\yolov3.cfg .\yolov3.weights .\data\dog.jpg

:训练自己的数据集

  • 1:数据集构成
    • 先标记,生成txt文件。标记完成构建以下目录:

    • 把所有的样本图片和对应的txt文件放到:darknet-master\build\darknet\x64\data\obj\下面,一张图对应一个txt。(新建obj文件夹,复制训练的图片和生成的txt文件到darknet\x64\data\obj下面)

    • 在darknet-master\build\darknet\x64\data\下新建train.txt。将所有训练图片和对应的txt文件一起放在. \darknet\build\darknet\x64\data\obj中,测试图片放在. \darknet\build\darknet\x64\data\test中,生成train.txt和test.txt(路径在obj和test):
      • 在darknet-master\build\darknet\x64\data目录下新建train.py文件和train,txt文件,路径改为绝对路径。把训练图片的路径写在文件里面,每行一个路径,如图

    • 在. \darknet\build\darknet\x64中新建backup文件夹,存放训练的权重文件,新建log文件夹存放训练过程的数据。
  • 步骤1:下载http://pjreddie.com/media/files/darknet53.conv.74预训练权重文件到. \darknet\build\darknet\x64
  • 步骤2:从.\ darknet\build\darknet\x64\cfg中复制yolo3.cfg到.\ darknet\build\darknet\x64并命名为yolo-obj.cfg(名字自己随意)。修改每一个yolo层上面一层的filters和yolo层的classes,classes是类别数,filters = (classes+5)*3。改成train模式,可以修改batch_size和subdivisions。max_batches修改为classes*2000,这个也可以自己定。steps=max_batches*80%,max_batches*90%:查找每个yolo下(共有3处)的classes改成你自己的类的数量 :classes = N,查找每个yolo上面第一个convolutional下的filters(如图)改成你自己的大小,计算方法是: filters=(classes + 5)x3 ,由于我的是4类,所以我的filters=27. (这个也是只有3处)

    • batch 改成64 :batch=64
    • subdivisions 改成8 :subdivisions=8
    • 训练的时候如果出现内存溢出错误(Out of memory),可以,将batch改小些(64,32,16,8),将random改成0关闭多尺度训练。
    • 若遇到cuda error:out of memory错误,调整batch_size和subdivisions,batch_size改小,分批数subdivisions可以设置成等于batch_size。每批训练的个数=batch/subvisions,根据GPU修改,显存不够值就大一些
  • 步骤3:从. \darknet\cfg中复制voc.names到. \darknet\build\darknet\x64\data中,命名为obj.names,修改,每一行是一个类别名。

  • 步骤4:复制voc.data到. \darknet\build\darknet\x64\data中,命名为obj.data,根据自己的路径修改里面的内容。

  • 步骤5:修改Makefile,在\darknet-master路径下

  • 步骤6:训练。下载复制darknet53.conv.74文件到darknet-master\build\darknet\x64目录下。打开win10终端,cd进入darknet-master\build\darknet\x64路径,然后输入:./darknet.exe detector train data/hat.data yolov3-hat.cfg darknet53.conv.74 开始训练。

    • 训练过程中输出的参数的意义
      • Avg IOU:预测出的bbox和实际标注的bbox的交集除以它们的并集,这个值越大说明预测的效果越好。
      • Avg Recall:平均召回率,检测出的物体个数除以标注的所有物体个数。
      • count:前面写的大写的Count也是这个参数,一般都是写的小写。这个参数表示标注的所有物体的个数,例如:如果count=6,recall=0.66667,就表示一共有6个物体(可能包含不同类别,这里不考虑类别)。如果预测出4个,那么recall=4/6=0.66667。
      • train loss和Avg train loss这两个参数应该随着iteration增加而降低,如果loss增大到几百就说明是发散了,如果loss在一段时间内不变,就需要降低learning_rate和改变batch来加强学习效果,但是也有可能是训练已经充分。
  • 测试:./darknet.exe detector test data/hat.data yolov3-hat.cfg backup/yolov3-hat_10000.weights
  • 摄像头测试:./darknet.exe detector demo data/hat.data yolov3-hat.cfg backup/yolov3-hat_10000.weights

注意事项 :

  • 报错1:找不到opencv_world340.dll。到opencv的安装目录下找到两个文件:D:\opencv-3.4.1\opencv\build\x64\vc15\bin下复制opencv_world340.dll和opencv_ffmpeg340_64.dll到.\darknet\build\darknet\x64\darknet.exe所在目录下。

  • 报错2:如果CUDA不是10.0版本的话,要把compute_75,sm_75移除掉。那就试试吧再次打开属性->配置属性->CUDA C/C++ ->Device->Code Generation,删掉compute_75,sm_75

  • 报错3:没有下载yolov3.weights文件。下载预训练权重文件:https://pjreddie.com/media/files/yolov3.weights,下载后放在.\darknet\build\darknet\build\darknet\x64下,打开该目录,双击darknet_yolo_v3.cmd会出现那张狗狗的照片及检测结果,说明编译成功了

    • 成功

  • 报错4: .\darknet\build\darknet修改darknet.vcxproj文件,由于darknet.vcxproj 中使用的是CUDA 9.1,所以要将所有CUDA 9.1修改为自己对应的CUDA版本。
  • 报错:the windows sdk version 10.0 was not found install the required version of …
    • 下载了最新的Window SDK,安装后把 配置属性->常规->目标平台版本改成安装的版本后,不报错了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值