PaddleDetection

您所在的位置:网站首页 数字标签格式怎么使用 PaddleDetection

PaddleDetection

#PaddleDetection| 来源: 网络整理| 查看: 265

因为模型需要VOC训练集,而数据集只有图片和已制作好的xml文件,那么只能自己进行VOC数据集的再加工,好,开工!

文章目录 voc数据集格式生成VOC数据集的txt文件生成Main文件下的txt文件生成包含jpg和xml信息的txt文件 创建label_list下载PaddleDetection包修改预训练模型的Configs配置修改num_classes修改pascalvoc_label 上传至AI studio进行训练模型训练

voc数据集格式

文件夹目录如图所示:

---VOC ------creat_txt.py ------txt_write.py ------Annotations ---------n个xml文件 ------ImagesSet ---------Main --------trainval.txt --------train.txt --------test.txt --------val.txt ------JPEGImages ---------n个img文件 生成VOC数据集的txt文件

分别将两个python文件放在VOC文件夹下。

生成Main文件下的txt文件

运行creat_txt.py将会生成Main文件夹下的trainval.txt、train.txt、val.txt、test.txt四个txt文件。 creat_txt.py

import os import random #需要根据自己的目录进行修改 trainval_percent = 0.95 # 训练集验证集总占比 train_percent = 0.9 # 训练集在trainval_percent里的train占比 xmlfilepath = r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\Annotations' txtsavepath = r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\ImageSets/Main' total_xml = os.listdir(xmlfilepath) num = len(total_xml) list = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list, tv) train = random.sample(trainval, tr) ftrainval = open(r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\ImageSets\Main\trainval.txt', 'w') ftest = open(r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\ImageSets\Main\test.txt', 'w') ftrain = open(r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\ImageSets\Main\train.txt', 'w') fval = open(r'G:\科创及比赛\智能车\数据集\VOC格式数据集\7_17\标志物0717\data\limit\VOC2007\ImageSets\Main\val.txt', 'w') for i in list: 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() 生成包含jpg和xml信息的txt文件

运行txt_write.py根据在Main文件夹中划分好的数据集进行位置索引,生成含有图像及对应的XML文件的地址信息的文件。 txt_write.py(不需要修改路径)

import os import re import random devkit_dir = './' output_dir = './' def get_dir(devkit_dir, type): return os.path.join(devkit_dir, type) def walk_dir(devkit_dir): filelist_dir = get_dir(devkit_dir, 'ImageSets/Main') annotation_dir = get_dir(devkit_dir, 'Annotations') img_dir = get_dir(devkit_dir, 'JPEGImages') trainval_list = [] train_list = [] val_list = [] test_list = [] added = set() for _, _, files in os.walk(filelist_dir): for fname in files: print(fname) img_ann_list = [] if re.match('trainval.txt', fname): img_ann_list = trainval_list elif re.match('train.txt', fname): img_ann_list = train_list elif re.match('val.txt', fname): img_ann_list = val_list elif re.match('test.txt', fname): img_ann_list = test_list else: continue fpath = os.path.join(filelist_dir, fname) for line in open(fpath): name_prefix = line.strip().split()[0] print(name_prefix) added.add(name_prefix) #ann_path = os.path.join(annotation_dir, name_prefix + '.xml') ann_path = annotation_dir + '/' + name_prefix + '.xml' print(ann_path) #img_path = os.path.join(img_dir, name_prefix + '.jpg') img_path = img_dir + '/' + name_prefix + '.jpg' assert os.path.isfile(ann_path), 'file %s not found.' % ann_path assert os.path.isfile(img_path), 'file %s not found.' % img_path img_ann_list.append((img_path, ann_path)) print(img_ann_list) return trainval_list, train_list, val_list, test_list def prepare_filelist(devkit_dir, output_dir): trainval_list = [] train_list = [] val_list = [] test_list = [] trainval, train, val, test = walk_dir(devkit_dir) trainval_list.extend(trainval) train_list.extend(train) val_list.extend(val) test_list.extend(test) #print(trainval) with open(os.path.join(output_dir, 'trainval.txt'), 'w') as ftrainval: for item in trainval_list: ftrainval.write(item[0] + ' ' + item[1] + '\n') with open(os.path.join(output_dir, 'train.txt'), 'w') as ftrain: for item in train_list: ftrain.write(item[0] + ' ' + item[1] + '\n') with open(os.path.join(output_dir, 'val.txt'), 'w') as fval: for item in val_list: fval.write(item[0] + ' ' + item[1] + '\n') with open(os.path.join(output_dir, 'test.txt'), 'w') as ftest: for item in test_list: ftest.write(item[0] + ' ' + item[1] + '\n') if __name__ == '__main__': prepare_filelist(devkit_dir, output_dir) 创建label_list

在这里插入图片描述

下载PaddleDetection包 git clone https://gitee.com/paddlepaddle/PaddleDetection.git

PD0.2完整资源包

修改预训练模型的Configs配置

在PaddleDetection文件夹中操作。

修改num_classes

修改所用模型ssd_mobilenet_v1_voc.yml配置文件,在PaddleDetection-release-0.2\configs\ssd路径下找到配置文件,修改为自己数据集的的num_classes: num_classes = (label_class) + 1(background) 在这里插入图片描述

修改pascalvoc_label

修改voc.py运行文件,在PaddleDetection-release-0.2\ppdet\data\source路径下找到配置文件,修改 修改为自己模型的label: 在这里插入图片描述到这里就完成了数据集的创建!

上传至AI studio进行训练

在这里插入图片描述

模型训练

PaddleDetcion——红绿灯检测:PaddleDetection-SSD_Mobilenet-VOCdataset



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3