记录自写快捷生成voc训练格式脚本

# DESC: 标注单类数据后,生成voc训练格式脚本
import os
import random
import glob
import shutil

trainval_percent = 0.66
train_percent = 0.5
base_path = r'C:\Users\wzauw\Desktop\cougar_body'
xml_path = r''
img_path = r''
total_xml = []


def mk_data_folder(*args, cur=None):
    if not cur:
        cur = base_path
    for idx, arg in enumerate(args, 1):
        cur = os.path.join(cur, arg)
        if idx == len(args):
            if not os.path.exists(cur):
                os.makedirs(cur)
    return cur


if __name__ == '__main__':
    # 创建文件目录
    folder_path = {}
    voc2007 = mk_data_folder('VOCdevkit', 'VOC2007')
    for foldername in ['Annotations', 'ImageSets', 'JPEGImages']:
        folder_path[foldername] = mk_data_folder(foldername, cur=voc2007)
    for imgsetname in ['Action', 'Layout', 'Main', 'Segmentation']:
        folder_path[imgsetname] = mk_data_folder(imgsetname, cur=folder_path['ImageSets'])

    if not img_path:
        img_path = base_path
    for file in glob.glob(img_path + '/*.*[gG]'):
        if os.path.exists(os.path.join(folder_path['JPEGImages'], os.path.basename(file))):
            os.remove(file)
        else:
            shutil.move(file, folder_path['JPEGImages'])

    if not xml_path:
        xml_path = base_path
    for file in glob.glob(xml_path + '/*.xml'):
        total_xml.append(os.path.basename(file))
        if os.path.exists(os.path.join(folder_path['Annotations'], os.path.basename(file))):
            os.remove(file)
        else:
            shutil.move(file, folder_path['Annotations'])

    num = len(total_xml)
    tv = int(num * trainval_percent)
    tr = int(tv * train_percent)
    trainval = random.sample(range(num), tv)
    train = random.sample(trainval, tr)

    ftrainval = open(os.path.join(folder_path['Main'], 'trainval.txt'), 'w')
    ftest = open(os.path.join(folder_path['Main'], 'test.txt'), 'w')
    ftrain = open(os.path.join(folder_path['Main'], 'train.txt'), 'w')
    fval = open(os.path.join(folder_path['Main'], 'val.txt'), 'w')

    for i in range(num):
        name = total_xml[i][:-4] + '\n'
        if i in trainval:
            ftrainval.write(name)
            if i in train:
                ftrain.write(name)
            else:
                fval.write(name)
        else:
            ftest.write(name)

    ftrainval.close()
    ftrain.close()
    fval.close()
    ftest.close()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • “定投课堂”听Liuda老师讲解,并写下听后感: 共读《反脆弱》的原因:这本书是核心,通过这本书可以在最短的时间了...
    蒋丽云阅读 244评论 0 0
  • 今天是平静的一天,遇到的小姐姐都很温柔!
    舒克Fineyoga阅读 118评论 0 0
  • 昨天到底是忘了日更了。 因为学校活动要制作美篇,要求当天出来,所以昨天就异常忙碌,好不容易把当天的活动美篇制作好,...
    公子赵阅读 190评论 0 1
  • 这是抗癌露露写给妻子的一首诀别的歌曲,作者想去拥有和妻子在一起的美好但又不敢去触碰这份情感所带来的失去的痛。字里行...
    瑜_3170阅读 285评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 130,556评论 2 7

友情链接更多精彩内容