DataProcess-VOC数据图像和标签一起进行Resize

VOC数据图像和标签一起进行Resize

参加检测比赛的时候,很多时候工业原始数据尺度都比较大,如果对数据不提前进行处理,会导致数据在加载进内存时花费大量的时间,所以在执行训练程序之前需要将图像提前进行预处理。对于目标检测的数据,不只是将原始数据进行resize,边界框的坐标也要跟随一起进行resize。

如下,是今天测试需要用到的原始图像和他的标签。

2007_002266

<annotation><folder>VOC2012</folder><filename>2007_002266.jpg</filename><source><database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image></source><size><width>500</width><height>373</height><depth>3</depth></size><segmented>1</segmented><object><name>aeroplane</name><pose>Rear</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>231</xmin><ymin>251</ymin><xmax>458</xmax><ymax>346</ymax></bndbox></object><object><name>aeroplane</name><pose>Left</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>5</xmin><ymin>118</ymin><xmax>499</xmax><ymax>258</ymax></bndbox></object>
</annotation>

等比例缩放之后的结果如下。

result

单张图像resize

单张进行预处理的脚本如下。

# -*- coding: utf-8 -*-
# @File  : PreProcessing.py
# @Author: 肆十二
# @Date  : 2023/12/24
# @Desc  : 同步缩放图片(等比例缩放无失真)和xml文件标注的anchor size
import glob
import xml.dom.minidom
import cv2img = cv2.imread("./demo.jpg")
height, width = img.shape[:2]# 定义缩放信息 以等比例缩放到416为例
scale=416/height
height=416
width=int(width*scale)dom = xml.dom.minidom.parse("./demo.xml")
root = dom.documentElement# 读取标注目标框
objects = root.getElementsByTagName("bndbox")for object in objects:xmin=object.getElementsByTagName("xmin")xmin_data=int(float(xmin[0].firstChild.data))# xmin[0].firstChild.data =str(int(xmin1 * x))ymin =object.getElementsByTagName("ymin")ymin_data = int(float(ymin[0].firstChild.data))xmax=object.getElementsByTagName("xmax")xmax_data = int(float(xmax[0].firstChild.data))ymax=object.getElementsByTagName("ymax")ymax_data = int(float(ymax[0].firstChild.data))# 更新xmlwidth_xml=root.getElementsByTagName("width")width_xml[0].firstChild.data=widthheight_xml = root.getElementsByTagName("height")height_xml[0].firstChild.data = heightxmin[0].firstChild.data = int(xmin_data*scale)ymin[0].firstChild.data = int(ymin_data*scale)xmax[0].firstChild.data = int(xmax_data*scale)ymax[0].firstChild.data = int(ymax_data*scale)# 另存更新后的文件with open('demo2.xml', 'w') as f:dom.writexml(f, addindent='  ', encoding='utf-8')# 测试缩放效果img = cv2.resize(img, (width, height))# xmin, ymin, xmax, ymax分别为xml读取的坐标信息left_top = (int(xmin_data*scale), int(ymin_data*scale))right_down= (int(xmax_data*scale), int(ymax_data*scale))cv2.rectangle(img, left_top, right_down, (255, 0, 0), 1)cv2.imwrite("result.jpg",img)

批量resize

下面是批量对VOC格式数据集进行预处理的脚本,处理之后划分为37的比例就可以进行模型训练了。

import glob
import xml.dom.minidom
import cv2
from PIL import Image
import matplotlib.pyplot as plt
import os# 定义待批量裁剪图像的路径地址
IMAGE_INPUT_PATH = r'D:\code\data\JPEGImages'
XML_INPUT_PATH = r'D:\code\data\Annotations_new'
# 定义裁剪后的图像存放地址
IMAGE_OUTPUT_PATH = r'D:\code\data\JPEGImages_out'
XML_OUTPUT_PATH = r'D:\code\data\Annotations_out'
imglist = os.listdir(IMAGE_INPUT_PATH)
xmllist = os.listdir(XML_INPUT_PATH)for i in range(len(imglist)):# 每个图像全路径,这里有改进的空间image_input_fullname = IMAGE_INPUT_PATH + '/' + imglist[i]# xml_input_fullname = XML_INPUT_PATH + '/' + xmllist[i] xml_input_fullname = XML_INPUT_PATH + '/' + imglist[i].replace("jpg", "xml")image_output_fullname = IMAGE_OUTPUT_PATH + '/' + imglist[i]xml_output_fullname = XML_OUTPUT_PATH + '/' + xmllist[i]img = cv2.imread(image_input_fullname)height, width = img.shape[:2]# 定义缩放信息 以等比例缩放到416为例scale=400/heightheight=400width=int(width*scale)dom = xml.dom.minidom.parse(xml_input_fullname)root = dom.documentElement# 读取标注目标框objects = root.getElementsByTagName("bndbox")for object in objects:xmin=object.getElementsByTagName("xmin")xmin_data=int(float(xmin[0].firstChild.data))# xmin[0].firstChild.data =str(int(xmin1 * x))ymin =object.getElementsByTagName("ymin")ymin_data = int(float(ymin[0].firstChild.data))xmax=object.getElementsByTagName("xmax")xmax_data = int(float(xmax[0].firstChild.data))ymax=object.getElementsByTagName("ymax")ymax_data = int(float(ymax[0].firstChild.data))# 更新xmlwidth_xml=root.getElementsByTagName("width")width_xml[0].firstChild.data=widthheight_xml = root.getElementsByTagName("height")height_xml[0].firstChild.data = heightxmin[0].firstChild.data = int(xmin_data*scale)ymin[0].firstChild.data = int(ymin_data*scale)xmax[0].firstChild.data = int(xmax_data*scale)ymax[0].firstChild.data = int(ymax_data*scale)# 另存更新后的文件with open(xml_output_fullname, 'w') as f:dom.writexml(f, addindent='  ', encoding='utf-8')# 测试缩放效果img = cv2.resize(img, (width, height))'''# xmin, ymin, xmax, ymax分别为xml读取的坐标信息left_top = (int(xmin_data*scale), int(ymin_data*scale))right_down= (int(xmax_data*scale), int(ymax_data*scale))cv2.rectangle(img, left_top, right_down, (255, 0, 0), 1)'''cv2.imwrite(image_output_fullname,img)

