首页IT科技语义分割算法(快速制作自己的VOC语义分割数据集)

语义分割算法(快速制作自己的VOC语义分割数据集)

时间2025-05-04 08:07:19分类IT科技浏览6984
导读:语义分割数据集制作与转换方法 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加...

语义分割数据集制作与转换方法

提示:这里可以添加系列文章的所有文章的目录              ,目录需要自己手动添加

第一章 基于PS的语义分割标注

第二章 构建VOC语义分割数据集

前言

PASCAL VOC2012数据集简介

PASCAL VOC2012是语义分割任务极为重要的官方数据集                      ,大量优秀的语义分割模型都会刷一下这个数据集       ,因此我们在使用别人的开源代码时              ,如果能将自己的数据集整理成官方数据集的格式                      ,则可快速验证模型性能       ,减少自身工作量              。

VOC2012官方数据集文件结构共包含五个文件夹

其中语义分割需要的包括:

1.ImageSets/Segmentation:存放训练验证集文件名称的txt文件;

2.JPEGImages:存放原始图像的文件夹

3.SegmentationClass:存放标注文件的文件夹

因此       ,在制作自己数据集时                      ,只需保证这三个文件夹的内容统一              ,即可完成数据集制作                      。

一              、构建文件夹

根据上述的文件夹结构       ,创建VOC2012文件夹                      ,在VOC2012内创建ImageSets文件夹                      、JPEGImages文件夹       、SegmentationClass文件夹              ,在ImageSets文件夹内创建Segmentation文件夹       。

二              、移动图片

将自己数据集的原始图片移动到JPEGImages文件夹下,将自己数据集的标注图片移动到SegmentationClass文件夹下              。

PS标注工具的使用请移步至:【PS才是真科研利器                      ,助力快速分割标注工作】

三                      、生成TXT文件

这里提供一段代码:可自动生成train.txt       、val.txt       、trainval.txt                      ,并检查图像与标注图像长宽维度是否一致                      、标注图像是否为二维图像              、并生成数据集均值       、方差及各类别像素比例

import mmcv import os import os.path as osp import random """1.检查图像维度""" import numpy as np from PIL import Image,ImageOps from torchvision import transforms def get_Image_dim_len(png_dir: str,jpg_dir:str): png = Image.open(png_dir) png_w,png_h=png.width,png.height #若第十行报错,说明jpg图片没有对应的png图片 png_dim_len = len(np.array(png).shape) assert png_dim_len==2,"提示:存在三维掩码图" jpg=Image.open(jpg_dir) jpg = ImageOps.exif_transpose(jpg) jpg.save(jpg_dir) jpg_w,jpg_h=jpg.width,jpg.height print(jpg_w,jpg_h,png_w,png_h) assert png_w==jpg_w and png_h==jpg_h,print("提示:%s mask图与原图宽高参数不一致"%(png_dir)) """2.读取单个图像均值和方差""" def pixel_operation(image_path: str): img = cv.imread(image_path, cv.IMREAD_COLOR) means, dev = cv.meanStdDev(img) return means,dev """3.分割数据集              ,生成label文件""" # 原始数据集 ann上一级 data_root = VOC2012 #图像地址 image_dir="JPEGImages" # ann图像文件夹 ann_dir = "SegmentationClass" # txt文件保存路径 split_dir = ImageSets/Segmentation mmcv.mkdir_or_exist(osp.join(data_root, split_dir)) png_filename_list = [osp.splitext(filename)[0] for filename in mmcv.scandir( osp.join(data_root, ann_dir), suffix=.png)] jpg_filename_list=[osp.splitext(filename)[0] for filename in mmcv.scandir( osp.join(data_root, image_dir), suffix=.jpg)] assert len(jpg_filename_list)==len(png_filename_list),"提示:原图与掩码图数量不统一" print("数量检查无误") for i in range(10): random.shuffle(jpg_filename_list) red_num=0 black_num=0 with open(osp.join(data_root, split_dir, trainval.txt), w+) as f: length = int(len(jpg_filename_list)) for line in jpg_filename_list[:length]: pngpath=osp.join(data_root,ann_dir,line+.png) jpgpath=osp.join(data_root,image_dir,line+.jpg) get_Image_dim_len(pngpath,jpgpath) img=cv.imread(pngpath,cv.IMREAD_GRAYSCALE) red_num+=len(img)*len(img[0])-len(img[img==0]) black_num+=len(img[img==0]) f.writelines(line + \n) value=red_num/black_num train_mean,train_dev=[[0.0,0.0,0.0]],[[0.0,0.0,0.0]] with open(osp.join(data_root, split_dir, train.txt), w+) as f: train_length = int(len(jpg_filename_list) * 7/ 10) for line in jpg_filename_list[:train_length]: jpgpath=osp.join(data_root,image_dir,line+.jpg) mean,dev=pixel_operation(jpgpath) train_mean+=mean train_dev+=dev f.writelines(line + \n) with open(osp.join(data_root, split_dir, val.txt), w+) as f: for line in jpg_filename_list[train_length:]: jpgpath=osp.join(data_root,image_dir,line+.jpg) mean,dev=pixel_operation(jpgpath) train_mean+=mean train_dev+=dev f.writelines(line + \n) train_mean,train_dev=train_mean/length, train_dev /length doc=open(均值方差像素比.txt,a+) doc.write("均值:"+\n) for item in train_mean: doc.write(str(item[0])+\n) doc.write("训练集方差:"+\n) for item in train_dev: doc.write(str(item[0])+\n) doc.write("像素比:"+\n) doc.write(str(value)) train_mean,train_dev=[[0.0,0.0,0.0]],[[0.0,0.0,0.0]]

运行完上述代码后                      ,在VOC2012文件夹下便可看到均值方差像素比.txt文件:

同时,三个标签引索txt文件也随之生成:

总结

提示:这里对文章进行总结:

本文介绍了如何构建自己的VOC数据集                      。以供大家交流讨论!

往期回顾:

(1)CBAM论文解读+CBAM-ResNeXt的Pytorch实现

(2)SENet论文解读及代码实例

(3)ShuffleNet-V1论文理解及代码复现

(4) ShuffleNet-V2论文理解及代码复现

(5)GhostNet论文理解及代码复现

(6)PS才是真科研利器       ,助力快速分割标注工作

下期预告:

VOC数据集的使用–如何根据自己的数据集实现mmsegmentation算法库任意语义分割算法
声明:本站所有文章              ,如无特殊说明或标注                      ,均为本站原创发布       。任何个人或组织       ,在未征得本站同意时       ,禁止复制                      、盗用              、采集、发布本站内容到任何网站                      、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益                      ,可联系我们进行处理                      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
如何升级mac系统?苹果mac免费升级系统方法介绍(如何升级mac系统?苹果Mac免费升级系统方法介绍) 织梦自定义标签(织梦dedecms修改栏目关键词长度)