YOLOv3训练自定义数据集之行人检测

目录

一、自定义数据集制作

        1. 安装数据打标签软件labelme

        2.将打好标签的json数据转换为yolo能识别的格式 

 二、基于yolov3训练自定义数据集

        1.数据放到代码中相应位置 

        2. 模型配置文件生产

         3.编译环境配置

        3. 利用训练好的模型预测 


 

一、自定义数据集制作

        1. 安装数据打标签软件labelme

           在window 命令行执行  pip install labelme

          安装成功后启动,执行labelme

YOLOv3训练自定义数据集之行人检测_第1张图片

使用矩形框对数据集图像进行打标注 

 YOLOv3训练自定义数据集之行人检测_第2张图片

   打完标注保存后得到json文件 

 YOLOv3训练自定义数据集之行人检测_第3张图片

        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训练自定义数据集之行人检测_第4张图片

 二、基于yolov3训练自定义数据集

      yolov3代码在上一篇 yolov3的安装编译中有。

        1.数据放到代码中相应位置 

          自定义数据在custom目录下 ,需要到的文件如下图标注

YOLOv3训练自定义数据集之行人检测_第5张图片

             用于训练的图像路径

YOLOv3训练自定义数据集之行人检测_第6张图片         图像对应的label, label名字要和图像名字一样

 YOLOv3训练自定义数据集之行人检测_第7张图片

       自定义打标签的所有类别名字写在这个文件,留一个空行,不能留多 

YOLOv3训练自定义数据集之行人检测_第8张图片

     train.txt 写的是训练数据的路径,valid.txt写的是验证数据的路径,两个文件也是只留一个空行,留多了会发导致编译出错 

YOLOv3训练自定义数据集之行人检测_第9张图片

          

        2. 模型配置文件生产

             原来的代码训练coco数据是80分类,自定义数据集是2分类,linux下执行

        ./create_custom_model.sh  2    即可生成yolov3-custom.cfg,用于自定义数据集训练的模型配置文件

YOLOv3训练自定义数据集之行人检测_第10张图片

      custom.data文件修改

YOLOv3训练自定义数据集之行人检测_第11张图片

         3.编译环境配置

           YOLOv3训练自定义数据集之行人检测_第12张图片

 参数配置如下:分别表示

     训练的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

    训练过程 

YOLOv3训练自定义数据集之行人检测_第13张图片

 训练结束后保存的模型,用来预测。

YOLOv3训练自定义数据集之行人检测_第14张图片

        3. 利用训练好的模型预测 

           预测环境配置也在上一篇yolov3的安装编译中说明

YOLOv3训练自定义数据集之行人检测_第15张图片

 参数配置

--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

   待预测的图像存放路径 

YOLOv3训练自定义数据集之行人检测_第16张图片

 预测后保存路径YOLOv3训练自定义数据集之行人检测_第17张图片

YOLOv3训练自定义数据集之行人检测_第18张图片

你可能感兴趣的:(YOLO目标检测,YOLO)