赞
踩
目录
- 1、创建环境
- conda create -n yolo python=3.7
- conda activate yolo
- 2、安装pytorch
- conda install pytorch torchvision torchaudio pytorch-cuda=11.3 -c pytorch -c nvidia
- 11.3为cuda版本号
- 3、克隆yolov5
- git clone https://github.com/ultralytics/yolov5 # clone
- cd yolov5
- pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
- //为了避免安装失误采用镜像安装https://pypi.tuna.tsinghua.edu.cn/simple
在github上下载预训练权重文件,将权重文件放到weights文件夹下。
测试
python detect.py --source ./inference/images/ --weights weights/yolov5s.pt --conf 0.4
例如VOC.yaml,文件中给出了训练集和验证集的路径,种类数量为20以及名称。
为训练模型的配置文件
给出了模型训练的种类数量(一般需要更改)以及网络的结构
Datasets`: [VisDrone] (http://aiskyeye.com/download/object-detection-2/)
每个文件夹下有annotations和image两个文件,并没有label,所以需要对生成label,好在yolov5提供了功能包。
和train.py同一个目录下,新建文件visdronetoyolo.py并执行,即可自动生成label文件
- from utils.general import download, os, Path
-
- def visdrone2yolo(dir):
- from PIL import Image
- from tqdm import tqdm
-
- def convert_box(size, box):
- # Convert VisDrone box to YOLO xywh box
- dw = 1. / size[0]
- dh = 1. / size[1]
- return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh
-
- (dir / 'labels').mkdir(parents=True, exist_ok=True) # make labels directory
- pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
- for f in pbar:
- img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
- lines = []
- with open(f, 'r') as file: # read annotation.txt
- for row in [x.split(',') for x in file.read().strip().splitlines()]:
- if row[4] == '0': # VisDrone 'ignored regions' class 0
- continue
- cls = int(row[5]) - 1
- box = convert_box(img_size, tuple(map(int, row[:4])))
- lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
- with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl:
- fl.writelines(lines) # write label.txt
-
-
- dir = Path('/home/cxl/ros_yolov5/src/yolov5/data/VisDrone') # dataset文件夹下Visdrone2019文件夹路径
-
- # Convert
- for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
- visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels
python train.py --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个图片
- tensorboard --logdir=./runs
- =后面是存放exp训练过程文件的路径
需要注意的是将加载网络模型写到循环外面,这样不用每次加载图片都训练一遍
- #!/usr/bin/env python
- # YOLOv5 声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/771424推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。