深度学习之YOLOv5实践应用(2)数据集制作与训练

参见:

 

YOLOv5训练自己的数据集(超详细完整版)VOC格式

 

一、安装labelImg

安装labelImg(Ubuntu / Linux)

Ubuntu 18.04 Linux安装labelImg的教程

# 将源码下载到本地
git clone https://github.com/tzutalin/labelImg.git

# 切换进入项目代码
cd labelImg

# 开辟一个新的anaconda环境,命名为yolo
conda create -n yolo

# 进入yolo环境
conda activate yolo

# 安装基础python环境,conda会同时下载pip工具
conda install python=3.7

sudo apt-get install pyqt5-dev-tools
pip install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py

深度学习之YOLOv5实践应用(2)数据集制作与训练_第1张图片

深度学习之YOLOv5实践应用(2)数据集制作与训练_第2张图片

二、制作数据集标签

参考:

从YOLOv5模型训练

把准备好的图片放到一个文件夹中,在LabelImg中打开这个文件夹。然后设置标签文件输出位置(change save Dir)。不要放在与图片相同的位置就行。然后对每张图片画框打标签。按w键可以画框,画完框后,就会弹出对话框,然后在对话框上写上标签名就行(这步工作就是说明图片上这个位置是什么东西)。打完标签后,你就得到两个文件夹。图片和标签。在标签文件夹中,你还得到了一个classes.txt文件。这个文件记录了数据集中所有类别。标签文件中记录的是引索。需要通过这个classes.txt文件才能知道对应的物品名称。图片和标签两个文件夹中的文件一一对应,它们名字相同,后缀名不同。然后你需要把数据分为训练集和测试集,比例要适中。
此时,你拥有4个文件夹和一个class.txt文件。

  1. train图片
  2. train标签(与train 图片一一对应,名字相同,后缀不同)
  3. test图片
  4. test标签 (与test 图片一一对应,名字相同,后缀不同)

深度学习之YOLOv5实践应用(2)数据集制作与训练_第3张图片

labelImg还支持文件夹的导入,在标完一张后,在左侧选择Next Image就可以切换到下一张继续了。输出格式部分,目前labelImg支持YOLOPascalOVC2种格式,前者标签信息是存储在txt文件中,而后者是存储在xml

打完标签后,就可以进行保存了,图片和标签文件我们分开存放,但是文件名是对应的,只是扩展名不同

深度学习之YOLOv5实践应用(2)数据集制作与训练_第4张图片

最后来看看标签文件的内容

深度学习之YOLOv5实践应用(2)数据集制作与训练_第5张图片

一行代表一个目标,格式是

class x_center y_center width height

第一列是class的索引,计数从0开始,比如这里的0代表的是basketball,1代表的是face;后4列是x_center/image_widthy_center/image_heightwidth/image_widthheight/image_height,取值范围是0 ~ 1

三、数据集配置

在工程目录下找到data文件夹,在这个文件夹里新建一个文件夹。可以任意命名(为方便说明,这里用命名为mydataset。在mydataset下新建两个文件夹。一个命名为images,另一个命名为labels。这两个文件夹名字是规定的,不能随意。然后分别在这两个文件夹下都新建两个文件夹,命名为train,test。
深度学习之YOLOv5实践应用(2)数据集制作与训练_第6张图片


深度学习之YOLOv5实践应用(2)数据集制作与训练_第7张图片
深度学习之YOLOv5实践应用(2)数据集制作与训练_第8张图片
然后把第六步得到的4个文件夹中的文件转移到对应目录中

  1. train图片->images/train
  2. train标签->labels/train
  3. test图片->images/test
  4. test标签->labels/test

 四、训练配置文件

 1. 打开工程目录/models/yolov5s.yaml文件(如果训练的是其他模型则打开其他模型的yaml文件),然后把nc改为第六步中classes.txt中类别的数量。(你数据集中标签了多少样东西,这个数字就是几)

      2.  打开工程目录/data/coco128.yaml文件。  

      

深度学习之YOLOv5实践应用(2)数据集制作与训练_第9张图片

      把train:设置为第六步的train图片的存放位置
      把val:设置为第六步的test图片的存放位置
      程序会自动搜索labels文件的位置。这也就是第六步为什么要规定图片与标签文件夹名字的原因。这个搜索是通过简单字符串替换实现的
      把nc:改为数据集的类别数目(1中的一样)
      把names改为类别名称,顺序要和第六步得到的classes.txt中的一样。

 五、训练权重

命令行切换到工程目录下。运行命令(运行之前确保修改的配置文件都保存好了)
python train.py --img 640 --data data/coco128.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 8 --epochs 50

这些参数根据实际情况进行调整。–cfg 指示用到的模型的配置文件的位置。–weights 指示对应模型权重文件的位置。
在开始训练前。会打印输出的位置。我们会得到训练指标,训练后的两个权重文件(一个是最佳权重,一个是最后一轮训练得到的权重)。

训练完成后,就可以去那个目录查看结果。

六、用训练的权重结果做预测

与第四步一样,不同的是权重文件的位置变了
python detect.py --source 0 --weights=“weights/yolov5s.pt”。改一下权重路径就行。
=>python detect.py --source 0 --weights=“runs\train\exp3\weights\best.pt”
source 参数说明
如果是0,则打开摄像头
如果是图片路径,则对图片进行预测。结果路径会打印
如果是文件夹,则对文件夹中的图片和视频进行预测。
如果是视频,则对视频进行预测。

七、使用公开的数据集进行训练

ROBOFLOW 提供了一些公开的数据集,我们下载其中的口罩数据集进行训练,链接是 Mask Wearing Object Detection Dataset, 如果原网站无法访问的话,可以到下面的链接下载

  • CSDN下载
  • 百度网盘, 提取码:wja4

下载下来是一个压缩包,解压后,文件夹内的文件结构是这样的

深度学习之YOLOv5实践应用(2)数据集制作与训练_第10张图片

其中文件夹train包含了参加训练的图片以及对应的label文件,两者只有扩展名不同而已,目前图片只有105张。我们将包含数据集的文件夹重命名为mask,存储在yolov5工程的同级目录下

深度学习之YOLOv5实践应用(2)数据集制作与训练_第11张图片

接着修改mask/data.yaml文件内容为

(base) xugaoxiang@1070Ti:~/Works/github/mask$ cat data.yaml
train: ../mask/train/images
val: ../mask/valid/images

nc: 2
names: ['mask', 'no-mask']

最后修改yolov5/models/yolov5s.yaml,将nc = 80修改为nc = 2,因为数据集中只有maskno-mask2个类别

接下来执行训练命令

cd yolov5
python train.py --img 640 --batch 16 --epochs 300 --data ../mask/data.yaml --cfg models/yolov5s.yaml --weights '' 

训练结束后,在weights文件夹下就生成了best.ptlast.pt,到mask/test/images找些图片测试一下

python detect.py --weight weights/best.pt --source ../mask/test/images/1224331650_g_400-w_g_jpg.rf.b816f49e2d84044fc997a8cbd55c347d.jpg

深度学习之YOLOv5实践应用(2)数据集制作与训练_第12张图片

你可能感兴趣的:(深度学习,图像识别,深度学习)