240720_图像语义分割中数据集原图与标签对比查漏
核对原图和标签是否一一对应的工作是必要的,不然在训练过程中可能会发生已经训练了好几个epoch了,突然给你报xx.png找不到,然后你去删除掉了对应的jpg,但是在重新运行几个epoch之后,又报缺失另一个,这样的工作是繁琐且无趣的,我们在训练前就确保对应可以减少很多工作量。
基本思想是,把所有的jpg文件名放在一个列表中,所有的png标签文件名放在一个列表中,然后把两个列表转换为集合,使用集合的difference方法求差集,然后逐项输出,以下是具体实现代码:
# diff_compare.py
import os
# 定义两个路径,分别指向图像目录和标注目录
path1 = r'./Datasets/RoadCrack0720/ltimages' # 请修改为你自己的路径
path2 = r'./Datasets/RoadCrack0720/Segmentation' # 请修改为你自己的路径
def file_name(image_dir, png_dir):
"""
比较图像目录和标注目录中的文件名,找出不对应的文件。
参数:
image_dir (str): 图像目录的路径。
png_dir (str): 标注目录的路径。
返回:
无返回值,但会打印出不对应的文件名。
"""
# 列出图像目录中所有jpg文件的文件名(不包括后缀)
jpg_list = []
for root, dirs, files in os.walk(image_dir):
for file in files:
if file.endswith('.jpg'):
jpg_list.append(os.path.splitext(file)[0])
# 列出标注目录中所有png文件的文件名(不包括后缀)
png_list = []
for root, dirs, files in os.walk(png_dir):
for file in files:
if file.endswith('.png'):
png_list.append(os.path.splitext(file)[0])
# 打印jpg文件数量
print(len(jpg_list))
# 找出在png列表中但不在jpg列表中的文件名
diff = set(png_list).difference(set(jpg_list))
for name in diff:
print("no jpg", name + ".png")
# 打印差异文件数量
print(len(diff))
# 找出在jpg列表中但不在png列表中的文件名
diff2 = set(jpg_list).difference(set(png_list))
for name in diff2:
print("no png", name + ".jpg")
if __name__ == '__main__':
file_name(path1, path2)