一、环境安装
yolov5下载地址:https://github.com/ultralytics/yolov5。解压后点进去,按Shift+右键在该目录启动powershell窗口,输入命令: pip install -r requirements.txt ,系统会自动安装运行所需要的环境
二、对图片进行标注
方法一:对于少量图片可以手动标注。进入https://www.makesense.ai/
然后再点击右边就可以选择我们想要的标签了,对其他鱼的标记也是一样的步骤,标记完成后我们导出
把下载的文件解压后得到.txt文档,这就是yolo格式下我们对图片的标注了,具体每个值的具体含义下面会解释
方法二:对于980张有csv文档标记的鱼图,我们可以用python批量处理,把标记转换成我们想要的格式。作者告诉了我们如何标记图片:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
.txt文件中每一行中数据的含义分别为: 类;x中心;y中心;宽度;高度 如上面我们导出的标记
含义为:类别=0,x中心值=0.256334 ,y中心值=0.511178,宽度=0.26098 ,高度=0.204193。这些值这么小是因为它除以了图片的宽度1920或高度1088。查CSV表知我们刚才那条鱼的标记
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代表什么呢?
我们有一个.yaml文件,这个文件规定了我们的数据集和标签都存放在哪里,以及有那些类别。nc代表类别的个数,names就是我们自己定义的类别,所以在这个.yaml文件中,类别为0代表的是 ‘person’。需要注意的是,当nc=80时,我们在标记文档中的类别的值只能在0-79范围内取,否则就会报错。CSV文件中,出现了6类鱼,我在coco128.yaml的基础上进行了改动,新建了fish.yaml:
这个fish.yaml应该存放在data文件夹中:
csv_labels.py可以把CSV中的标记转化成yolo格式,在运行时要把csv文件与.py文件放在同一目录下,并创建一个空的labels文件夹,如下图。执行.py文件后,标签都会存放在labels文件夹中。
我们现在有了标记labels,fish.yaml。我们可以把要训练的图片放进images文件夹中,每个图片的名称都要与labels中文件的名称一一对应。比如 images中有一个文件是R167_Dermatolepis_inermis0001.png,那么labels中要有一个对应的文件R167_Dermatolepis_inermis0001.txt。 我把labels和images这两个文件夹都存放在fish目录下:
把fish文件夹放在根目录下:
fish.yaml中path、train、val的值也要对应更改,如下图。至于为什么val的值不是labels,我也不太明白,反正把labels放在与images同级的目录下就能正常训练了。
三、训练
方法一 :本地训练。train.py的部分参数如下:
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
这个样子就代表已经在训练了。
方法二:云GPU训练。我的机子是轻薄本,对3张图片以yolov5s的网络规模来跑300个epoch都要花4个钟这样,更别说对980张图片进行更大规模网络的训练了。于是我们可以租别人的机器,我听别人推荐智星云这平台价格挺便宜的,所以我用了这个平台的机子
租用后在控制台有登入的相关参数
我们需要下载Filezilla软件用以更好的传输文件,VNC Viewer用于远程控制主机,下载好软件后具体参数配置可以观看https://www.bilibili.com/video/BV11V411h76F?t=182
我们先把要训练的yolov5-master这个文件夹打包,软件连接上主机后通过Filezilla上传到机子。用VNC连接后,就可以在图形界面操作了
解压文件,通过cd 命令进入yolov5-master 所在路径后,执行pip install -r requirements.txt就可以搭建好训练所需环境了。
由于我们早就已经设置好了train.py中的值,接下来直接执行python train.py就可以了。
可以看到目前已经在训练了,训练的模型将保存到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,可以实现把多个图片合成一个视频,已经写了注释。运行就可以得到视频了