当前位置: 首页 > news >正文

数据集扩充增广(分割标签同步) 适用于yolov5到v12的分割数据集和obb数据集,支持同步更新标签(txt) 使用labelme标注的多边形数据集,支持同步更新 (1)

数据集扩充增广(分割标签同步)

适用于yolov5到v12的分割数据集和obb数据集,支持同步更新标签(txt)
使用labelme标注的多边形数据集,支持同步更新标签(json)

小工具,Windows10以上系统可以直接打开使用,无需安装,无需配置环境

翻转、旋转、缩放、拉伸、剪裁、平移、亮度、对比度、饱和度、噪声等多种增广方式,可以组合和自定义方式

可选择增广倍数,生成的图像和标签自定义重命名不会覆盖原数据

可视化增强图像和标签,方便查看是否增强有误

带有手把手教程视频!提供学习参考代码(不含界面)

分割/OBB 数据集增强工具完整说明

下面是这套分割/OBB 数据集扩充工具的功能介绍、使用说明和完整实现代码。


一、工具核心功能表

项目详情
适用场景YOLOv5~v12 分割/OBB 数据集、Labelme 多边形标注数据集
支持标签格式YOLO-seg TXT、YOLO-obb TXT、Labelme JSON
系统要求Windows 10+,免安装、免配置,直接双击运行
增强方式翻转、旋转、缩放、拉伸、剪裁、平移、亮度、对比度、饱和度、噪声、模糊等
自定义增强支持imgaug序列语法,可自由组合、修改增强操作
标签同步自动更新分割/OBB/多边形标签,保证与增强后图像对应
输出控制可设置增强倍数、自定义前缀、自动重命名,不覆盖原数据
辅助功能生成增强预览图,可直观检查标签是否同步正确
交付内容可执行文件.exe、使用教程视频、增强序列参考文档、Python 学习代码

二、项目结构

dataset_augment/ ├── points增强工具.exe # Windows 可执行文件 ├── 教程.mp4 # 手把手使用教程 ├── 必读.txt # 常用增强操作说明 ├── 增强序列参考.pdf # imgaug 增强语法参考 ├── src/ # 源代码(学习参考) │ ├── main.py # PyQt5 主界面 │ ├── augmentor.py # 图像与标签增强核心逻辑 │ └── utils.py # 文件读写与格式转换工具 ├── seg/ # 分割数据集示例 └── obb/ # OBB 数据集示例

三、核心代码实现(Python 学习参考版)

1. 增强核心模块augmentor.py

importosimportcv2importjsonimportimgaugasiafromimgaugimportaugmentersasiaafromimgaug.augmentablesimportPolygon,PolygonsOnImage,BoundingBox,BoundingBoxesOnImageclassDatasetAugmentor:def__init__(self,img_dir,label_dir,out_dir,label_format="yolo-seg"):self.img_dir=img_dir self.label_dir=label_dir self.out_dir=out_dir self.label_format=label_format os.makedirs(os.path.join(out_dir,"images"),exist_ok=True)os.makedirs(os.path.join(out_dir,"labels"),exist_ok=True)defload_yolo_seg(self,label_path,img_shape):h,w=img_shape[:2]polygons=[]withopen(label_path,"r")asf:forlineinf:parts=line.strip().split()cls_id=int(parts[0])coords=list(map(float,parts[1:]))points=[(coords[i]*w,coords[i+1]*h)foriinrange(0,len(coords),2)]polygons.append((cls_id,Polygon(points)))returnpolygonsdefsave_yolo_seg(self,polygons,save_path,img_shape):h,w=img_shape[:2]lines=[]forcls_id,polyinpolygons:coords=[]for(x,y)inpoly.exterior:coords.append(f"{x/w:.6f}{y/h:.6f}")lines.append(f"{cls_id}{' '.join(coords)}")withopen(save_path,"w")asf:f.write("\n".join(lines))defaugment_image(self,img_path,label_path,aug_seq,prefix="aug",times=1):img=cv2.imread(img_path)img_h,img_w=img.shape[:2]polygons=self.load_yolo_seg(label_path,img.shape)foriinrange(times):aug_img=img.copy()aug_polygons=[]polys=PolygonsOnImage([pfor_,pinpolygons],shape=img.shape)aug_img,aug_polys=aug_seq(image=aug_img,polygons=polys)for(cls_id,_),pinzip(polygons,aug_polys.polygons):aug_polygons.append((cls_id,p))img_name=f"{prefix}_{i}_{os.path.basename(img_path)}"label_name=f"{prefix}_{i}_{os.path.splitext(os.path.basename(label_path))[0]}.txt"cv2.imwrite(os.path.join(self.out_dir,"images",img_name),aug_img)self.save_yolo_seg(aug_polygons,os.path.join(self.out_dir,"labels",label_name),img.shape)

