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

本文介绍了如何使用labelme工具打标签并转换JSON数据为YOLOv3可读格式,然后详细阐述了基于YOLOv3训练自定义数据集的步骤,包括数据放置、模型配置文件生成、编译环境配置以及模型预测的设置。
摘要由CSDN通过智能技术生成

目录

一、自定义数据集制作

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

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

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

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

        2. 模型配置文件生产

         3.编译环境配置

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


 

一、自定义数据集制作

        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

   待预测的图像存放路径 

 预测后保存路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值