Yolov5 从0基础开始保姆级超详细教程

首先github拿代码:

GitHub - ultralytics/yolov5: YOLOv5 in PyTorch > ONNX > CoreML > TFLiteYOLOv5 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.https://github.com/ultralytics/yolov5具体环境见github要求即可。

下载完yolov5和对应的权重文件后,运行detect.py,看是否有缺失的包没有安装。

若一切正常,可以在runs中能发现被处理过的标签,说明成功安装了所有包。

准备数据集:

1、制作标签

推荐使用labelme,链接如下:GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). - GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation).https://github.com/wkentaro/labelme

可以制作单个或多个标签。

2、由于yolov5只认txt而不认json,因此还要有一个转换的过程:批量json转txt

import json
import os

name2id = {'stitches': 0}  # 标签名称


def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def decode_json(json_floder_path, json_name):
    txt_name = '/mnt/data/yolov5-master/nxm_data/labels_txt/' + json_name[0:-5] + '.txt'
    # 存放txt的绝对路径
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')


if __name__ == "__main__":

    json_floder_path = '/mnt/data/yolov5-master/nxm_data/labels/'
    # 存放json的文件夹的绝对路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)

接着修改配置文件:

1.coco128.yaml修改

先复制一份,可以粘贴到data中,改名为data.yaml

mydata.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字,同时要把path注释掉。train和val就是你的训练集和测试集。

2.yolov5配置

yolov5有4种配置,不同配置的特性如下,自己选择:

 建议下载好预训练权重,防止终端网络下载不了。下载后放到yolov5/weight文件下就行。

接着修改train.py。

打开这个文件,需要修改的参数比较多。

第一个是with open,参数要加上encoding='utf-8',不然的话很可能会出现编码报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 577。

参数设置,可以设也可以不设。不设就需要在终端命令行,手动输入具体配置。

接着就可以train了。

最后在run里会生成权重文件。

再修改detect.py里的权重路径,换成你的,就可以测试自己的数据了。
 

你可能感兴趣的:(目标检测和跟踪,目标检测,目标跟踪,深度学习,神经网络,python)