适用于语义分割VOC数据集制作(基于DEEPLAB V3PLUS模型)

文章介绍了在进行图斑提取研究时,如何处理和理解VOC数据集,特别是DeeplabV3+网络使用的数据结构。涉及JPEGImages文件夹中的.jpg文件转换,Segmentation中的train.txt和val.txt文件生成,以及标签文件的像素值调整。文章还提供了文件格式转换和生成txt的Python代码示例。
摘要由CSDN通过智能技术生成

笔者近期在做图斑提取相关的研究,其中涉及到deeplab网络,其中V3+默认使用的是VOC数据集。我想当大家刚打开下载的数据集时可能跟我一样很懵逼。
在这里插入图片描述
里面是包括上面五个文件夹,其中SegmentationClassAug文件夹是用来储存标签文件的(PS:需要另外下载),当然,文件夹里的内容看起来很厚礼蟹。当我对模型进行了梳理之后(对了,backbone是基于MOBILENET的),对于VOC数据集可以进行一些调整。像下面这样:
在这里插入图片描述
其中,JEPGImages放的就是.jpg文件,如果不是,需要转换一下(代码我放后面)
然后Segmentation应该包括一个train.txt文件和一个val.txt文件,内容就像下面:
在这里插入图片描述
是不包含JEPGImages下图片后缀的名称,然后train.txt和val.txt的 合集(并集) 就是JEPGImages目录下的所有图片文件,关于遍历图片生成txt的代码在下面

这样就剩下SegmentationClass文件夹了,这个文件夹放的就是标签文件,对于我处理的内容他就是下面这样的:
在这里插入图片描述

正常来说里面会呈现出白色图斑,但是这里是将像素值调整为0和1的255位图,所以人眼无法分辨。其实他原本是这样的
在这里插入图片描述
当然,这步操作也是为了方便模型的读取。

比较简单的文件格式转换:

import os
import re

path = r"传入工作目录"
file_walk = os.walk(path)
fileNum = 0
filesPathList = []
for root, dirs, files in file_walk:
    # print(root, end=',')
    # print(dirs, end=',')
    # print(files)
    for file in files:
        fileNum = fileNum + 1
        filePath = root + '/' + file
        # print(filePath)
        filesPathList.append(filePath)
        protion = os.path.splitext(filePath)
        # print(protion[0],protion[1])
//原始文件格式,我的是tif
        if protion[1].lower() == '.tif':
            print("正在处理:" + filePath)
            //处理后的后缀
            newFilePath = protion[0] + '.png'
            os.rename(filePath, newFilePath)
print('success')

遍历文件生成TXT:

# -*- coding:utf-8 -*-
import sys
import os
import random

# 存放原始图片地址
data_base_dir = r"JEPGImages"
# 建立列表,用于保存图片信息
file_list = []
# 读取图片文件,并将图片地址、图片名和标签写到txt文件中
write_file_name = r'train.txt'
# 以只写方式打开write_file_name文件
# write_file = open(write_file_name, "w", encoding='utf-8')
write_file = open(write_file_name, "a", encoding='utf-8')
for file in os.listdir(data_base_dir):  # file为current_dir当前目录下图片名
    if file.endswith(".jpg"):  # 如果file以jpg结尾
        write_name = file  # 图片路径 + 图片名 + 标签
        file_list.append(write_name)  # 将write_name添加到file_list列表最后
        sorted(file_list)  # 将列表中所有元素随机排列
# 去掉后面的“.jpg”
i = 0
file_write = []
for item in file_list:
    file_write.append(file_list[i][:-4])
    i += 1
number_of_lines = len(file_write)  # 列表中元素个数
# 将图片信息写入txt文件中,逐行写入
print(file_write)
for current_line in range(number_of_lines):
    print(file_write, current_line)
    write_file.write(file_write[current_line] + '\n')
    # write_file.write(file_list[current_line] + ',' + 'malignant' + '\n')
# 关闭文件
write_file.close()
print('写入完成!')

关于调整像素大小,参考博主的源码链接:
链接: bubbliiiing

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yokon_D

您的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值