总结

当前的目标检测框架中,模型方面基本都已经固定下来,YOLO或者RCNN,靠模型很难取得大规模的增点,所以这个时候从图像的角度进行入手显得非常重要,这里推荐大家使用一个专业的切图工具。

链接如下:GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots

碎碎念:数据预处理真的很关键啊,好的数据预处理真的可以节省大量的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

元宇宙持续升温,金蝶推出数字员工破圈而来

作者 | 伍杏玲 “金小蝶&#xff0c;请分析今年企业销售事业部的业绩”。 话音刚落&#xff0c;大屏幕展开一张张账务报表&#xff0c;一位身着西装&#xff0c;举止大方得体的数字人条理清晰地回复&#xff1a;“截至今年10月&#xff0c;企业销售事业部在签单金额、新签收入…

阿里云易立:云原生如何破解企业降本提效难题?

2020年以来&#xff0c;新冠疫情改变了全球经济的运行与人们的生活。数字化的生产与生活方式成为后疫情时代的新常态。今天&#xff0c;云计算已经成为全社会的数字经济基础设施&#xff0c;而云原生技术正在深刻地改变企业上云和用云的方式。如何利用云原生技术帮助企业实现降…

Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架

IOC&#xff08;inversion of control&#xff09;即控制反转&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。IOC-golang 是一款服务于Go语言开发者的依赖注入框架&#xff0c;基于控制反转思路&#xff0c;方便开发人员搭建任何…

开启安全测试评估赛道,永信至诚发布“数字风洞”产品体系

11月19日&#xff0c;永信至诚产品战略发布会上&#xff0c;面向安全测试评估领域的“数字风洞”产品体系战略发布&#xff0c;标志着永信至诚作为网络靶场和人才建设领军企业&#xff0c;再次以“产品乘服务”的价值体系&#xff0c;开启网络安全测试评估专业赛道。 数字化时代…

云上弹性高性能计算,支持生命科学产业高速发展、降本增效

随着云计算技术服务及实践的日趋成熟&#xff0c;越来越多的行业通过上云实现了整个产业的转型升级&#xff0c;正处于黄金时期的生命科学行业也不例外。 作为拥有高数据量和高计算量的行业&#xff0c;生命科学的研究也早已离不开高性能计算&#xff08;High Performance Comp…

为什么生命科学企业都在陆续上云?

生命科学行业正迎来发展的黄金时期。医学的发展和人们对健康的追求&#xff0c;正快速转换为生命科学整个产业链发展的新动能&#xff0c;高性能计算HPC在生命科学研究中扮演着十分重要的角色。同时&#xff0c;随着生命科学行业的快速发展&#xff0c;我们可以看到&#xff0c…

VMware Explore 2022 China,赋能中国企业加速实现云智能

全球领先的企业软件创新者VMware&#xff08;NYSE: VMW&#xff09;的年度技术盛会—— VMware Explore 2022 China于11月8日正式举行。本届大会以“探索多云宇宙”为主题&#xff0c;汇聚云计算领域的顶尖技术专家和创新者&#xff0c;通过150多场解决方案演讲、围绕云基础架构…

政企混合云技术架构的演进和发展

云计算经历十几年的发展&#xff0c;从被认为是“新瓶装旧洒”受到很多怀疑&#xff0c;到在消费互联网领域得到广泛应用&#xff0c;再到传统政企客户普遍认同&#xff0c;并在政务互联网业务领域快速推广&#xff0c;当下已进入到全面替换政企客户传统IT基础架构的攻坚阶段。…

多云管理产品组合VMware Aria,开启多云管理新篇章

