PASCAL VOC数据集分割为小样本数据集代码

简介: PASCAL VOC数据集分割为小样本数据集代码

代码来自


FSCE


import argparse
import copy
import os
import random
import numpy as np
import xml.etree.ElementTree as ET
from fvcore.common.file_io import PathManager
# 类名
# VOC_CLASSES = ['air-hole', 'bite-edge', 'broken-arc', 'crack', 'hollow-bead', 'overlap','slag-inclusion', 'unfused']
VOC_CLASSES = ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches']
def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("--seeds", type=int, nargs="+", default=[1, 30],
                        help="Range of seeds")
    args = parser.parse_args()
    return args
def generate_seeds(args):
    data = []
    data_per_cat = {c: [] for c in VOC_CLASSES}
    # for year in [2007, 2012]:
    for year in [2007]:
        # data_file = 'datasets/VOC{}/ImageSets/Main/trainval.txt'.format(year)
        data_file = './VOC2007/ImageSets/Main/trainval.txt'
        # data_file = 'datasets / VOC2007{} / ImageSets / Main / trainval.txt'.format(year)
        with PathManager.open(data_file) as f:
            # fileids = np.loadtxt(f, dtype=np.str).tolist()
            fileids = np.loadtxt(f, dtype=np.str_).tolist()
        data.extend(fileids)
    for fileid in data:
        # year = "2012" if "_" in fileid else "2007"
        year = 2007
        dirname = os.path.join("./", "VOC{}".format(year))
        anno_file = os.path.join(dirname, "Annotations", fileid + ".xml")
        tree = ET.parse(anno_file)
        clses = []
        for obj in tree.findall("object"):
            cls = obj.find("name").text
            clses.append(cls)
        for cls in set(clses):
            data_per_cat[cls].append(anno_file)
    result = {cls: {} for cls in data_per_cat.keys()}
    shots = [1, 2, 3, 5, 10]
    for i in range(args.seeds[0], args.seeds[1]):
        random.seed(i)
        for c in data_per_cat.keys():
            c_data = []
            for j, shot in enumerate(shots):
                diff_shot = shots[j] - shots[j-1] if j != 0 else 1
                shots_c = random.sample(data_per_cat[c], diff_shot)
                num_objs = 0
                for s in shots_c:
                    if s not in c_data:
                        tree = ET.parse(s)
                        file = tree.find("filename").text
                        year = tree.find("folder").text
                        # name = 'datasets/{}/JPEGImages/{}'.format(year, file)
                        year = 'VOC2007'
                        name = 'datasets/{}/JPEGImages/{}'.format(year, file)
                        print(name)
                        c_data.append(name)
                        for obj in tree.findall("object"):
                            if obj.find("name").text == c:
                                num_objs += 1
                        if num_objs >= diff_shot:
                            break
                # print(c_data)
                result[c][shot] = copy.deepcopy(c_data)
        save_path = 'datasets/vocsplit/seed{}'.format(i)
        os.makedirs(save_path, exist_ok=True)
        for c in result.keys():
            for shot in result[c].keys():
                filename = 'box_{}shot_{}_train.txt'.format(shot, c)
                with open(os.path.join(save_path, filename), 'w') as fp:
                    fp.write('\n'.join(result[c][shot])+'\n')
if __name__ == '__main__':
    args = parse_args()
    generate_seeds(args)
目录
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
视觉 注意力机制——通道注意力、空间注意力、自注意力
本文介绍注意力机制的概念和基本原理,并站在计算机视觉CV角度,进一步介绍通道注意力、空间注意力、混合注意力、自注意力等。
11726 58
|
XML 存储 数据格式
【30】yolov5的数据集准备 | 处理Pascal voc格式的数据集
【30】yolov5的数据集准备 | 处理Pascal voc格式的数据集
681 0
【30】yolov5的数据集准备 | 处理Pascal voc格式的数据集
|
9月前
|
Prometheus 监控 前端开发
Grafana 安装配置教程,让你的 Prometheus 监控数据变得更美观
《Grafana安装配置教程,让你的Prometheus监控数据变得更美观》简介: Grafana是一个开源的度量分析与可视化工具,支持多种数据源(如Prometheus),提供丰富的可视化功能和警报机制。本文详细介绍了Grafana的安装、汉化方法及模板使用,帮助用户轻松创建美观、灵活的数据面板,并实现数据的协作与共享。通过Docker镜像、配置文件修改或替换前端页面等方式实现汉化,让用户更便捷地使用中文界面。此外,还提供了导入JSON格式模板的具体步骤,方便快速搭建仪表盘。
858 2
|
机器学习/深度学习 数据采集 存储
【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)
【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)
425 0
|
关系型数据库 MySQL Serverless
PolarDB MySQL版深度评测报告
我首次深度体验了阿里云PolarDB MySQL版,在Serverless与HTAP(混合事务/分析处理)两大场景中对其进行了评测。Serverless展现出了优秀的资源弹性和成本效益,能根据业务负载自动调整,确保业务连续性的同时降低成本。而在HTAP场景下,通过列存索引技术,PolarDB不仅保持了高性能的事务处理能力,还显著加速了数据分析速度,完美融合了OLTP与OLAP需求。总体而言,PolarDB MySQL版凭借其卓越的云原生特性和兼容性,是企业数据库升级的理想选择。
|
机器学习/深度学习 数据处理 Python
【Python】已解决:FutureWarning: Function get_feature_names is deprecated; get_feature_names is deprecated
【Python】已解决:FutureWarning: Function get_feature_names is deprecated; get_feature_names is deprecated
402 0
|
Oracle 关系型数据库 MySQL
MYSQL-多表联合查询汇总
MYSQL-多表联合查询汇总
时间序列分析实战(十一):ECM误差修正模型
时间序列分析实战(十一):ECM误差修正模型
|
API 计算机视觉 开发者
【Python】已解决:(pip安装PIL库报错) ERROR: Could not find a version that satisfies the requirement PIL (from v
【Python】已解决:(pip安装PIL库报错) ERROR: Could not find a version that satisfies the requirement PIL (from v
2191 0
|
安全 Linux 数据安全/隐私保护
Centos虚拟机安装配置与MobaXterm工具及Linux常用命令(上)
Centos虚拟机安装配置与MobaXterm工具及Linux常用命令(上)
366 1