从0开始安装并运行yolov5(仅供自己学习使用)

1.创建环境 conda create -n yolo python = 3.8
2.安装pytorch1.7以上,这边安装了1.7.1版本的
pip install torch1.7.1+cu101 torchvision0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
用下列指令安装其他包

git clone https://github.com/ultralytics/yolov5
pip install -U -r yolov5/requirements.txt

建议一个一个安装,这样保证不会出错。
3.下载权重,运行检测代码
去官网https://github.com/ultralytics/yolov5/releases
下载自己需要的模型权重,放到./weights里面
然后运行下列代码测试

    python detect.py --source data/images --weights yolov5s.pt --conf 0.25

运行成功的话,生成图片放在./runs/detect/exp里面

4.train自己的数据集。
(弄成VOC格式)
首先,自己的训练集格式要有voc的一样
从0开始安装并运行yolov5(仅供自己学习使用)_第1张图片
images里面放自己训练的图片
labels里面放yolo格式的txt文件。
下面附xml格式转化为txt格式代码。

import os
import xml.etree.ElementTree as ET
dirpath = '/home/xxx/yolov5/tianchi2/train_an/Annotations/'     #原来存放xml  文件的目录
newdir = '/home/xxx/yolov5/YG/labels/train/'  #修改label后形成的txt目录
if not os.path.exists(newdir):
os.makedirs(newdir) 
for fp in os.listdir(dirpath):
air = [‘自己训练的类’]	#目的是为了将xml文件中的字符名字转化为yolo形式中txt的数字标记

root = ET.parse(os.path.join(dirpath,fp)).getroot()
# import pdb;pdb.set_trace()
xmin, ymin, xmax, ymax = 0,0,0,0
sz = root.find('size')

width = float(sz[0].text)
height = float(sz[1].text)
filename = root.find('filename').text
for child in root.findall('object'):         #找到图片中的所有框
    #print(child.find('name').text)

    sub = child.find('bndbox')               #找到框的标注值并进行读取
    label = child.find('name').text

    for i in range(len(air)):           #对应数字
        #import pdb;pdb.set_trace()

        if air[i] == label:
            break
    label = i 
    xmin = float(sub[0].text)
    ymin = float(sub[1].text)
    xmax = float(sub[2].text)
    ymax = float(sub[3].text)
    try:                                     #转换成yolov3的标签格式,需要归一化到(0-1)的范围内
        x_center = (xmin + xmax) / (2 * width)
        y_center = (ymin + ymax) / (2 * height)
        w = (xmax - xmin) / width
        h = (ymax - ymin) / height
    except ZeroDivisionError:
        print(filename,'的 width有问题')

    with open(os.path.join(newdir, fp.split('.')[0]+'.txt'), 'a+') as f:
        f.write(' '.join([str(label), str(x_center), str(y_center), str(w), str(h) + '\n']))
print('ok')

数据集处理完之后,修改voc.yaml文件,新建一个xxx.yaml,复制voc.yaml东西,然后注释掉download部分,因为我们已经生成本地的数据集格式文件,修改文件路径和classes类别。

python train.py --data xxx.yaml --cfg yolov5s.yaml --weights yolov5s.pt --batch-size 64

就能成功了。

你可能感兴趣的:(深度学习)