(请先看这篇文章:本博打开方式!!!请详读!!!请详读!!!请详读!!!_Cat-CSDN博客)
如果看完这篇博文,你的问题还是没有解决,那么请关注我的公众号,后台发消息给我吧,当天回复!
目录
C、按照原来训练的命令执行,将coco128数据集下载到本地,观察目录结构。
本文仅是介绍训练自定义数据集的通用方法,重在类比。其中的文件目录结构、文件名称等在熟悉本方法后,可自行修改(通过修改配置文件的路径),以理解为主。
一、收集数据
要想训练自己的数据集,第一步要做的事情就是拍照,将图片上传到电脑,构造自己的数据集。图片可以来源于现实生活,也可以来源于网络,只要图片中有你想要的内容,就可以将此图片作为数据集中的“一员”。值得注意的是,图片的分辨率不易太大,否则在训练时,对GPU要求较高。本文接下来的操作流程是按照实际的成功操作流程进行叙述的,请放心参考。
二、人工标记
我们需要下载labelimg工具对数据集中的每一张图片进行标记,也即贴标签。
1、下载labelimg
无法下载labelimg软件的同学,欢迎关注我的微信公众号,后台留言,一天之内必定回复。
2、进行预训练
预训练的目的是了解YOLOv5数据集的目录结构,并不是需要将官方的训练集完全训练一次。请各位同学,根据文字内容及截图示意进行操作。
A、打开界面,滑动到如下图所示位置
不知道怎么打开的,请看我上一篇文章:目标检测第5步:如何在Windows 10系统下,搭建YOLOv5(5.0)环境?保姆级,没有人比这个更详细了(更新时间2022.3.22)_liO_Oil的博客-CSDN博客_yolov5环境搭建win10
B、滑动鼠标滚轮,找到如下位置
C、按照原来训练的命令执行,将coco128数据集下载到本地,观察目录结构。
通过下载、解压、观察后发现,他的目录结构是这样的:
其中images和labels分别存放的是官方数据集中的图片和对应label的txt文档,LICENSE和README是许可文件和相关信息,都得保存下来,不可删除。接下来我们剖析这个文件的目录,我们先看images的目录结构:
再看labels的目录结构:
最后两幅图中的txt文件,即为官方数据集中记录图片中标记位置的坐标。里面存储了矩形框的坐标(左上和右下),这是已经标记好的,我们不用标记了,如果时间不是很紧迫,那就可以先训练一下试试,测试一下电脑性能。如果时间紧迫,那么就接着参考本文,尽快训练数据集。
通过这个目录结构,想必你也知道了数据集构造需要哪些文件了吧。没错,一级目录中显示的四个文件,缺一不可,详情见下图。
各位同学可以边阅读此篇文章,边根据目录结构准备相应的文件。可以先创建一个文件夹叫coco128,随后在这个文件夹里创建images和labels,2个文件夹。将上述截图中红色框内的2个文件拷贝到自己创建的coco128文件夹内,再按照上述介绍的文件目录把已经收集好的照片拷贝到对应的文件夹里。接下来,就可使用labelimg软件贴标签了!所以,接下来有关labelimg的操作务必非常重视。此步结束时,你的数据集目录应该是这样的:
3、labelimg软件基本操作
首先,需要了解软件的设定和操作,避免做无用功,同时提高效率。我曾经有1000多张图片的数据集,就因为软件操作不当,重新标记了2-3回(当然也是因为样本的扩充,需要重新标定)。在打开软件前,首先要做的就是更改预存标签。操作如下图所示:
这个文件中的标签是有顺序的,一旦确定之后就不要所以更改,避免做无用功。随后,就可以打开软件了,鼠标双击labelimg.exe
A、打开Labelimg软件
点击“View”按钮,选择“Auto Save mode”,操作如下图所示,一定得确保Auto Save mode前面有对勾。
B、点击“Open Dir”按钮
打开你的数据集照片存放的最终位置(最深层目录),目录、操作如下图所示:
C、点击“Change Save Dir”
在更改标签(就是txt文件)的存储位置之前,你可以在labels文件夹里创建一个train2017文件夹,用来存放标签对应的txt文件。目录结构是这样的:
然后,点击“Change Save Dir”按钮,选择到刚才创建的文件夹。
D、选择标签的类型为YOLO
否则,贴完标签后,将会不是txt文件格式。这一点很重要,我贴了200多张,最后发现,不是YOLO,欲哭无泪。也有相关的代码可以将VOC格式的数据转换为YOLO,大家可以从别处了解一下。
截止到目前为止,软件操作界面的上侧、左侧都已设置完毕。像放大、缩小图片等操作,我这里就不介绍了,放大图片贴标签贴的更准确一点,建议大家耐心一点操作,会收到意想不到的效果。最好每次进入labelimg软件时,都检查一下,防止出错。接下来是右侧。
E、使用默认标签
F、将输入法切换到英文,“w”代表写标签,“d”代表下一张
操作完E后,请将光标放置于图片上,并敲击几下。防止接下来的“W”字母出现在标签上。(这都是贴标签掉进的坑,希望大家注意)
敲击键盘w,将会出现两条互相垂直的长实线,这个就是贴标签的工具了。
因为在软件开始时,已经设置了自动保存模式。所以,直接叩击键盘d,跳到下一张图片。
此时,我们再跳到数据集中,查看有什么变化。发现,照片文件夹中没什么变化。但是标签文件夹中出现了一些内容:
其中,classes.txt文件要保存好,别小看这个文件,这个文件疏忽了,能让你的标记全白费,所以建议各位,先标记个1-10张图片,试验一下,训练程序能否进行。程序没错误,就进行标记。有错误,再回头看看本文的流程。一定得注意,打完第1-3个标签,就得打开这个文件夹进行分类名称和序号的确定。如果要改变classes.txt文件里的标签顺序,那么就得将改变顺序之前的所有图片,重新标记,否则也会出现问题。
G、备份整个数据集
因为刚才建议大家标记上1-10个图片,就先进行一下训练,而训练是的文件夹中不能包含classes.txt文件,所以这里,请大家再次备份一下整个coco128文件夹(包含里面的子文件),防止数据丢失或便于数据集的扩充,无论哪种情况,都不用重新再标记了。
三、训练
无论是你标记了10个图片之后的小试牛刀还是全部标记之后的最终一战,你都得在训练前检测以下内容:
1、确认照片的数量和标记之后生成的txt文件数量一致
即:coco128\images\train2017目录下的图片数量和coco128\labels\train2017目下的txt文件数量一致(确保classes.txt文件已被移除)。补充说明如下图所示:
2、构造yaml文件
通过查看训练命令行,我们知道要想训练,就得有对应的yaml文件。
首先打开官方的yaml查看一下:
下图中关于训练集和验证集的路径只做演示,实际训练时需要对标定好的数据集进行训练集、验证集和测试集划分,比例一般是6:2:2。在训练时,分别索引到对应的数据集中,实现较为规范的训练!!!
对其中红框中的内容进行修改后,得到下图:
这里需要注意,貌似新的coco128.yaml文件是以下样子(多出了“path”,就是下图中第一个红框内容,需要按照图片中的内容来修改相对路径):
无论是哪一个,程序在运行时,能找到对应的文件就可以。(如果你选择colab训练,可以直接修改对应目录下的coco128.yaml文件,至于详细的方法,下文有介绍到,别着急)
3、最后确认目录结构
4、正式训练(谷歌的Colab,需要科学上网)
这里选用Colab的目的在于:训练速度快,能迅速知道自己的数据集能否正常训练。选择了Colab,就俩字“很香”。一旦colab运行成功了,想在本地训练的再进行本地训练(毕竟本地训练更稳妥一些,毕竟不会涉及到网络资源被收回的风险,至于本地如何训练自定义数据集,下一篇文章将会介绍)。Colab一旦检测到笔记本(本文提到的所有的笔记本都是在Colab中创建的,不是指你们面前的“笔记本电脑”)页面长时间没有活动,就会断开,网络资源被收回,里面的什么东西都没有了。
A、打包数据集
将自己创建好的coco128文件整体打包成rar格式,打包是因为上传方便,同时解压后能保存目录结构。
B、上传压缩包
因为从Colab上传文件时较慢(我个人情况是这样的,你们可以试试,快的话直接上传就好),所以,我先将coco128上传到谷歌云盘,再转移到笔记本目录。具体操作见下图:
等待上传完成即可。
C、在Colab中安装YOLOv5
谷歌浏览器框输入Colab,点击搜索。
点击文件,上传笔记本。
只需将下面这个文件上传即可:
上传完成后,将会跳转界面。然后按下图操作流程进行,下载Yolov5代码。
下载完成后,将会出现“Setup complete”等字样。随后在文件夹目录也可以看到yolov5的文件。
然后运行inference,检测yolov5是否正常。
D、探索数据集文件夹和YOLOv5的目录关系
我们知道了coco128文件夹内的目录结构,但是还不知道coco128文件夹和YOLOv5文件夹的目录关系(其实在第二章的2中,进行本地预训练时,留心的同学已经知道解压后的coco128文件夹和YOLOv5文件夹是并列的关系,但此处再罗嗦一下)所以,接下来直接滑动滚轮到Train条目下。操作如图所示:
下载完成后,我们刷新文件目录发现,yolov5和coco128的文件目录果真是并列的,此时便可大胆放心的将所有的文件搬进笔记本了。
E、将压缩包移动到笔记本内
详细的操作用图说话:
复制后,返回到笔记本界面,将代码粘贴到输入框内,敲击回车(多敲几下,会有明显的代码继续运行的反应):
显示以下信息表示链接成功:
F、上传yaml文件或者修改yaml文件
接下来上传coco128.yaml文件,但我们已经将整个yolov5的文件下载到了笔记本,不如直接在新下载的coco128.yaml文件里修改吧。在yolov5的data文件夹目录下,可以找到coco128.yaml文件。
双击该文件,如下图所示,这个是已经修改过的了。
别忘记Ctrl + s保存。保存后,关闭coco128.yaml文件即可。最后,还得去改一项内容,就是对应权重的yaml文件。(我在训练时引入了--cfg选项)
我将用yolov5s.pt训练,那么就得修改yolov5s.yaml。下图中的yolov5s.yaml文件是在models文件夹下,截图中的红色矩形框稍有偏差。
截止到目前为止,我们训练所需要的文件和数据集均已准备完毕,那么开始训练,注意训练的命令行有所更改。注意看截图!!!
四、正式开始训练
滑动滚轮,到熟悉的Train条目下。下图将下载官方数据集的命令用#号注释掉,根据我们压缩包的类型,我们输入如下命令进行解压。(推荐用Winrar打包,其他的如7-zip解压缩工具,Colab不支持)
!unrar x ../coco128.rar ../
接下来,看图操作。下图中的前2个红色框后面标记了Optional,意思是待选框,可以不选。为了方便,这里就直接忽略,把目标放在最终的训练命令行。
图中的1,2,3,4的含义:
1处的Batch:Batch大小是一个超参数,用于定义在更新内部模型参数之前要处理的样本数。这里设置的数量最好是内存的2的n次方,不可过大。
2处的Epochs:Epoch数是一个超参数,它定义了学习算法在整个训练数据集中的工作次数。你可以慢慢提升次数,从100开始即可(我本次演示训练时也是100起步)
3处的yolov5s.yaml可以更换成其他3个权重对应的yaml文件,但要记住修改训练的类的数量。
4处的权重文件可以改成其他的权重文件。似乎得和3处的yaml文件一致。
接下来,就开始训练了:
!python train.py --img 640 --batch 16 --epochs 30 --data coco128.yaml --cfg yolov5s.yaml --weights weights/yolov5s.pt --nosave --cache
出现下图所示的显示信息时,表明你已经成功运行训练程序了!默默等待训练完成即可。
YOLOv5本地训练时会输出一个last.pt文件,以及一个best.pt文件,但是Colab上训练,似乎只有批次参数设置合适的时候才会出现best.pt。最后将pt文件下载,放到本地的YOLOv5的weights文件夹里,就可以识别你想识别的物体了。