通过albumentation对目标检测进行数据增强(简单直接)

albumentation官方文档看不懂?xml文件不知道如何操作?下面只需要修改部分代码即可上手使用

要使用这个方法之前需要按照albumentation这个库还有一些辅助库,自己看着来安装就行

pip install albumentation
pip install opencv-python
pip install json
pip install xml
import os
import cv2
import json
import xml.etree.ElementTree as ET
import albumentations as Adef data_aug(source_annotated, data_aug_annotated, times=3):transform = A.Compose([A.RandomBrightnessContrast(p=0.3),  # 随机亮度对比度A.OneOf([A.GaussNoise(), ], p=0.5),  # 高斯噪声A.OneOf([A.MotionBlur(p=0.2),  # 运动模糊A.MedianBlur(blur_limit=3, p=0.5),  # 中值模糊A.Blur(blur_limit=3, p=0.2),  # 模糊], p=0.5),A.RandomBrightnessContrast(p=0.5),   A.RandomCrop(300, 300, p=0.5),  # 随机裁剪A.RandomRotate90(p=0.5),  # 随机旋转90度A.HorizontalFlip(p=0.5),  # 水平翻转A.VerticalFlip(p=0.5),  # 垂直翻转], bbox_params=A.BboxParams(format='pascal_voc', min_area=0., min_visibility=0., label_fields=['class_labels']))for xml_file in os.listdir(source_annotated):if xml_file.endswith(".xml"):for nth in range(times):tree = ET.parse(os.path.join(source_annotated, xml_file))root = tree.getroot()image_file = root.find('filename').textimage_path = os.path.join(source_annotated, image_file)image = cv2.imread(image_path)bboxes = []class_labels = []for obj in root.findall('object'):label = obj.find('name').textbbox = obj.find('bndbox')xmin = int(bbox.find('xmin').text)ymin = int(bbox.find('ymin').text)xmax = int(bbox.find('xmax').text)ymax = int(bbox.find('ymax').text)bboxes.append([xmin, ymin, xmax, ymax])class_labels.append(label)transformed = transform(image=image, bboxes=bboxes, class_labels=class_labels)transformed_image = transformed['image']transformed_bboxes = transformed['bboxes']save_base_name = os.path.splitext(image_file)[0] + "_" + str(nth)cv2.imwrite(os.path.join(data_aug_annotated, save_base_name + ".jpg"), transformed_image)# 更新XML文件中的变换数据root.find('filename').text = save_base_name + ".jpg"root.find('path').text = os.path.join(data_aug_annotated, save_base_name + ".jpg")for obj, tb in zip(root.findall('object'), transformed_bboxes):bbox = obj.find('bndbox')bbox.find('xmin').text = str(int(tb[0]))bbox.find('ymin').text = str(int(tb[1]))bbox.find('xmax').text = str(int(tb[2]))bbox.find('ymax').text = str(int(tb[3]))tree.write(os.path.join(data_aug_annotated, save_base_name + ".xml"))if __name__ == "__main__":source_annotated = "data_annotated/"  # 原始的图片、标签路径data_aug_annotated = "data_aug_annotated" # 处理后的图片、标签路径times = 3  data_aug(source_annotated, data_aug_annotated, times)

1.需要增强的图片标签文件存放形式

 

标签和文件放在统一文件夹下,同一图片和标签命名对应相同 

2.修改需要增强的要求,如旋转,切割等

            A.RandomBrightnessContrast(p=0.3),  # 随机亮度对比度A.OneOf([A.GaussNoise(), ], p=0.5),  # 高斯噪声A.OneOf([A.MotionBlur(p=0.2),  # 运动模糊A.MedianBlur(blur_limit=3, p=0.5),  # 中值模糊A.Blur(blur_limit=3, p=0.2),  # 模糊], p=0.5),A.RandomBrightnessContrast(p=0.5),   A.RandomCrop(300, 300, p=0.5),  # 随机裁剪A.RandomRotate90(p=0.5),  # 随机旋转90度A.HorizontalFlip(p=0.5),  # 水平翻转A.VerticalFlip(p=0.5),  # 垂直翻转

上述已经列出常见增强方式,可通过注释方式对方法进行取舍,代码中的p代表概率,即每一次增强有多少概率使用到这个方法,可通过自己的爱好进行调增,其他方法查询一下均可容易上手使用,这里不作过多的一一讲解了。

3.创建新的文件夹,用作输出路径

通过修改time这个增强倍数,最后写入要输出的文件夹运行即可

最后结果如图所示:

同时会生成对应的xml,简单快捷。 

增强后可通过以下方法将xml转化成训练需要的txt格式

将目标检测标签中的xml转化成训练输入的txt(简单直接)-CSDN博客

希望这篇博文对你有帮助!!!!

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

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

相关文章

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

使用VuePress-Reco快速搭建博客(保姆级)

简介:VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题,可以自由搭建自己的风格,比较方便简洁。 链接:vuepress-reco 准备环境: Node.Js >20.5.0,Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

Android C++系列:Linux信号(二)

PCB的信号集 如果在进程解除对某信号的阻塞之前这种信号产生过多次,将如何处理?POSIX.1允 许系统递送该信号一次或多次。Linux是这样实现的:常规信号在递达之前产生多次只 计一次,而实时信号在递达之前产生多次可以依次放在一个队列里。本文不讨论实时信 号。每个信号只有一…

Kafka介绍及Go操作kafka详解

文章目录 Kafka介绍及Go操作kafka详解项目背景解决方案面临的问题业界方案ELKELK方案的问题日志收集系统架构设计架构设计组件介绍将学到的技能消息队列的通信模型点对点模式 queue发布/订阅 topicKafka介绍Kafka的架构图工作流程选择partition的原则ACK应答机制Topic和数据日志…

0718,TCP协议,三次握手,四次挥手

目录 上课喵: TCP(Transmission Control Protocol,传输控制协议)的状态迁移图 TCP连接的状态迁移图 状态迁移说明: 注意: big_htonl.c 字节序转换 addr.c IP地址的转换 作业喵: …

django命令

Django 的命令行工具 django-admin(或 manage.py 中的 manage 函数)提供了一系列的命令,用于执行各种管理任务。 1. check: 检查项目的 full 路径,确保没有错误配置。 2. compilemessages: 编译 .po 文件中的翻译,生…

Python面试整理-Python中的控制流语句

在Python中,控制流语句用于根据特定的条件或逻辑来控制程序的执行流程。主要的控制流语句包括条件判断(if)、循环(for 和 while)以及其他辅助语句如 break, continue, 和 pass。下面详细介绍这些控制流语句: 1. 条件判断(if 语句) if 语句用于根据一个或多个条件来执行…

前端组件化实践:Vue自定义加载Loading组件的设计与实现

摘要 随着前端技术的飞速发展,组件化开发已成为提高开发效率、降低维护成本的重要方法。本文介绍了前端Vue自定义加载Loading组件的设计思路与实现过程,该组件通过设置gif动画实现加载效果,可广泛应用于页面请求加载场景。通过该组件的实践&…

2024年度上半年中国汽车保值率报告

来源:中国汽车流通协会&精真估 近期历史回顾: 2024上半年房地产企业数智化转型报告.pdf 2024国产院线电影路演数据洞察报告.pdf 空间数据智能大模型研究-2024年中国空间数据智能战略发展白皮书.pdf 2024年全球资产管理报告 2024年中型律师事务所的法…

VMware中Ubuntu磁盘空间的清理

最近发现Ubuntu占用空间过大,在网上找了一些方法,在这里总结一下。 1.删除快照 把不需要的快照删除,但要注意删除快照可能会影响到后续的快照链。每个快照依赖于前面的快照。如果删除一个中间快照,虚拟机可能无法找到完整的差异…

深入解析Linux文件权限管理:掌握`chmod`和`chown`命令

深入解析Linux文件权限管理:掌握chmod和chown命令 深入解析Linux文件权限管理:掌握chmod和chown命令 大纲:摘要:内容: 1. 引言2. 理解文件权限3. 使用chmod命令4. 使用chown命令5. 综合应用6. 常见问题与解决方案7. 结…

零基础入门:创建一个简单的Python爬虫管理系统

摘要: 本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠…

第2章 矩阵

A 乘以此列向量,1的位置依次往下,所以A的列向量全为0 B C、D 取BE 要统一

面经学习(厦门安全狗实习)

个人评价 安全狗主要还是做安全的,所以java开发约等于小厂。后端开发主要使用的技术栈技术sshjsp。 技术可谓是先当的古老,本次面试内容主要以项目为主。也是首次收到面试官的夸奖,面试下来也是非常开心的。 介绍一下实习项目吧&#xff1…

通过libx246 libfaac转换推送RTMP音视频直播流

一、RTMP简介及rtmplib库: RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing…

【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用

体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强&#xf…

Swagger生成Api文档的增强解决方案--knife4j

springboot版本号&#xff1a;2.7.3 knife4j:3.0.2 使用步骤 导入 knife4j 的maven坐标 在pom.xml中添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2…

CH03_布局

第3章&#xff1a;布局 本章目标 理解布局的原则理解布局的过程理解布局的容器掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 ​ WPF 窗口只能包含单个元素。为在WPF 窗口中放置多个元素并创建更贴近实用的用户男面&#xff0c;需要在窗口上放置一个容器&#x…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿

切换效果 页面结构变化 1.需求背景 项目首页存有一个小的轮播模块,保密原因大概只能这么展示,左侧图片右侧文字,后端一次性返回几百条数据(开发环境下,生产环境只会更多).无法使用分页解决,前端需要懒加载防止页面卡顿 写个小demo演示,如下 2.解决思路 获取到数据后,取第一…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…