手把手教会使用YOLOv5训练VOC2007数据集

1. 运行环境配置

本次使用的电脑系统是windows7。

使用YOLOv5训练自己的数据集,首先需要搭建YOLOv5的环境,包括安装Python环境安装相关Python库下载YOLOv5 github项目,具体操作方法请参照本人另一篇博文: [YOLOv5环境搭建]。

2. 下载模型文件

参考: [YOLOv5环境搭建],里面有下载模型文件的方法。

这里也提供CSDN下载链接:yolov5m.pt、yolov5l.pt、yolov5x.pt、yolov5s.pt、yolov3-spp.pt。这里5个文件代表5种不同的模型结构,例如yolov5m.pt中m表示中等大小的模型。

本次以yolov5s.pt为例进行案例分析,因此读者可以先只下载yolov5s.pt。因为yolov5s.pt是这几个中最小的一个模型,方便我们把流程跑通,之后读者想尝试更大的模型时,只需将yolov5s.pt替换成更大的模型文件即可。

为了方便后面的训练,可以将下载的模型文件拷贝到yolov5\weights文件夹中,如下图所示:

手把手教会使用YOLOv5训练VOC2007数据集_第1张图片

3. 数据集准备

本次以VOC2007为例进行案例分析,如果读者有自己的数据集,也可以按如下的方式准备后进行训练。

VOC数据集下载地址: [ Pascal VOC Dataset Mirror ],该网址是一个镜像网站,所有速度还是可以的。这里推荐使用迅雷下载,速度可以达到几M、甚至几十M。

手把手教会使用YOLOv5训练VOC2007数据集_第2张图片

下载 VOC2007下面 [Train/Validation Data (439 MB)]和[Test Data With Annotations (431 MB)]这两个文件即可。

为了方便读者,也提供百度网盘下载地址: [ VOC2007数据集 ] (提取码:7sjo)。

下载完成后解压两个下载的文件。注意:这里解压的时候选择 [ 解压到当前文件夹 ],两个压缩文件会合并到一个文件夹 [ VOCdevkit ]中。

手把手教会使用YOLOv5训练VOC2007数据集_第3张图片

解压完成后需要将VOC格式的标注文件转换成YOLO标注格式的文件,转换过程请参考:[ VOC标注格式转换成YOLO标注格式 ]。转换完成后会生成一个[labels]的文件夹和三个txt文件[ 2007_train.txt、2007_val.txt、2007_test.txt],文件夹里面是转换后的YOLO标注格式的文件,我们将里面所有txt文件复制到 [ VOCdevkit\VOC2007\JPEGImages ]中。为了防止有人不会转换,这里提供转换后的 [labels] 的文件夹: [ labels-YOLO格式标注文件.7z ](提取码:uu1i)。最终如下图所示:

手把手教会使用YOLOv5训练VOC2007数据集_第4张图片

2007_train.txt、2007_val.txt、2007_test.txt这三个文件后面训练的时候会用到,先别急!!!

4. 修改YOLOv5模型配置文件

4.1 修改voc.yaml文件

该文件位于:yolov5\data目录下,文件内容如下:

# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Download command: bash ./data/get_voc.sh
# Train command: python train.py --data voc.yaml
# Default dataset location is next to /yolov5:
#   /parent_folder
#     /VOC
#     /yolov5


# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: ../VOC/images/train/  # 16551 images
val: ../VOC/images/val/  # 4952 images

# number of classes
nc: 20

# class names
names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog',
        'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

读者只需要将11行和12行改成2007_train.txt和2007_val.txt文件的路径即可,可以是相对路径,也可以是绝对路径,例如修改如下:

# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC/
# Download command: bash ./data/get_voc.sh
# Train command: python train.py --data voc.yaml
# Default dataset location is next to /yolov5:
#   /parent_folder
#     /VOC
#     /yolov5


# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: F:\AI\datasets\VOC2007\VOCdevkit\VOC2007\2007_train.txt
val: F:\AI\datasets\VOC2007\VOCdevkit\VOC2007\2007_val.txt

# number of classes
nc: 20

# class names
names: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog',
        'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

注意:上述文件中nc代表类别的个数,如果是训练自己的数据集,需要修改为自己数据集的类别个数。names代表类别的名称,对于VOC总共有20个类别。

4.2 修改yolov5s.yaml文件

该文件位于:yolov5\models目录下,文件内容如下:

# parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9
  ]

# YOLOv5 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

该文件需要修改的地方是第2行nc的个数,需要改成自己数据集类别的个数,对于VOC数据集改成20。

5. 训练

进入YOLOv5项目(项目文件从github下载)根目录,如下所示的目录:

手把手教会使用YOLOv5训练VOC2007数据集_第5张图片

在命令行中运行如下命令:

python train.py --epochs 10 --cfg models\yolov5s.yaml --data data\voc.yaml --weights weights\yolov5s.pt

运行后输入如下内容,便开始训练了:

手把手教会使用YOLOv5训练VOC2007数据集_第6张图片

手把手教会使用YOLOv5训练VOC2007数据集_第7张图片

模型训练过程中默认会在yolov5/runs目录下生成一个目录exp1,exp2等等,每运行一次上述命令,生成一个文件夹,用于保存运行中一些数据。

运行结束时输出如下:

运行结束后运行目录结果如下:

手把手教会使用YOLOv5训练VOC2007数据集_第8张图片

6. 关于报错

6.1 KeyError: "weights/yolov5s.pt is not compatible with models/yolov5s.yaml

由于最近YOLOv5 github项目更新频繁,可能上面提到的模型文件yolov5s.pt等已经过期了,这时就需要下载新的模型文件来进行训练。谷歌网盘地址:https://drive.google.com/drive/folders/1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

6.2 RuntimeError: CUDA out of memory

这类报错原因是显卡内存太小了,一次装不下太多的图片,因此可以通过--batch-size调整每个批次样本的个数,默认值是16。报错后可以调整为8试试,如果还是报错,再调整为4试试,如果还是报错,那请找一把锤子,瞄准电脑主机箱用力地砸下去...

6.3 torch.nn.modules.module.ModuleAttributeError: 'BatchNorm2d' object has no attribute '_non_persistent_buffers_set'

这类报错也是模型文件更新导致的,需要下载新的模型文件。

 

 

 

 

 

 

你可能感兴趣的:(YOLOv5,YOLOv5,VOC2007,模型训练)