深度学习中生成.txt文件记录图片路径
在深度学习中
我们首先要准备数据集,尤其时用pytorch进行模型搭建训练时,需要首先构建dataset,然后封装为dataloder。
在生成dataset时,我们通过图片路径读取图片,然后进行一系列图片变换,生成可用于训练的dataset,我们需要把图片路径保存在一个.txt文件中,
通过读取.txt文件,将所有图片路径保存在一个list 里面,后面再用__getitem__(self, index)方法读取图片。
self.files = [line.rstrip() for line in tuple(open(file_list, "r"))]
下面总结一下生成.txt 函数常用的几个API
因为图片都存放在文件夹下,所以最常用的就是 os 模块
1. os.listdir
通过listdir 可以将文件夹下的所有文件名称放到一个列表里,只要我们遍历这个列表,并把列表里的元素写入到txt文件中即可
2. endswith(".jpg")
通过endswith(" ") 可以筛选符合要求的文件,通常我们的图片文件都是以文件格式结尾的,如.jpg, .jpeg。。。
3. open(filename, ‘w') as f
通过open(filename, ‘w') as f 可以打开.txt 文件,如果此文件不存在可以创建该文件,后面通过f.write(file_path) 方法将路径写入.txt文件中
4. os.path.join()
通过os.path.join() 可以生成相对路径,
5. os.path.exists() , os.makedirs()
上面的两个方法较常用,用于判断是否存在该路径,如果不存在,则新建该路径, 存放文件
在 os模块中还有一个采用递归的方式 遍历文件下下所有文件和目录的方法(os.walk(rootdir))
函数返回一个可用for 循环遍历的三元素元组
如下所示文件结构:
采用os.walk()方法遍历:获得所以根目录下的所有文件
同理可以获得根目录下的所有子目录
for root, dirs, files in os.walk("google_tensorflow"): for dir in dirs: print(root) print(os.path.join(root, dir))
如果我们想看一下某目录下总共有多少张图片,可以采用glob模块下的glob方法
file_num = glob.glob(pathname=os.path.join(filepath, dirs, "*.jpg")) print(len(file_num))
为了检验生成的.txt 文件是否涵盖所有的图片路径
我们可以将.txt文件中记录的路径数于目录下的图片总数对比,如何获取.txt文件中的记录的路径总数呢
以只读的方式打开该文件,按行读取f.readlines(),自动返回一个列表,列表每一个元素则是txt文件中的每一行,返回列表的长度即可
with open(r"val.txt", 'r') as f: lists = f.readlines() print(len(lists))