用自制数据集训练yolov5步骤

一、环境安装

         yolov5下载地址:https://github.com/ultralytics/yolov5解压后点进去,按Shift+右键在该目录启动powershell窗口,输入命令: pip install -r requirements.txt  ,系统会自动安装运行所需要的环境

用自制数据集训练yolov5步骤_第1张图片

 

二、对图片进行标注

方法一:对于少量图片可以手动标注。进入https://www.makesense.ai/

用自制数据集训练yolov5步骤_第2张图片用自制数据集训练yolov5步骤_第3张图片用自制数据集训练yolov5步骤_第4张图片用自制数据集训练yolov5步骤_第5张图片用自制数据集训练yolov5步骤_第6张图片

 

 

 然后再点击右边就可以选择我们想要的标签了,对其他鱼的标记也是一样的步骤,标记完成后我们导出

用自制数据集训练yolov5步骤_第7张图片用自制数据集训练yolov5步骤_第8张图片

 

把下载的文件解压后得到.txt文档,这就是yolo格式下我们对图片的标注了,具体每个值的具体含义下面会解释

用自制数据集训练yolov5步骤_第9张图片

 

方法二:对于980张有csv文档标记的鱼图,我们可以用python批量处理,把标记转换成我们想要的格式。作者告诉了我们如何标记图片:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data

用自制数据集训练yolov5步骤_第10张图片

 

.txt文件中每一行中数据的含义分别为: 类;x中心;y中心;宽度;高度    如上面我们导出的标记

用自制数据集训练yolov5步骤_第11张图片

 

含义为:类别=0,x中心值=0.256334 ,y中心值=0.511178,宽度=0.26098 ,高度=0.204193。这些值这么小是因为它除以了图片的宽度1920或高度1088。查CSV表知我们刚才那条鱼的标记

用自制数据集训练yolov5步骤_第12张图片

 

X中心值为 [Xmin+(Xmax-Xmin)/2]/1920=(Xmax+Xmin)/2/1920=943/2/1920=0.24557

Y中心值同理 (Ymax+Ymin)/2/1088=(473+647)/2/1088=0.5147

那么宽度就是 (Xmax - Xmin)/1920=(709-234)/1920=0.24739

高度(Ymax-Ymin)/1088=(647-473)/1088=0.15992

这几个值与我们手工标记导出的值相差不大。那么类别为0代表什么呢?

用自制数据集训练yolov5步骤_第13张图片

 

     我们有一个.yaml文件,这个文件规定了我们的数据集和标签都存放在哪里,以及有那些类别。nc代表类别的个数,names就是我们自己定义的类别,所以在这个.yaml文件中,类别为0代表的是 ‘person’。需要注意的是,当nc=80时,我们在标记文档中的类别的值只能在0-79范围内取,否则就会报错。CSV文件中,出现了6类鱼,我在coco128.yaml的基础上进行了改动,新建了fish.yaml:

用自制数据集训练yolov5步骤_第14张图片

 

这个fish.yaml应该存放在data文件夹中:

用自制数据集训练yolov5步骤_第15张图片

 

csv_labels.py可以把CSV中的标记转化成yolo格式,在运行时要把csv文件与.py文件放在同一目录下,并创建一个空的labels文件夹,如下图。执行.py文件后,标签都会存放在labels文件夹中。

用自制数据集训练yolov5步骤_第16张图片

 

我们现在有了标记labels,fish.yaml。我们可以把要训练的图片放进images文件夹中,每个图片的名称都要与labels中文件的名称一一对应。比如 images中有一个文件是R167_Dermatolepis_inermis0001.png,那么labels中要有一个对应的文件R167_Dermatolepis_inermis0001.txt。 我把labels和images这两个文件夹都存放在fish目录下:

用自制数据集训练yolov5步骤_第17张图片

把fish文件夹放在根目录下:

用自制数据集训练yolov5步骤_第18张图片

 

fish.yaml中path、train、val的值也要对应更改,如下图。至于为什么val的值不是labels,我也不太明白,反正把labels放在与images同级的目录下就能正常训练了。

用自制数据集训练yolov5步骤_第19张图片

 

三、训练

方法一 :本地训练。train.py的部分参数如下:

用自制数据集训练yolov5步骤_第20张图片

 

weights: 训练时初始化的权重,我们可以把default设置为空

cfg:决定神经网络规模,作者提供了yolov5s、yolov5m、yolov5l、yolov5x这几个规模的配置,分别代表小、中、大、特大,越大的规模训练需要的显存和算力越大,对应训练出来的模型识别准确度应该是越好。

data:选择我们配置的fish.yaml

其他参数的讲解可以看https://www.bilibili.com/video/BV1tf4y1t7ru?p=7     ,在12分钟处。

我们可以把train.py中的default设置成我们想要的值,这样在用命令行执行时就不用传入参数了。

在根目录打开powershell窗口,执行命令:python train.py --device cpu 

用自制数据集训练yolov5步骤_第21张图片

 

这个样子就代表已经在训练了。

方法二:云GPU训练。我的机子是轻薄本,对3张图片以yolov5s的网络规模来跑300个epoch都要花4个钟这样,更别说对980张图片进行更大规模网络的训练了。于是我们可以租别人的机器,我听别人推荐智星云这平台价格挺便宜的,所以我用了这个平台的机子

               用自制数据集训练yolov5步骤_第22张图片用自制数据集训练yolov5步骤_第23张图片

 

 

 

租用后在控制台有登入的相关参数

用自制数据集训练yolov5步骤_第24张图片

 

我们需要下载Filezilla软件用以更好的传输文件,VNC Viewer用于远程控制主机,下载好软件后具体参数配置可以观看https://www.bilibili.com/video/BV11V411h76F?t=182

我们先把要训练的yolov5-master这个文件夹打包,软件连接上主机后通过Filezilla上传到机子。用VNC连接后,就可以在图形界面操作了

用自制数据集训练yolov5步骤_第25张图片

 

解压文件,通过cd 命令进入yolov5-master 所在路径后,执行pip install -r requirements.txt就可以搭建好训练所需环境了。

用自制数据集训练yolov5步骤_第26张图片

 

由于我们早就已经设置好了train.py中的值,接下来直接执行python train.py就可以了。

用自制数据集训练yolov5步骤_第27张图片 

可以看到目前已经在训练了,训练的模型将保存到run/train文件夹中。在另外一个命令窗口输入 nvidia-smi 可以看到显卡使用情况,注意如果显存使用为 0/11019MiB代表参数device值为cpu,要改为0。

四、目标检测

     runs/train文件夹有个best.pt,把它剪切到根目录,在根目录打开powershell,执行

python detect.py   --source  xxx    --weights best.pt  就可以进行预测了。 XXX可以是一个图片、视频、或者是一个文件夹,作者介绍如下。检测后的结果保存到runs/detect目录中

五、图片合成视频

makevideo-yhw.py,可以实现把多个图片合成一个视频,已经写了注释。运行就可以得到视频了

你可能感兴趣的:(学习笔记,python,计算机视觉,目标检测,深度学习,神经网络)