美文网首页
自制数据集训练yolov3

自制数据集训练yolov3

作者: dc_3 | 来源:发表于2019-08-22 08:48 被阅读0次
  1. 首先使用下面的代码(参考找不见了)将图片重命名:
# -*- coding: utf-8 -*- 
import os
 
class ImageRename():
 def __init__(self):
#换成自己图片集所在路径
  self.path = 'E:/keras-yolo3-master/ship'
 
 def rename(self):
  filelist = os.listdir(self.path)
  total_num = len(filelist)
 
  i = 0
 
  for item in filelist:
#如果是png就把.jpg改成.png
   if item.endswith('.jpg'):
    src = os.path.join(os.path.abspath(self.path), item)
#自己可以更改0的个数
    dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')
    os.rename(src, dst)
    print ('converting %s to %s ...' % (src, dst))
    i = i + 1
  print ('total %d to rename & converted %d jpgs' % (total_num, i))
 
if __name__ == '__main__':
 newname = ImageRename()
 newname.rename()
  1. 然后使用labelImg标注数据集,生成xml文件。具体的,有一些快捷键,w:创建新矩形 d:下一张 a:上一张 ctrl+s:保存。
  2. 将xml文件转换成yolov3需要的训练文件,格式如下:
    路径/1.jpg 目标1 目标2。。。
    路径/2.jpg 目标1 目标2。。。
    目标格式:xmin,ymin,xmax,ymax,class_label
    有多少图片就得到多少行,写到一个txt里面,代码如下:
# -*- coding: utf-8 -*-
import os
#import sys
import xml.etree.ElementTree as ET
import glob

def xml_to_txt(indir):

    os.chdir(indir)
    annotations = os.listdir('.')
    annotations = glob.glob(str(annotations)+'*.xml')
#输出的训练文件txt
    f_w = open('E:/deeplearningprogram/keras-yolo3-master/trainship.txt','w')

    for i, file in enumerate(annotations):
        #图片集所在路径+图片名称
        file_name = 'E:/deeplearningprogram/keras-yolo3-master/ship/'+file.split('.')[0]+'.jpg'
        #file_txt=os.path.join(outdir,file_save)
        #f_w = open(file_txt,'w')

        # actual parsing
        in_file = open(file,'rb')
        tree=ET.parse(in_file)
        root = tree.getroot()
        strname=file_name
        for obj in root.iter('object'):
                #name = obj.find('name').text
                xmlbox = obj.find('bndbox')
                xn = xmlbox.find('xmin').text
                xx = xmlbox.find('xmax').text
                yn = xmlbox.find('ymin').text
                yx = xmlbox.find('ymax').text
                #f_w.write(str(name))
                strname=strname+(' '+xn+','+yn+','+xx+','+yx+','+'0')
        f_w.writelines(strname+'\n')
    f_w.close()
#xml文件所在路径
indir='E:/deeplearningprogram/keras-yolo3-master/ship_xml/'  
xml_to_txt(indir)

我这里得到的文件命名为trainship.txt
3.使用kmeans.py聚类自己数据集的anchor。更改程序里面的txt训练文件名称,输出自己数据集anchor的txt文件。

  1. 使用train.py进行训练。需要更改的是类别文件,anchor文件。
    注意:如果显卡性能一般的话会报错,参考将GPU训练改成CPU训练。

我们训练的时候需要禁止GPU,下面的代码加到train.py的头部就能禁止GPU
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'

相关文章

网友评论

      本文标题:自制数据集训练yolov3

      本文链接:https://www.haomeiwen.com/subject/vsnisctx.html