記錄自寫(xiě)快捷生成voc訓(xùn)練格式腳本

# DESC: 標(biāo)注單類(lèi)數(shù)據(jù)后,生成voc訓(xùn)練格式腳本
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__':
    # 創(chuàng)建文件目錄
    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()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • “定投課堂”聽(tīng)Liuda老師講解,并寫(xiě)下聽(tīng)后感: 共讀《反脆弱》的原因:這本書(shū)是核心,通過(guò)這本書(shū)可以在最短的時(shí)間了...
    蔣麗云閱讀 243評(píng)論 0 0
  • 今天是平靜的一天,遇到的小姐姐都很溫柔!
    舒克Fineyoga閱讀 117評(píng)論 0 0
  • 昨天到底是忘了日更了。 因?yàn)閷W(xué)?;顒?dòng)要制作美篇,要求當(dāng)天出來(lái),所以昨天就異常忙碌,好不容易把當(dāng)天的活動(dòng)美篇制作好,...
    公子趙閱讀 190評(píng)論 0 1
  • 這是抗癌露露寫(xiě)給妻子的一首訣別的歌曲,作者想去擁有和妻子在一起的美好但又不敢去觸碰這份情感所帶來(lái)的失去的痛。字里行...
    瑜_3170閱讀 281評(píng)論 0 0
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,655評(píng)論 2 7

友情鏈接更多精彩內(nèi)容