tensorflow-yolov3 训练自己的数据集

tensorflow-yolov3 训练自己的数据集
使用项目 https://github.com/YunYang1994/tensorflow-yolov3,感谢大神。

记录一下训练自己数据集的过程。环境使用ubt。

1.下载项目。
git clone https://github.com/YunYang1994/tensorflow-yolov3.git
安装过程参照项目说明。

2.下载标注工具
https://github.com/tzutalin/labelImg
安装过程参照项目说明。

3.修改标注工具中了分类文件
该文件在 labelImg-master\data\predefined_classes.txt 中。把原来里面有的类型删掉,写上自己需要做的分类。

在这里插入图片描述
4.开始标注
在这里插入图片描述open 载入图片
save 保存
pascalvoc 保存标签的方式 ,该方式有3种,这是我选择的方式。
create rectbox 画框

4.xml文件转换
对项目tensorflow-yolov3 中的 voc_annotation.py进行改造。目的是对labelImg工具生成的xml文件进行转换,全部写到一个txt里面,符合项目的训练的格式需求。

import os
import argparse
import xml.etree.ElementTree as ET

def convert_voc_annotation(classesPath,imagePath, xmlPath, writeTXTpath,annotation_=None, use_difficult_bbox=True):
    '''
    labelimg 打的标签转换为 符合模型训练的 txt
    txt 中每一行的格式为    路径 x1,y1,x2,y2 类型 x1,y1,x2,y2 类型 ....

    :param classesPath:  # 分类名称路径
    :param imagePath:  #图片路径
    :param xmlPath: # xml文件路径
    :param writeTXTpath: # 写入txt 的路径
    :param annotation_:  #   写入txt 中的路径字段 ,因为这个脚本我在windows 上运行,训练的时候在另一台2080的机器上,所以路径不太一样.这个参数就是用来自定义路径的.如果在本机训练直接传入None即可
    :param use_difficult_bbox:
    :return:
    '''
    classes = readclass(classesPath)
    img_inds_file=os.listdir(imagePath)
    with open(writeTXTpath, 'a') as f:
        for image_ind in img_inds_file:
            print(image_ind)
            image_path = os.path.join(imagePath,image_ind)
            if annotation_ is None:
                annotation =image_path
            else:
                annotation=os.path.join(annotation_,image_ind)
            label_path = os.path.join(xmlPath,image_ind.replace("png","xml"))
            root = ET.parse(label_path).getroot()
            objects = root.findall('object')
            for obj in objects:
                difficult = obj.find('difficult').text.strip()
                if (not use_difficult_bbox) and(int(difficult) == 1):
                    continue
                bbox = obj.find('bndbox')
                class_ind = classes.index(obj.find('name').text.lower().strip())
                xmin = bbox.find('xmin').text.strip()
                xmax = bbox.find('xmax').text.strip()
                ymin = bbox.find('ymin').text.strip()
                ymax = bbox.find('ymax').text.strip()
                annotation += ' ' + ','.join([xmin, ymin, xmax, ymax, str(class_ind)])
            print(annotation)
            f.write(annotation + "\n")
    return len(img_inds_file)

def readclass(path):
    '''
    读取分类的标签文件
    :param path:
    :return:
    '''
    classes=[]
    f=open(path,'r')
    for sub in f.readlines():
        classes.append(sub.replace("\n",''))
    f.close()
    return classes

if __name__ == "__main__":
    classesPath=r''  # 分类名称路径
    imagePath=r''   #图片路径
    xmlPath=r''   # xml文件路径
    writeTXTpath=r''    # 写入txt 的路径
    convert_voc_annotation(classesPath,imagePath,xmlPath,writeTXTpath,None,False)

生成的 txt 文件应该是这样 ,此文件我称为标签文件。标签文件指明了 图片路径,目标所在的区域,目标的类别id.此文件做好之后,自行对训练数据和测试数据分开,不再多说。
在这里插入图片描述

5.配置tensorflow-yolov3项目中的config.py
路径 tensorflow-yolov3-master\core\config.py ,这里对几个需要做改动的参数进行说明
__C.YOLO.CLASSES 分类文件路径,等价于标签工具的predefined_classes.txt。可以直接使用此文件。
__C.TRAIN.ANNOT_PATH 训练标签文件路径 ,即我们在第四步中生成的txt文件。

__C.TRAIN.INITIAL_WEIGHT 初始化权重文件路径。就是上次训练完成后保存的权重文件,设置之后可以接着上次继续训练。
__C.TEST.ANNOT_PATH 测试标签文件路径 ,即我们在第四步中生成的txt文件。

6开始训练
linux下cd到项目目录执行 python3 train.py

7.训练完成后修改 freeze_graph.py 文件 19行

ckpt_file = "./checkpoint/yolov3_coco_demo.ckpt"

将此处改成自己的。

8 .图片测试
修改 image_demo.py 文件 21 和22 行 后执行 python image_demo.py 即可看到测试结果。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值