通过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…

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地址的转换 作业喵: …

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

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

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

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

VMware中Ubuntu磁盘空间的清理

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

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

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

第2章 矩阵

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

通过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…

CH03_布局

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

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

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

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

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

科技赋能,智慧粮仓视频综合管理方案助力粮食安全

一、背景需求 随着科技的快速发展,智慧化、智能化管理已成为各行各业的重要发展方向。粮食仓储作为国家粮食安全战略的重要组成部分,其管理的科学性和智能化水平直接关系到粮食的存储安全、品质保障和运营效率。 因此,TSINGSEE青犀提出一套…

Linux文件和目录常用命令

1.操作命令 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 > 和 >> 管道 | 1.1 终端实用技巧 1>自动补全 在敲出 文件/目录/命令 的前几个字母之后,按下…

pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)

pdf怎么压缩的小一点?首先,PDF文件可以进行压缩。职场文档传阅还是比较建议PDF压缩,PDF文件可以无障碍访问,保持原始文本、图像和表格,无需担心展示效果差异等等优势,成为我们日常工作中不可或缺的一部分。…

阿里云盾占用资源的问题AliYunDun,AliYunDunUpdate

目录 1.关闭AliYunDunUpdate,AliYunDun,AliYunDunMonitor。 2.发现报错如下 3.打开阿里云安全中心控制台 4.成功解决 2.开启云盾命令 “如果您在解决类似问题时也遇到了困难,希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您…

哪种SSL证书可以快速签发保护http安全访问?

用户访问网站,经常会遇到访问http网页时,提示网站不安全或者不是私密连接的提示,因为http是使用明文传输,数据传输中可能被篡改,数据不被保护,通常需要SSL证书来给数据加密。 SSL证书的签发速度&#xff0…

使用JWT双令牌机制进行接口请求鉴权

在前后端分离的开发过程中,前端发起请求,调用后端接口,后端在接收请求时,首先需要对收到的请求鉴权,在这种情况先我们可以采用JWT机制来鉴权。 JWT有两种机制,单令牌机制和双令牌机制。 单令牌机制服务端…