首先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)
接着修改配置文件:
先复制一份,可以粘贴到data中,改名为data.yaml
mydata.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字,同时要把path注释掉。train和val就是你的训练集和测试集。
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里的权重路径,换成你的,就可以测试自己的数据了。