前言
本文章是基于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/即可。
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中。这里由于用的服务器没有屏幕就不展示识别效果了。