Win10平台训练Yolo-Fastest模型全流程

一、环境准备

  1. 安装vs2015
  2. 根据显卡驱动安装相应版本的CUDA和cuDNN
  3. 安装OpenCV 4.4.0
  4. 安装CMake
  5. 安装Anaconda

以上所有安装均可轻易找到大量教程,此处不再赘述。

二、搜集样本

运行这篇博客的Python脚本,可以快速搜集目标样本集,亲测可用:

https://blog.csdn.net/qq_40774175/article/details/81273198

三、标注样本

目标检测样本需要把待检测目标在图片中的位置和大小标注出来,采用LabelImg标注Yolo样本非常方便,下面介绍使用方法。

1.用pip安装LabelImg

安装Anaconda以后,在开始菜单打开Anaconda Prompt (Anaconda3)进入base环境,运行pip命令安装LabelImg:

pip install labelImg

2.启动LabelImg

安装好LabelImg之后,在命令行输入程序名回车即可启动:

LabelImg

3.设置样本类型

在LabelImg的界面中,左边“Save”按钮下方的按钮表示样本类型,点击即可切换,将其切换为“YOLO”即可。

4.设置路径

在LabelImg的界面中,点击左侧的“Open Dir”按钮,将目录设置为事先准备好的目标图片文件夹;

再点击左侧的“Change Save Dir”按钮,指定一个输出目录,用于保存每张图片的标注信息文件。

5.开始标注

  1. 设置好“Open Dir”后,会自动加载其中的图片,将输入法切换为英文,按下快捷键“W”,然后在图像区域按下鼠标左键拖动,就会出现矩形框;

  2. 框出目标后会提示输入目标名称(只需输入一次,以后会自动填充),如果有多个目标需要标注,就继续框选,然后输入目标名字即可;

  3. 待所有目标都被标注完毕后,点击界面左侧的“save”按钮,即可保存当前图片的标注信息,到这里第一张图片的标注工作就完成了;

  4. 之后点击界面左侧的“Next Image”按钮,即可开始下一张图片的标注,然后重复第2、3步操作即可;

  5. 重复第2、3、4步,直到指定目录下的所有图片标注完毕。

四、编译Yolo-Fastest

1.下载Yolo-Fastest项目源码

github地址:https://github.com/dog-qiuqiu/Yolo-Fastest

下载后将源码解压到本地熟悉的路径下,接下来以D:\Yolo-Fastest-master为例。

2.配置Makefile

在Yolo-Fastest根目录下找到Makefile,用记事本打开,可以看到前面这几项,保持作者的默认配置即可:

GPU=1			#启用GPU加速
CUDNN=1			#启用cuDNN,支持v5-v7版本
CUDNN_HALF=0
OPENCV=1		#启用OpenCV,支持OpenCV 4.x/3.x/2.4.x

3.用CMake生成解决方案

  1. 打开CMake,将source code路径设置为D:\Yolo-Fastest-master,将目标生成路径也设置为D:\Yolo-Fastest-master
  2. 然后点击“Configure”,设置VS版本为VS2015,目标平台为x64,然后确认;
  3. 若提示没有找到OPENCV_DIR,再选择opencv.exe解压缩后的build文件夹为OPENCV_DIR的路径即可,可以添加OPENCV_DIR环境变量,也可以直接在CMake上面的配置列表中设置;
  4. 然后依次点击“Generate”和“Open Project”按钮即可打开解决方案。

如果上面的过程没有其他报错,就可以编译解决方案了。

4.编译Darknet

打开上一步生成的的解决方案后,生成整个解决方案,如果不能全部成功编译,可能是OpenCV,CUDA或者cuDNN等的安装不正确,或者版本不合适。

如果全部正常通过编译,在D:\Yolo-Fastest-master路径下会多出一个Release文件夹,将其中的darknet.dlldarknet.exe复制到D:\Yolo-Fastest-master/build/darknet/x64目录下。

5.获取Yolo-Fastest的模型文件和权重文件

D:\Yolo-Fastest-master\Yolo-Fastest目录下可以找到COCO或VOC版本的Yolo-Fastest与训练模型,任选一个即可,复制一下4个文件:

yolo-fastest.cfg
yolo-fastest.weights
yolo-fastest-xl.cfg
yolo-fastest-xl.weights

将上面复制的文件粘贴到D:\Yolo-Fastest-master\build\darknet\x64\cfg文件夹。

至此,可以用下面的批处理文件测试一下Yolo-Fastest预训练模型:

darknet detector test cfg\voc.data cfg\yolo-fastest.cfg cfg\yolo-fastest.weights data\person.jpg -i 1 -thresh 0.25 -out_filename data\person_output.jpg
pause

将上述命令保存在.txt文件中,然后改文件名后缀为.bat,将.bat文件复制到D:\Yolo-Fastest-master\build\darknet\x64文件夹,然后双击运行,如果能顺利检测,说明目前为止一切正常,已经成功编译了Yolo-Fastest。

