Tiny-ImageNet的val处理
1.原因
由于在使用Tiny-ImageNet的时候,发现它在测试的时候不能直接使用DataLoader函数直接进行导入测试集,查了一下文档,在进行torchvision.datasets函数第一步处理数据集的过程出现了问题。这里是官方文档datasets。
是因为默认的数据和标签的导入是有固定的文件结构的,如下所示:
root/dog/xxx.png
root/dog/xxy.png
root/dog/xxz.png
root/cat/123.png
root/cat/nsdf3.png
root/cat/asd932_.png
每一类图片都放在同一文件夹下,所以验证集的存放方式除了自己写一个加载数据集的函数外只能自己想办法更改验证集的存放结构。
2.代码
首先加载使用的包
import os
from shutil import copy
from tqdm import tqdm
书写两个函数,一个是创建文件夹的函数,一个是获取验证集中数据标签的函数。
def mkdir(path):
base_path='.\dataset\TINY\\valid\\valid'
path=os.path.join(base_path,path)
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
print (path+' 创建成功')
return True
else:
# 如果目录存在则不创建,并提示目录已存在
print (path+' 目录已存在')
return False
def rewrite_val(dir):
with open(os.path.join(dir,'valid.txt'),'r') as f:
data=f.readlines()
img_list=[]#存放图片的名称
dir_list=[]#存放图片对应的标签的名称
for i in range(len(data)):#用来获取两个文件列表
img_list.append((data[i].split('\t'))[0])
dir_list.append((data[i].split('\t'))[1])
return img_list,dir_list
最后是把相对应的图放到对应文件夹下
img_name,file_name=rewrite_val('.\dataset\TINY\\valid')
for i in range(len(file_name)):
mkdir(file_name[i])
from_path='.\dataset\TINY\\valid\images'
to_path='.\dataset\TINY\\valid\\valid'
for i in tqdm(range(len(img_name))):
copy(os.path.join(from_path,img_name[i]),os.path.join(to_path,file_name[i]))
所有的代码中的文件均为直接下载Tiny_ImageNet数据后将其放到dataset文件夹下的操作,根据自己需要更改代码输入。修改后的和修改前的代码将会上传到我的网盘,稍后会把链接分享!!!
数据集地址
百度网盘:链接:https://pan.baidu.com/s/122sZANvKV4LBPT3w_JPz_g 提取码:xlsh
本文转自 https://blog.csdn.net/qq_39527652/article/details/118883504?spm=1001.2014.3001.5501,如有侵权,请联系删除。
评论
0 评论