raw2voc数据集格式处理

低光图像目标检测论文:YOLO in the Dark - Domain Adaptation Method for Merging Multiple Models阅读笔记 论文链接:https://link.springer.com/chapter/10.1007/978-3-030-58589-1_21 来源:ECCV 2020 Abstract 生成模型来处理新的可视化任务需要额外的数据集,这需要花费大量的精力来创建。我们提出了一种域自适应的方法来合并多个模型,比创建一个额外的数据集更省力。该方法将预先训练好的模型与生成模型相结合,在不增加数据集的情况下,将潜在特征反馈给粘合层进行训练。我们还提出了一个生成模型,它是通过从预先训练的模型中提取知识来创建的。这使得数据 阅读详情

前言

用深度学习做目标检测,经常会接触到pascal voc这个数据集。目前很多开源项目对数据的处理格式都采用和voc一样的格式,逐渐这成为了一种标准数据处理格式,这里记一次制作符合自己需求的VOC格式数据集。

VOC数据集简介

文件夹树结构

└── VOCdevkit     #根目录
    └── VOC2007   #不同年份的数据集,这里只下载了2007的,还有2012等其它年份的
        ├── Annotations        #存放xml文件,与同级文件夹JPEGImages中的图片相对应,其中主要记录了图片包含内容,比如图片内含有目标对象的分类、坐标等
        ├── ImageSets          #存放的是每一种类型的challenge对应的图像数据
        │   ├── Action            #存放的是人的动作
        │   ├── Layout           #存放的是具有人体部位的数据
        │   ├── Main              #存放的是目标物体识别的数据
        │   └── Segmentation     #存放的是可用于分割的数据
        ├── JPEGImages         #存放源图片
        ├── SegmentationClass  
        └── SegmentationObject 
        SegmentationClass、SegmentationObject 这两个文件夹下保存了物体分割后的图片,在目标检测中没有用到,这里就不多做介绍

数据集制作

原始数据预览

原始数据目录结构
原始数据结构
train_dataset文件夹内容
在这里插入图片描述
train_labels.csv标签数据
在这里插入图片描述

voc格式数据制作

JEPGImages

把训练图片数据放进文件夹JEPGImages就行了

Annotations

  1. 同照片坐标数据合并
    如:(311 707 472 842) ---> (311,707,472,842 311,707,472,842)
    #合并相同图片的行,并规整数据格式
    def obj_to_merge1(df,col1,col2):
        _line = str(list(df[str(col2)]))
        __line = _line.replace('[','').replace(']','').replace("'",'').replace(',','.').replace(' ',',').replace('.,',' ')
        df_ = pd.DataFrame({'id':[df[str(col1)].values[0]],'label':[__line]})
        return df_
        
    def obj_to_merge2(df,col1,col2):
        id_list = df[str(col1)].value_counts().keys()
        df_ = pd.DataFrame()
        for i in id_list[:]:
            _df = df[df[str(col1)] == i]
            __df = obj_to_merge1(_df,col1,col2)
            df_ = pd.concat([df_,__df])
        df_.index = range(len(df_))
        return df_
    
    处理过后的train_labels.csv数据格式
    在这里插入图片描述
  2. 获取图片尺寸
    img_path = '../JPEGImages/' 
    img_size = []
    for i in train.id:
        _ = cv2.imread(img_path + i)
        __ = str(_.shape).replace('(','').replace(')','')
        img_size.append(__)
    
    获取尺寸之后数据格式
    在这里插入图片描述
  3. 生成xml文件
    xml标准格式如下
    在这里插入图片描述
    生成代码
    # 提取每张图片的名称,和对象坐标,图片尺寸
    def obj_coordinate(img_label_line,col1,col2,col3):
        img_id = img_label_line[str(col1)]
        obj = img_label_line[str(col2)]
        obj_ = obj.split(' ')
        img_size = img_label_line[str(col3)]
        return img_id,obj_,img_size
    
    path_xml = '../Annotations/'
    new_ann = train.copy()
    for i in range(len(new_ann)):
        _ = new_ann.iloc[i,:]
        img_ann = obj_coordinate(_,'id', 'label','img_size')
        
        ob = ''
        img_name = img_ann[0]                            # 图像名称
        classes = 'person'                                       # 对象名称
        size = img_ann[-1].replace(' ','').split(',')    # 尺寸信息
        objs = img_ann[1]                                # 对象坐标
    
        # object个数为1时
        if len(objs)==1:
            cdte = objs[0].split(',')
            test_xml = s2.format(img_name,size[1],size[0],size[2],classes,cdte[0],cdte[1],cdte[2],cdte[3],ob)
            f = open(path_xml+img_name[:-4]+'.xml','w')
            f.write(test_xml)
            f.close()
    
        # object个数大于1个时
        if len(objs)>1:
            for i in range(1,len(objs)):
                cdte = objs[1].split(',')
                cdteB = objs[i].split(',')
                ob += '\n' + s1.format(classes,cdteB[0],cdteB[1],cdteB[2],cdteB[3])
                test_xml = s2.format(img_name,size[1],size[0],size[2],classes,cdte[0],cdte[1],cdte[2],cdte[3],ob)
    
            f = open(path_xml+img_name[:-4]+'.xml','w')
            f.write(test_xml)
            f.close()
    
    文件预览
    在这里插入图片描述
    获取的xml文件格式如下
    在这里插入图片描述