五、在目标数据集上训练Yolo-Fastest

1.配置训练所用数据集

数据集的准备包含5个部分,图片、图片对应的标注文件、trainlist.txt和testlist.txt、yourdataset.data、yourdataset.names。

  1. 检查数据集:用LabelImg标注好的数据集包含一个标注信息文件夹,即用按钮“Change Save Dir”指定的文件夹,里面有一批与图片同名的.txt文件,记录着每张图片的标注信息,还有一个“classes.txt”文件,记录着所有目标类别;

  2. 准备trainlist.txt和testlist.txt文件:这两个文件分别记录训练集和测试集中每张图片的路径,可用如下批处理脚本获得:

    dir /b/s/p/w *.jpg > list.txt
    pause
    
    #以下为注释内容,实际使用时应删除
    将上面的命令写入一个.txt文件,更改文件名后缀为.bat,然后将.bat文件复制到图片所在文件夹,双击运行即可获得该路径下所有jpg图片的路径,并保存在list.txt文件中。
    
  3. 准备.names文件:将上一步中的“classes.txt”更名为“yoursataset.names”即可;

  4. 准备.data文件:新建一个.txt文件,更名为“yourdataset.data”,并写入以下内容:

    classes = 1
    train  = data/yourdataset/trainlist.txt
    valid  = data/yourdataset/testlist.txt
    names = data/yourdataset/yourdataset.names
    backup = backup/
    
    #以下为注释内容,实际使用时应删除
    上面的选项应根据具体情况修改,其含义如下:
    classes:表示要识别的目标的类别数目,也就是.names文件中记录的类目数量;
    train:指明trainlist.txt文件所在路径
    valid:指明testlist.txt文件所在路径
    names:指明.names文件所在路径
    backup:指定训练结果保存路径,训练好的权重将保存在这个路径下
    
  5. 整理目录结构:所有文件准备完毕后,建议以如下目录结构组织文件:

    train_set(文件夹)
    test_set(文件夹)
    yourdataset.data
    yourdataset.names
    trainlist.txt
    testlist.txt
    
    #重要说明
    1.train_set和test_set是文件夹,分别用来放置训练集和测试集,里面应存放着图片文件和相应的标注信息文件;
    2.其余4个文件就是前几步获得的文件;
    3.所有文件名可以自定义,但要保证跟.data中的设置一致;
    4.可以将上述文件和文件夹单独存放到一个文件夹中,例如yourdataset
    

至此,数据集准备完毕,笔者将上述目录结构保存在Yolo-Fastest\build\darknet\x64\data\yourdataset下,接下来将按以此为例进行说明。

2.配置模型文件yolo-fastest.cfg

打开之前复制到D:\Yolo-Fastest-master\build\darknet\x64\cfg目录下的模型结构配置文件yolo-fastest.cfg,可以看到整个模型的各项设置,需要自定义配置的主要有以下几处:

  1. 搜索“[net]”,“[net]”字段下是各种训练参数,训练时一般设置batch=64subdivisions=16,测试时一般设置batch=1subdivisions=1,其他参数可以保持默认;
  2. 搜索“[yolo]”,将所有“[yolo]”字段下的classes项设置为你的目标类别数,然后将每一个“[yolo]”字段前紧邻的一个“[convolutional]”字段中的filters项重置,计算方法为filters=(classes+5)*3

修改后保存即可。

3.开始训练Yolo-Fastest

训练的思路是,先生成预训练模型(骨干网络),然后在其基础上拿自己的数据集进行训练,完成模型的迁移学习。

  1. 生成预训练模型:在D:\Yolo-Fastest-master\build\darknet\x64目录下新建一文件夹pretrained_model,将如下命令写入一.bat文件中,复制文件到D:\Yolo-Fastest-master\build\darknet\x64下,双击运行即可生成预训练模型yolo-fastest.conv.109

    darknet partial cfg\yolo-fastest.cfg cfg\yolo-fastest.weights pretrained_model\yolo-fastest.conv.109 109
    pause
    
  2. 开始训练:将以下命令写入一.bat文件,复制文件到D:\Yolo-Fastest-master\build\darknet\x64下,双击运行即可开始训练:

    darknet detector train data\yourdataset\yourdataset.data cfg\yolo-fastest.cfg pretrained_model\yolo-fastest.conv.109 backup\
    pause
    

4.测试训练好的Yolo-Fastest模型

将以下命令写入一.bat文件,复制文件到D:\Yolo-Fastest-master\build\darknet\x64下,双击运行即可开始测试,测试时根据提示输入待检测图片的路径,即可在D:\Yolo-Fastest-master\build\darknet\x64目录下生成检测结果图片:

darknet detector test data\yourdataset\yourdataset.data cfg\yolo-fastest.cfg backup\yolo-fastest_last.weights

你可能感兴趣的:(深度学习,教程,Yolo,深度学习)