笔者近期在做图斑提取相关的研究,其中涉及到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