今年8月份&#xff0c;VMware Explore美国大会上宣布了多云管理产品组合VMware Aria&#xff0c;宣布之后&#xff0c;市场上关注度非常高&#xff0c;而且受到了热捧。Aria这个名字动听且贴切&#xff0c;中文意思是 “咏叹调”&#xff0c;也就是说要用统一的、一致的曲调来歌…

DataWorks开发ODPS SQL开发生产环境自动补全ProjectName

一、场景描述 DataWorks标准模式下&#xff0c;支持开发环境和生产环境隔离&#xff0c;开发环境和生产环境的数据库表命名有所区别&#xff0c;如果需要在开发环境访问生产环境的数据库表或者跨项目空间A访问项目空间B的表&#xff0c;需要根据以下命名规范严格区分数据库表名…

送外卖也要“黑科技”?阿里移动感知技术应用揭秘

一 背景 作为本地生活的一个重要组成部分&#xff0c;外卖已经进入千千万万的家庭。相信很多小伙伴已经注意到&#xff0c;饿了么的每一个订单&#xff0c;我们都会及时向用户通知这一单现在所处的状态&#xff0c;比如“商户接单”&#xff0c;“骑手到店”&#xff0c;“骑手…

视频需求超平常数 10 倍,却节省了 60% 的 IT 成本投入是一种什么样的体验?

近年来&#xff0c;Serverless 一直在高速发展&#xff0c;并呈现出越来越大的影响力。主流的云服务商也在不断地丰富云产品体系&#xff0c;提供更好的开发工具&#xff0c;更高效的应用交付流水线&#xff0c;更好的可观测性&#xff0c;更细腻的产品间集成&#xff0c;但一切…

打好“三场仗”,数据库新晋厂商石原子胜券在握

纵观数字经济时代&#xff0c;数据规模呈爆发式增长&#xff0c;国产化替代加速发展。据中国信通院《数据库发展研究报告(2021年)》预测&#xff0c;预计到2025年&#xff0c;全球数据库市场规模将达到798亿美元&#xff0c;其中&#xff0c;中国数据库市场总规模将达到688亿元…

基于信通院 Serverless 工具链模型的实践:Serverless Devs

前言 2022 年 6 月 15 日&#xff0c;信通院在中国信通院云原生产业大会上发布《基于无服务器架构的工具链能力要求》标准&#xff0c;至此全球首个云原生 Serverless 开放工具链模型正式发布&#xff01;Serverless Devs [1]作为开源开放的开发者工具积极参与工具链模型建设&…

Serverless 架构落地实践及案例解析

互联网软件架构演进 我们先简单回顾下互联网软件架构的演进之路。 单机部署 在单机部署中&#xff0c;将所有的业务和数据库都部署在一台主机中。 此架构的优点是&#xff1a;开发、部署以及运维都非常简单。缺点是&#xff1a;一旦遇到流量过大或者机器故障&#xff0c;整个…

十年 Python 程序员,初次尝试 Rust:“非常优秀!”

摘要&#xff1a;Python 和 Rust&#xff0c;都是近几年深受开发者喜爱的编程语言&#xff0c;那么作为一个拥有十年 Python 编程经验的开发者来说&#xff0c;初次尝试 Rust 会有怎样的感受呢&#xff1f;链接&#xff1a;https://karimjedda.com/carefully-exploring-rust/声…

让阿根廷队“告吹”的三个球背后,2022 年世界杯暗藏哪些技术玄机?

整理 | 苏宓出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;「足球反着买&#xff0c;别墅靠大海」&#xff0c;昨晚 2022 年卡塔尔世界杯的一场小组赛上&#xff0c;最有看头的阿根廷球队出现惊天冷门&#xff0c;以 1:2 败北沙特阿拉伯队&#xff0c;为此&#x…

科学地花钱:基于端智能的在线红包分配方案

一、前言 本文是作者在1688进行新人红包发放的技术方案总结&#xff0c;基于该技术方案的论文《Spending Money Wisely: Online Electronic Coupon Allocation based on Real-Time User Intent Detection》已经被CIKM2020接收&#xff0c;欢迎交流指正&#xff01; 关于作者 …

为 Serverless Devs 插上 Terraform 的翅膀,实现企业级多环境部署(上)

前言 随着现代化应用的普及和企业上云的深入&#xff0c;项目中会涉及越来越多的云资源使用。企业上云过程中&#xff0c;往往会有平台&#xff08;Platform&#xff09;团队和基础设施&#xff08;Infra&#xff09;团队&#xff1a;平台团队关注业务&#xff0c;根据业务场景…

达摩院打破权威榜单纪录,中文语言理解表现首超人类

11月25日消息&#xff0c;在最新的中文语言理解领域权威榜单CLUE中&#xff0c;阿里AI以86.685的总分成绩创造了新纪录&#xff0c;这是该榜单诞生近三年以来&#xff0c;AI首次超越人类成绩&#xff08;86.678&#xff09;&#xff0c;意味着AI模型的中文语言理解水平达到了新…