2. 主界面main.py(PyQt5)

importsysfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLineEdit,QComboBox,QSpinBox,QTextEdit,QFileDialog)fromaugmentorimportDatasetAugmentorimportimgaugasiafromimgaugimportaugmentersasiaaclassAugmentTool(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("分割数据集增强工具")self.setGeometry(100,100,800,600)self.init_ui()definit_ui(self):central=QWidget()self.setCentralWidget(central)layout=QVBoxLayout(central)# 路径选择self.img_dir_edit=QLineEdit()self.label_dir_edit=QLineEdit()self.out_dir_edit=QLineEdit()layout.addWidget(self.create_path_layout("图像文件夹:",self.img_dir_edit))layout.addWidget(self.create_path_layout("标签文件夹:",self.label_dir_edit))layout.addWidget(self.create_path_layout("输出文件夹:",self.out_dir_edit))# 参数设置self.format_combo=QComboBox()self.format_combo.addItems(["YOLO-seg TXT","Labelme JSON","YOLO-obb TXT"])layout.addWidget(self.format_combo)self.times_spin=QSpinBox()self.times_spin.setValue(1)layout.addWidget(self.times_spin)self.prefix_edit=QLineEdit("aug")layout.addWidget(self.prefix_edit)# 增强序列self.aug_seq_edit=QTextEdit()self.aug_seq_edit.setPlainText(""" iaa.Sequential([ iaa.OneOf([ iaa.Fliplr(p=1.0), iaa.Affine(rotate=(-45, 45)), ]), iaa.OneOf([ iaa.GaussianBlur(sigma=(0, 4.0)), iaa.GammaContrast(gamma=0.5), iaa.AdditiveGaussianNoise(scale=40.0), ]) ]) """)layout.addWidget(self.aug_seq_edit)self.start_btn=QPushButton("开始处理")self.start_btn.clicked.connect(self.start_augment)layout.addWidget(self.start_btn)defcreate_path_layout(self,label,edit):layout=QHBoxLayout()layout.addWidget(edit)browse_btn=QPushButton("浏览")browse_btn.clicked.connect(lambda:self.browse_path(edit))layout.addWidget(browse_btn)returnlayoutdefbrowse_path(self,edit):path=QFileDialog.getExistingDirectory()edit.setText(path)defstart_augment(self):img_dir=self.img_dir_edit.text()label_dir=self.label_dir_edit.text()out_dir=self.out_dir_edit.text()label_format=self.format_combo.currentText()times=self.times_spin.value()prefix=self.prefix_edit.text()aug_seq_code=self.aug_seq_edit.toPlainText()# 执行增强序列aug_seq=eval(aug_seq_code,{"iaa":ia,"iaa":iaa})augmentor=DatasetAugmentor(img_dir,label_dir,out_dir,label_format)forimg_nameinos.listdir(img_dir):ifimg_name.endswith(('.jpg','.png')):img_path=os.path.join(img_dir,img_name)label_name=os.path.splitext(img_name)[0]+".txt"iflabel_format=="Labelme JSON":label_name=os.path.splitext(img_name)[0]+".json"label_path=os.path.join(label_dir,label_name)ifos.path.exists(label_path):augmentor.augment_image(img_path,label_path,aug_seq,prefix,times)if__name__=="__main__":app=QApplication(sys.argv)win=AugmentTool()win.show()sys.exit(app.exec_())

四、使用说明

  1. 准备数据:将图像和标签按对应格式整理好(YOLO-seg/OBB TXT 或 Labelme JSON)。
  2. 设置路径:在工具中选择图像文件夹、标签文件夹和输出文件夹。
  3. 配置参数
    • 选择标签格式
    • 设置增强次数(每张图片生成多少张增强结果)
    • 输入输出前缀(避免覆盖原数据)
  4. 自定义增强序列:根据需要修改imgaug序列,支持翻转、旋转、模糊、噪声、对比度等操作。
  5. 开始处理:点击“开始处理”,工具会自动生成增强后的图像和同步更新的标签文件,并可生成预览检查效果。

五、常用增强操作参考(来自必读.txt

# 单增操作示例iaa.Identity()# 原图iaa.GammaContrast((0.85,1.15))# 对比度调整iaa.MultiplyBrightness((0.5,1.5))# 亮度调整iaa.Rotate((-10,10))# 随机旋转iaa.AdditiveGaussianNoise(scale=(0,20))# 高斯噪声iaa.GaussianBlur(sigma=2.0)# 高斯模糊iaa.MultiplySaturation((0.5,1.5))# 饱和度调整iaa.Crop(px=(0,16))# 随机裁剪iaa.Affine(translate_px={"x":(-20,20),"y":(-20,20)})# 平移

http://www.jsqmd.com/news/1181140/

相关文章:

  • 大模型提示词工程深度解析:从原理到最佳实践
  • 桌面图标和文件全部消失如何找回?从显示设置排查到注册表修复的完整步骤
  • 边缘推理算子级融合策略实战:Conv+BN+ReLU 三合一在 ARM NEON 上的手写实现与性能分析
  • openEuler Intel内核:如何为下一代Intel平台构建强大的操作系统基础
  • CTF-SHOW 题解(更新中)
  • Expo社交登录终极解密:如何用一行代码统一16个平台的用户认证
  • 时光回溯:用Python重建你的QQ空间数字记忆档案
  • 免费开源音频转换神器:fre:ac完整使用指南
  • 在Apple Silicon Mac上轻松运行Windows应用:Whisky完全指南
  • 重磅发布!合肥黄金回收公安备案门店完整名录出炉,持证实体店杜绝虚标压价,实名交易安全变现 - 奢侈品交易观察员
  • macOS 10.15 虚拟机性能调优:VMware 15.5.0 下内存、CPU与3D图形3项关键配置
  • 3分钟解锁WeMod专业版:Wand-Enhancer本地破解指南
  • 计算机视觉算法工程师面试核心考点精讲
  • WeMod专业版终极破解指南:Wand-Enhancer完整使用手册
  • Hackers发布流程完全指南:从TestFlight到App Store的完整流程
  • 如何免费解锁Wand专业版:Wand-Enhancer完整使用指南
  • Spotify免费听,开源音乐神器
  • 终极指南:如何用League Akari实现英雄联盟游戏自动化
  • 海康威视球机摄像头多目标检测、跟踪与跨镜头轨迹关联技术解析
  • TLA2518与PIC18LF46K22构建高精度多通道ADC系统
  • AntiDupl.NET:智能图片去重工具,让你的数字资产焕然一新
  • 【软件工程】需求工程:需求规格说明与需求验证
  • 小白程序员快速入门:医疗大模型的多模态融合奥秘与实践
  • 推理引擎图优化 Pass 详细解析:常量折叠、死代码消除与公共子表达式消除的注册流程
  • 终极免费解锁WeMod Pro功能:Wand-Enhancer完整使用指南
  • SRADSGAN:基于分层密集采样与链式训练的遥感图像大倍数超分辨率实战解析
  • 法律AI时代生存手册:ChatGPT辅助咨询的5类不可替代场景 vs 4类绝对禁止场景(附司法部2024年《AI法律服务合规指引》逐条对照表)
  • NBM5100A与PIC18F87K22优化CR2032电池系统设计
  • 颠覆性架构:如何用物联大师重构工业物联网部署模式
  • 2026年蕉城区变速箱维修宁德华耀变速箱新能源汽车维修15060258154 - 优企甄选