目录
一、自定义数据集制作
1. 安装数据打标签软件labelme
在window 命令行执行 pip install labelme
安装成功后启动,执行labelme
使用矩形框对数据集图像进行打标注
打完标注保存后得到json文件
2.将打好标签的json数据转换为yolo能识别的格式
在代码中写好相应的路径,执行下面的代码即可。
import json
import os
#自己打标签有多少类别就写在这里
name2id = {'person':0,'head':1}
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)
#D:\\BaiduNetdiskDownload\\PyTorch-YOLOv3\\data\\custom
def decode_json(json_floder_path,json_name):
#转换好的标签放哪里
txt_name = 'D:/BaiduNetdiskDownload/PyTorch-YOLOv3/data/custom/labels/' + json_name[0:-5] + '.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'))
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')
#D:\BaiduNetdiskDownload\PyTorch-YOLOv3\data\custom\label-test
if __name__ == "__main__":
#labelme生成标签后的数据路径,json文件路径
json_floder_path = 'D:/BaiduNetdiskDownload/PyTorch-YOLOv3/data/custom/label-test'
json_names = os.listdir(json_floder_path)
for json_name in json_names:
decode_json(json_floder_path,json_name)
使用上面的代码转换格式后得到数据图像的label
二、基于yolov3训练自定义数据集
yolov3代码在上一篇 yolov3的安装编译中有。
1.数据放到代码中相应位置
自定义数据在custom目录下 ,需要到的文件如下图标注
用于训练的图像路径
图像对应的label, label名字要和图像名字一样
自定义打标签的所有类别名字写在这个文件,留一个空行,不能留多
train.txt 写的是训练数据的路径,valid.txt写的是验证数据的路径,两个文件也是只留一个空行,留多了会发导致编译出错
2. 模型配置文件生产
原来的代码训练coco数据是80分类,自定义数据集是2分类,linux下执行
./create_custom_model.sh 2 即可生成yolov3-custom.cfg,用于自定义数据集训练的模型配置文件
custom.data文件修改
3.编译环境配置
参数配置如下:分别表示
训练的epoch次数
模型配置文件
数据集配置
预训练权重模型
--epochs
500
--model_def
config/yolov3-custom.cfg
--data_config
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/config/custom.data
--pretrained_weights
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/weights/darknet53.conv.74
训练过程
训练结束后保存的模型,用来预测。
3. 利用训练好的模型预测
预测环境配置也在上一篇yolov3的安装编译中说明
参数配置
--image_folder
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/data/samples
--weights_path
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/checkpoints/yolov3_ckpt_400.pth
--model_def
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/config/yolov3-custom.cfg
--class_path
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/data/custom/classes.names
--checkpoint_model
D:/BaiduNetdiskDownload/PyTorch-YOLOv3/checkpoints/yolov3_ckpt_400.pth
待预测的图像存放路径
预测后保存路径