ImageSets

生成Main文件夹下四个文件
- test.txt:测试集 
- train.txt:训练集 
- val.txt:验证集 
- trainval.txt:训练和验证集

代码文件

data_path = 'data/pro_data/'
trainval_percent = 0.5  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets/Main'  
total_xml = os.listdir(data_path + 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(data_path+txtsavepath+'/trainval.txt', 'w')  
ftest = open(data_path+txtsavepath+'/test.txt', 'w')  
ftrain = open(data_path+txtsavepath+'/train.txt', 'w')  
fval = open(data_path+txtsavepath+'/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()

生成文件夹预览
在这里插入图片描述
生成正负样本

person_trainval = open(data_path+txtsavepath+'/person_trainval.txt', 'w')  
person_test = open(data_path+txtsavepath+'/person_test.txt', 'w')  
person_train = open(data_path+txtsavepath+'/person_train.txt', 'w')  
person_val = open(data_path+txtsavepath+'/person_val.txt', 'w')  

for i in list_:  
    name=total_xml[i][:-4]
    if name+'.jpg' in new_ann.id.values:
        if i in trainval:  
            person_trainval.write(name+' 1\n')  
            if i in train:  
                person_train.write(name+' 1\n')  
            else:  
                person_val.write(name+' 1\n')  
        else:  
            person_test.write(name+' 1\n')   
    else:
        if i in trainval:  
            person_trainval.write(name+' -1\n')  
            if i in train:  
                person_train.write(name+' -1\n')  
            else:  
                person_val.write(name+' -1\n')  
        else:  
            person_test.write(name+' -1\n')   

person_trainval.close()  
person_train.close()  
person_val.close()  
person_test.close()

生成文件夹预览
在这里插入图片描述
至此,就已经制作完成我们目标检测项目所需要的VOC格式数据集

告别PASCAL VOC格式:用Labelme标注+Python脚本,5分钟搞定UNet多分类数据集 本文介绍了一种高效的工作流,使用Labelme标注工具和Python脚本快速生成UNet多分类数据集,绕过传统的PASCAL VOC格式。通过详细的步骤和代码示例,帮助用户5分钟内完成数据准备,提升语义分割任务的效率。 阅读详情

相关推荐

Halcon、YOLO、COCO数据集格式混用指南:一个项目里的多格式协同实战

本文详细介绍了在工业视觉项目中如何高效处理Halcon、YOLO和COCO数据集格式的混用问题。通过实战案例和技术剖析,展示了从原始标注到多格式转换的全流程解决方案,包括核心转换技术、性能优化技巧和工具链最佳实践,帮助开发者实现多框架协同工作,提升工业质检系统的开发效率。

ailiao2015的博客 408

transformers库的使用【三】对预训练模型进行微调

1、准备一个数据集 在这里将使用Datasets库来下载和准备IMDB数据集 首先,使用load_dataset函数来下载数据集 from datasets import load_dataset raw_datasets = load_dataset("imdb") 这里创建的raw_datasets对象是一个包三个键的字典,其中包含:train、test和unsupervised。 在这里我们将使用train进行训练,使用test进行验证 DatasetDict({ train

一个小菜鸟的博客 9874

目标检测常见数据集格式(YOLO、VOC、COCO)

本文详细介绍了YOLO / COCO / VOC三种格式的label含义及可视化代码

向上生长的程序媛的博客 1万+

NYU raw 数据集的处理

最近在跑单目深度估计的代码,其中用到了NYUv2数据集。NYUv2数据集有1449对RGB图和密集标注的深度图,但是该数据集数量较少,对于transformer等需要大量数据集的网络结构而言需要额外使用raw数据集。 首先下载NYU官网的toolbox工具,然后再把[https://blog.youkuaiyun.com/billypan/article/details/100926643]这篇博客里面的run.m复制进去,出错了参考[https://blog.youkuaiyun.com/weixin_39098367/arti

xumengchu129的博客 3656

无人机UAV数据集构建:VOC格式适配与小目标检测实战指南

VOC格式是目标检测中一种经典且稳定的标注结构,其整数坐标语义和扁平文件组织方式,为边缘部署、跨框架迁移和工程协同提供了确定性保障;而无人机(UAV)影像具有强透视畸变、大动态光照、多尺度目标及运动模糊等物理特性,导致通用数据集(如COCO、Aeroscapes)难以直接适用。因此,构建适配UAV成像规律的VOC风格数据集,本质是建立一套‘物理约束→标注规范→预处理流水线→质量量化’的闭环体系,支撑YOLOv8等主流模型在电力巡检、光伏缺陷识别、风电叶片检测等低空智能场景中实现高鲁棒性小目标检测。

weixin_30800807的博客 307

原始图像文件 Raw 文件

有三四个Raw图像,不同相机的,原始图像文件包含从数字相机、扫描器或电影胶片扫描仪的图像传感器所处理数据。之所以这样命名,是因为他们尚未被处理,未被打印或用于编辑。

Python——提取Raw格式视频指定像素时序数据并做成数据集

Python——提取Raw格式视频指定像素时序数据并做成数据集 文章目录Python——提取Raw格式视频指定像素时序数据并做成数据集前言一、流程可视化1.制作掩膜2.用掩膜提取数据3.其他类型数据重复上述流程4.提取数据随便看看二、代码三、使用*最后*: 前言 最近在尝试对实验室的一些数据用时序的方法做分类,由于没有通用的公开数据集,所以需要将实验数据自制为小数据集,但又找不到类似的开源代码来实现这一过程,就只能自己写一个了。这部分代码主要实现的是: 读取raw格式的多张图像(如:240×360×1

weixin_42686816的博客 5011

minist数据集只能的数据集文件raw.zip

minist数据集只能的数据集文件raw.zip

DOTA数据集应用于Yolo-v4(-Tiny)系列1——切割图片与转换Annotation格式

DOTA数据集的切割和标签格式转YOLO

weixin_41029027的博客 4875

读取、显示含有多帧图像的raw文件

读取、显示含有多帧图像的raw文件,并可以用鼠标动态框出图像的感兴趣区域。

图像处理常用的标准测试图片转raw

在优快云上下的标准测试图片,用PS转成了RAW格式,用PS打开.bmp再另存为.raw即可,raw可以用PS打开,要注意选择打开的图像宽和高,还有就是彩色的为三通道,这样才会看到图像

Labelme视频标注实战:从单帧打标到生成VOC/COCO格式数据集全流程

本文详细介绍了使用Labelme进行视频标注的全流程,包括单帧打标、标注文件转换及生成VOC/COCO格式数据集。通过环境配置、标注技巧、格式转换脚本和自动化流水线构建,帮助开发者高效完成计算机视觉项目的标注工作,提升模型训练前的数据准备效率。

weixin_30564785的博客 375

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2565

目标检测数据集标准化:VOC、COCO、YOLO格式统一与高效管理实践

在计算机视觉领域,目标检测是识别图像中物体位置与类别的核心技术。其实现依赖于高质量的数据集,而数据集的标注格式(如VOC的XML、COCO的JSON、YOLO的TXT)与组织结构直接影响模型开发的效率。不同格式间的转换、数据集划分与路径管理常耗费大量工程时间。通过构建标准化的数据集仓库,统一提供多种主流格式与规范目录,能极大简化数据预处理流程。这种实践尤其适用于需要快速验证模型、进行多数据集融合训练或对比实验的场景,让开发者能聚焦于核心的模型调优与算法创新,从而提升整体研发效能。

weixin_30328063的博客 327

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

大厂案例:快手AI人才管理系统的架构设计与效果

凌晨两点刷简历的HR、说不清“团队离职率高”原因的业务leader、不知道“该学什么”的员工——这些人力资源场景中的“痛点”,曾是快手高速增长期的真实写照。当员工规模从几千扩张到几万,传统HR系统的“经验驱动”模式彻底失效。2021年,快手启动AI人才管理系统建设,用“数据+算法”重构招聘、培养、绩效、留存全流程。本文将拆解这套系统的架构设计逻辑核心技术实现,以及真实业务效果AI如何让HR从“事务执行者”变成“战略伙伴”?

大模型应用工坊 1712

MediaPipe Model Maker 训练数据集实战:3 个格式、2 道预处理、1 条可复现的训练路径

如果你的训练卡在"数据"这一环,MediaPipe Model Maker 自带的 `mediapipe/model_maker/` 工具链值得先看一遍:图像分类用目录结构直接吃数据,目标检测支持 COCO 与 Pascal VOC 两种标注格式,数据增强、TFRecord 缓存、模型导出全部封装在 Python API 里。下面按"先跑通、再排错、后扩量"的顺序,把数据侧的完整路径走一遍。 #

gitblog_00340的博客 813

汽车IVI中控开发入门及进阶(三十八):手机投屏HiCar开发

为了兼容这部分手机,车机端在向手机端发送USB控制命令字的同时,需要启动mDNS Server,广播车机端IP地址和HiCar SDK侦听的Server Socket端口(IP地址和端口在HiCar SDK初始化USB driver时,告知车机),在检测到手机断开USB连接时关闭mDNS Server。厂商在集成HiCar SDK开发HMI应用时,不可避免会使用到智能座舱的敏感权限,例如位置权限、摄像头权限、麦克风权限等,SDK初始化时,厂商HMI应用需要设置必要的车机参数供SDK使用。

码农17年的博客 1077

YOLOv5 v6.1 自定义数据集训练:VOC转YOLO格式脚本解析与3个常见报错解决

本文详细解析了YOLOv5 v6.1自定义数据集训练中VOC转YOLO格式的核心脚本,包括坐标归一化公式和增强版Python脚本实现。针对开发者常见的3个报错(ZeroDivisionError、坐标越界、类别映射错误)提供了具体解决方案,并分享了并行处理、可视化验证等高级技巧,帮助提升目标检测模型的训练效率。

weixin_34267123的博客 290

Qt | 开发过程中总结的经验

关于如何判断自己的Qt库是多少位,有个误区就是很多人要么看成了QtCreator的关于信息中列出的位数,要么以为自己是64位的系统就认为是64位的Qt,最终要在Qt构建套件中查看具体位数,大概从Qt5.14开始基本上很少提供32位的库,尤其是Qt6.0以后基本上默认就是只有64位的库了,这也是顺应时代潮流,毕竟不久的将来(个人预计2030年以前)基本上32位的系统占比不超过1%,放心大胆的用64位的库吧,抛弃烦人的32位以及XP系统。Qt常用类的头文件的函数看完学完使用一遍并加以融会贯通,月薪30K起步。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 495

第三章-python基础语法

有C语言基础应该这样学 Python。

qq_46187594的博客 1177

YOLOv11数据集准备与标注格式转换实战指南

目标检测是计算机视觉的核心任务,其性能高度依赖数据质量。YOLOv11作为当前先进的检测框架,对数据格式的灵活支持带来了新的工程挑战。数据标注涉及坐标归一化、格式转换等关键技术点,其中VOC XML到YOLO格式的转换需要特别注意边界框坐标的归一化处理。在工业场景中,PCB缺陷检测等项目常遇到多源异构数据问题,包括COCO JSON、VOC XML等不同标注格式。通过Python脚本实现自动化格式转换,配合OpenCV可视化校验,能有效避免标注偏移等常见问题。合理的目录结构设计和版本控制策略,是保证工业级检

android_mylove的专栏 342

数控系统(CNC)系列:Hurco VMX42SR_(11).加工准备流程

在开始使用Hurco VMX42SR进行加工之前,首先需要对机床进行初始设置。这包括机床的水平调整、电源连接和控制系统的基本配置。正确的初始设置是确保加工精度和机床安全运行的前提。

2401_87715305的博客 841

voc2007_extract_car_2_kitti

voc2007_extract_car_label 将上一步提取到的car转化为KITTI格式 1,第一步 获取所有图片的名,同时删除后缀。我这里用了比较笨的方法就是先把图片名保存,然后在gedit里面替换 保存图片名python代码: import os dirlist = os.listdir("/home/mahnx0/data/voc_extract_car/train_i...

男儿何不带吴钩 收取关山五十州 338

37、免驱动USB双目同步测距3D活体深度检测和RV1126结合V4L开发USB摄像头使用

基本思想:需要使用双目摄像头在rv1126上进行活体检测,然后将画面实时返回到桌面上,记录一下。第二步:刷机rv1126开发板系统和ssh远程连接,见参考目录。第一步:购买可见光的红外摄像头,见参考连接,在PC端测试可用。

sxj731533730 2621

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

小白菜病害检测数据集构建与YOLOv8模型训练指南

目标检测技术在农业领域具有重要应用价值,特别是农作物病害识别场景。通过YOLO等深度学习算法,可以实现病害叶片的实时检测与分类。本文基于1863张高精度标注的小白菜病害数据集,详细解析了数据采集规范、VOC/YOLO双格式标注要点,以及YOLOv8模型的最佳训练配置。数据集特别注重病害样本与健康样本的平衡分布,并包含多角度拍摄的叶片图像,有效提升模型泛化能力。在智慧农业实际部署中,该方案使病害识别准确率提升40%,同时减少25%的农药使用量。关键技术点涵盖数据增强策略、模型优化方法以及边缘计算部署方案,为农

weixin_30487201的博客 306

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 常用软件破解-持续更新
下一篇: Deepin手札
奥特曼不秃头
博客等级 码龄10年 24粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥特曼不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值