• Win10中用yolov3训练自己的数据集全过程(VS、CUDA、CUDNN、OpenCV配置,训练和测试)


    在Windows系统的Linux系统中用yolo训练自己的数据集的配置差异很大,今天总结在win10中配置yolo并进行训练和测试的全过程。

    提纲:

    1.下载适用于Windows的darknet

    2.安装VS和CUDA、CUDNN、OpenCV

      1)安装VS2017

      2)安装OpenCV

      3)VS配置OpenCV

      4)安装CUDA10.0和CUDNN7.5

      5)VS配置CUDA

    3. 编译darknet

    4.训练自己的数据集

    5.开始训练

    6.测试

    1.下载适用于Windows的darknet

    git clone https://github.com/AlexeyAB/darknet

    这个适用于Windows和Linux

    而前面博客中的:https://github.com/pjreddie/darknet

    是只适用于Linux的。

    2.安装VS和CUDA、CUDNN、OpenCV

    1)安装VS2017

           可以在官网找:vs2017:https://visualstudio.microsoft.com/zh-hans/downloads/

           我是在学校的软件中心找的安装包。

    2)安装OpenCV

    opencv-3.4.1-vc14_vc15.exe,vc15表示VS2017(vc10表示VS2010,vc11表示VS2012,vc12表示VS2013,vc14表示VS2015),其他opencv的版本也可以的。

      https://opencv.org/releases.html

      直接双击安装,安装好之后要添加环境变量。选择控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量,找到Path,编辑Path变量,在变量值中添加路径“D:opencv-3.4.1opencvuildx64vc15in”其中D:opencv-3.4.1opencv是opencv的安装路径。

    3)VS配置OpenCV

    VS2017中新建项目

     把配置改成release和x64,现在的电脑应该大部分都是64位的。如果是32位,选x86

    左菜单栏选择视图—>其它窗口—>属性管理器,点击项目名字左边的小三角形——debug|x64,如果是32位系统,选Win32。双击 Microsoft.Cpp.x64.user弹出属性页

    VC++ 目录—>包含目录—>编辑,添加以下三项(对于自己的安装路径)
    D:opencv-3.4.1opencvuildincludeopencv
    D:opencv-3.4.1opencvuildinclude
    D:opencv-3.4.1opencvuildincludeopencv2

    在库目录中添加:

    D:opencv-3.4.1opencvuildx64vc15lib

     然后选择连接器—>输入—>附加依赖项,复制以下两个:opencv_world341d.lib表示debug,opencv_world341.lib表示release。也可以只添加opencv_world341d.lib,因为前面我们选择的debug|x64,我这里两个都放进去了。D:opencv-3.4.1opencvuildx64vc15lib(路径根据自己的)中确认一下这两个文件有没有。

    opencv_world341d.lib
    opencv_world341.lib

    最后点击右下角的应用,再点确认就会生效!

    4)安装CUDA10.0和CUDNN7.5

     CUDA下载地址:https://developer.nvidia.com/cuda-downloads

    默认安装就行,记住安装的位置,安装完成后要配置环境变量:控制面板->系统和安全->系统->高级系统设置->环境变量->系统变量,找到Path,编辑Path变量,在变量值中添加路径:

     

     验证是否安装成功:

    cmd下输入:

    nvcc -V

    有如下信息表示安装成功

     验证环境变量:

    CUDNN下载地址:https://developer.nvidia.com/rdp/cudnn-download,要注册账号才能下载。

    (由于我的账号现在不记得密码了,就不放截图了~~)

    将下载下来的包解压缩后应该是三个文件夹,对应名称copy到CUDA的安装目录下的对应文件夹。最后把C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0libx64添加到环境变量中。

    5)VS配置CUDA

     这部分我参考的这篇博客:https://blog.csdn.net/HaleyDong/article/details/86093520

     3. 编译darknet

    按照官网的步骤进行编译:

    有几点要注意:

      .darknetuilddarknet修改darknet.vcxproj文件,由于darknet.vcxproj 中使用的是CUDA 9.1,所以要将所有CUDA 9.1修改为自己对应的CUDA版本。

      用VS2017打开darknet.sln,因为这个是VS2015版本的,所以打开后需要进行重定向,在项目上右键-重定向项目,然后设置 x64 and Release模式,再编译:生成-生成darknet。成功后会在. darknetuilddarknetx64中生成darknet.exe,完成编译。

      到opencv的安装目录下找到两个文件:D:opencv-3.4.1opencvuildx64vc15in下复制opencv_world341.dll和opencv_ffmpeg341_64.dll到.darknetuilddarknetx64darknet.exe所在目录下。

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

    4.训练自己的数据集

    1)下载http://pjreddie.com/media/files/darknet53.conv.74预训练权重文件到. darknetuilddarknetx64

    2)从. darknetuilddarknetx64cfg中复制yolo3.cfg到. darknetuilddarknetx64并命名为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%

    从. darknetcfg中复制voc.names到. darknetuilddarknetx64data中,命名为obj.names,修改,每一行是一个类别名。复制voc.data到. darknetuilddarknetx64data中,命名为obj.data,根据自己的路径修改里面的内容。

    3)将所有训练图片和对应的txt文件一起放在. darknetuilddarknetx64dataobj中,测试图片放在. darknetuilddarknetx64data est中,生成train.txt和test.txt(路径在obj和test):

    import os
    
    # 遍历指定目录,目录下的所有文件
    def eachFile(filepath):
        pathDir =  os.listdir(filepath)
        for allDir in pathDir:
            if filetype in allDir:
                child = os.path.join('%s%s' % (filepath, allDir))
                #print(child.decode('gbk')) # .decode('gbk')是解决中文显示乱码问题
                #print(child)
                fopen.write(child+'
    ')
        fopen.close()
    if __name__ == '__main__':
        filePath = "路径\train.txt"#这里替换成你的路径,test.txt对应改路径
        filePathC = "路径\darknet\build\darknet\x64\data\obj\"#这里替换成你的路径,训练或测试图片的路径
        filetype ='.jpeg'#图片后缀
        fopen = open(filePath, 'a')
        eachFile(filePathC)

    在. darknetuilddarknetx64中新建backup文件夹,存放训练的权重文件,新建log文件夹存放训练过程的数据。

    4)修改保存权重文件的迭代间隔,在. darknetsrcdetector.c的第271行左右修改。

    5.开始训练

    打开cmd,cd到darknetuilddarknetx64中,执行:

    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74

    若不想显示average loss曲线,执行:

    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show

    若要保存log日志,执行:

    darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74  >> log/train_yolov3.log

    现在就开始训练啦!!

    中断训练后再次训练时将上述命令的权重文件修改成backup/权重文件名。

    若遇到cuda error:out of memory错误,调整batch_size和subdivisions,batch_size改小,分批数subdivisions可以设置成等于batch_size。

    6.测试

     命令行测试方法:在. darknetuilddarknetx64下游很多.cmd文件,里面就是一些命令,可以打开查看,选择对应的一些命令进行测试!

    我们还可以连接摄像头(USB摄像头)进行实时检测:

    darknet.exe detector demo cfg/coco.data yolov3.cfg yolov3.weights

     当然,大多数时候我们都需要用脚本来测试,才能达到目的,这就涉及到yolo的封装,另外一篇博文里会详细讲解!

  • 相关阅读:
    python之mysqldb模块安装
    消失的那3个月__怎么看代码的小结
    四年测试经验总结
    python学习笔记系列----(八)python常用的标准库
    业务逻辑中的测试总结(二)----业务与数据库交互需求的测试分解
    python学习笔记系列----(七)类
    【QUESTION】
    python学习笔记系列----(六)错误和异常
    python学习笔记系列----(五)输入和输出
    Android6.0.1 移植:显示系统(一)--测试framebuffer
  • 原文地址:https://www.cnblogs.com/taotingz/p/11319410.html
Copyright © 2020-2023  润新知