当前位置:   article > 正文

YOLOV5学习笔记(二)——环境安装+运行+训练_yolov5环境安装

yolov5环境安装

目录

一、环境安装测试

二、数据集训练

2.1 yaml配置

2.1.1 数据集配置文件

2.1.2  模型配置文件

2.2 VisDrone数据集训练实战

2.2.1下载数据集

2.2.2 label转yolov5

2.2.3 训练

​ 2.2.4 可视化

三、改成ROS节点

四、 加速训练

4.1 训练预热 Warmup

4.2 余弦退火调整学习率

 4.3 自动计算锚框

4.4 超参数进化

4.5 自动混合精度

4.6 断点续训

4.7 多GUP训练


博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。

一、环境安装测试

  1. 1、创建环境
  2. conda create -n yolo python=3.7
  3. conda activate yolo
  4. 2、安装pytorch
  5. conda install pytorch torchvision torchaudio pytorch-cuda=11.3 -c pytorch -c nvidia
  6. 11.3为cuda版本号
  7. 3、克隆yolov5
  8. git clone https://github.com/ultralytics/yolov5 # clone
  9. cd yolov5
  10. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  11. //为了避免安装失误采用镜像安装https://pypi.tuna.tsinghua.edu.cn/simple

在github上下载预训练权重文件,将权重文件放到weights文件夹下。

  测试

python detect.py --source ./inference/images/ --weights weights/yolov5s.pt --conf 0.4

二、数据集训练

2.1 yaml配置

2.1.1 数据集配置文件

例如VOC.yaml,文件中给出了训练集和验证集的路径,种类数量为20以及名称。

2.1.2  模型配置文件

为训练模型的配置文件

给出了模型训练的种类数量(一般需要更改)以及网络的结构

 

2.2 VisDrone数据集训练实战

2.2.1下载数据集

Datasets`: [VisDrone] (http://aiskyeye.com/download/object-detection-2/)

每个文件夹下有annotations和image两个文件,并没有label,所以需要对生成label,好在yolov5提供了功能包。

2.2.2 label转yolov5

和train.py同一个目录下,新建文件visdronetoyolo.py并执行,即可自动生成label文件

  1. from utils.general import download, os, Path
  2. def visdrone2yolo(dir):
  3. from PIL import Image
  4. from tqdm import tqdm
  5. def convert_box(size, box):
  6. # Convert VisDrone box to YOLO xywh box
  7. dw = 1. / size[0]
  8. dh = 1. / size[1]
  9. return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh
  10. (dir / 'labels').mkdir(parents=True, exist_ok=True) # make labels directory
  11. pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
  12. for f in pbar:
  13. img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
  14. lines = []
  15. with open(f, 'r') as file: # read annotation.txt
  16. for row in [x.split(',') for x in file.read().strip().splitlines()]:
  17. if row[4] == '0': # VisDrone 'ignored regions' class 0
  18. continue
  19. cls = int(row[5]) - 1
  20. box = convert_box(img_size, tuple(map(int, row[:4])))
  21. lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
  22. with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl:
  23. fl.writelines(lines) # write label.txt
  24. dir = Path('/home/cxl/ros_yolov5/src/yolov5/data/VisDrone') # dataset文件夹下Visdrone2019文件夹路径
  25. # Convert
  26. for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
  27. visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels

2.2.3 训练

python train.py --data data/VisDrone.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 50
  • --data data/VisDrone.yaml  数据集配置
  • --cfg models/yolov5s.yaml  模型配置
  • --weights weights/yolov5s.pt  预训练模型
  • --batch-size 16  每次训练取多少个样本训练,取决自己电脑
  • --epochs 50  迭代训练多少次

在训练时出现这个问题

RuntimeError: result type Float can't be cast to the desired output type long int

修改【utils】中的【loss.py】里面的两处内容 

 1.打开你的【utils】文件下的【loss.py】

2.按【Ctrl】+【F】打开搜索功能,输入【for i in range(self.nl)】找到下面的一行内容并替换为:

 anchors, shape = self.anchors[i], p[i].shape 

3.按【Ctrl】+【F】打开搜索功能,输入【indices.append】找到下面的一行内容并替换为: 

indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid

4.保存刚才的两个替换操作 再次运行

 每个Epoch第二行是各参数的损失值,在整个Epoch训练结束后,给出精确度等总体信息,并将这个Epoch的过程文件保存在 ./runs/train/exp 文件夹中

labels.jpg: 边界框中心点的坐标分布

results.csv: 每个Epoch训练后的总体概述

weights: 装的是训练权重

hyp.yaml: 是超参的值

opt.yaml: 是整个训练过程的配置文件

train_batch.jpg是一组batch的训练结果图,我们设置一个batch是16,所以16个图片

2.2.4 可视化

  1. tensorboard --logdir=./runs
  2. =后面是存放exp训练过程文件的路径

三、改成ROS节点

需要注意的是将加载网络模型写到循环外面,这样不用每次加载图片都训练一遍

  1. #!/usr/bin/env python
  2. # YOLOv5
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/771424
    推荐阅读
    相关标签