yolov5训练KITTI数据集以及KITTI数据集划分详解(下)

前言

本文章是基于KITTI数据集训练yolov5,朋友们可以完全按照我的步骤来划分数据集(严格按照我列出的目录结构就不会出任何问题),从而在KITTI成功训练yolov5。如果严格按照我的目录结构来进行的话,大家无需修改代码中任何一句话。

本章内容基于yolov5训练KITTI数据集以及KITTI数据集划分详解(上)内容


以下是本篇文章正文内容

四、训练网络

4.1 新建自己的yaml文件

在~/yolov5-master/data文件夹下使用touch kitti.yaml新建文件并复制以下内容

train: /home/djx/yolov5/datasets/kitti/images/train #train dataset path
val: /home/djx/yolov5/datasets/kitti/images/val  # val dataset path
test: /home/djx/yolov5/datasets/kitti/images/test  # test dataset path

# Classes
nc: 1  # number of classes 我这里只检测Car,所以nc为1,name列表里只有Car类,根据自己需求修改
name: ['Car']

4.2 下载预训练权重模型yolov5s.pt

权重模型下载地址
打开下载地址下拉至底部,打开Assets下拉框即可下载对应模型,s为轻量化模型,为了演示我选择下载s模型,模型放至~/yolov5-master/即可。
yolov5训练KITTI数据集以及KITTI数据集划分详解(下)

4.3 训练模型

4.3.1 修改yolov5s.yaml

打开~/yolov5-master/datasets/models/yolov5s.yaml,并修改为下方代码,我这里修改了nc,如果大家不用s模型,用l的话,就打开yolov5l.yaml进行修改即可。

# Parameters
nc: 1  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
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, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, C3, [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, C3, [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, C3, [256, False]],  # 17 (P3/8-small)

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

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

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

4.3.2 运行

进入~/yolov5-master目录下,运行python文件,中间无需回车,都是用空格隔开。可以适当调整batch_size和epochs的大小。

python train.py --img 640 --batch-size 32 --epochs 80 
				--data data/kitti.yaml --cfg models/yolov5s.yaml 
				--weights yolov5s.pt

五、结果检测

目前只是进行了train和val,还没有进行test,不过无所谓,数据集已经划分好了,后期看自己需求要不要test,这里训练好后直接运行,使用训练好的best.pt权重文件进行detect,expX处自己查看训练后的输出该填多少。

python train.py --img 640 --batch-size 32 --epochs 80 
				--data data/kitti.yaml --cfg models/yolov5s.yaml 
				--weights ~/yolov5-master/runs/train/expX/weights/best.pt

detect的图片放在~/yolov5-master/data/images中,检测结果会存放在
~/yolov5-master/runs/detect中。这里由于用的服务器没有屏幕就不展示识别效果了。

上一篇:CF1567B MEXor Mixup 题解


下一篇:为什么Linux需要将IP从eth接口移动到桥接接口