加载数据集出现的问题解决方法_移动文件代码

在复现GitHub项目时出现了一些问题,很奇怪每个项目都会遇到以前没见过的问题。在作者帮助下成功开始训练此项目-Region Normalization for Image Inpainting
昨天仔细看了下代码,虽然不尽懂,但这个项目其实代码量不大,大部分地方的逻辑关系也比较清晰,也就有利于调试。

问题
1、在这里插入图片描述
首先出现这个问题,网上查到的基本都是说程序没有权限访问到这个路径’/data’。仔细找过想过后发现我账号下并没有这个路径,后来发现是程序创建对象的一个参数,是默认的模型保存路径。改成自己的路径即可。

2、在这里插入图片描述在这里插入图片描述
上面两图虽然一个能运行程序一个出错,但是同一个错误。可以看到在loading datasets后加载进去的文件数量一个是1一个是0.显然训练集只有1个必然有问题。

开始单步!
以下是单步调试的记录:
问题出在dataloader模块,那就在打印‘===> Loading datasets’的地方设置断点好了
在这里插入图片描述
这儿同时用pycharm查看代码,能方便对代码进行把握。比如可以知道单步到262行时会进入build_dataloader函数。linux下进入函数内部后pycharm也随之一起到目标代码处。
在这里插入图片描述
这儿可以看到又进入了Daraset函数内部。继续跟进。
在这里插入图片描述
可以看到flist是我们给的数据集的路径,指向一个flist文件,这个文件内容是训练集的图片。到这儿没问题,继续进入函数self.load_flist()。
在这里插入图片描述
到这儿可以看到load_flist函数加载数据集最后只加载了’val_image.flist’一个文件,并没有加载到文件内容中所指向的数据集。上面total instance number=1也就明了了。
在这里插入图片描述
可以看到问题出在flist文件上,这个文件是作者项目里给的代码生成的。既然不行那就不用他了。上面加载数据集的代码里,可以看到在读入数据集时有判断运行程序时给定的数据路径是目录还是文件。那对于下图中的image_flist和mask_flist我就直接给他们数据集的绝对路径。以下为修改前后
在这里插入图片描述
在这里插入图片描述
至此,可以通过直接给定路径的方式加载数据集。

3、
最后出现下面这个错误
在这里插入图片描述
百思不得其解,查了好久也没查到准确的解决方法,最后经作者提醒,原来是mask的路径给错了,没加载进去,修改后成功开始训练。

另:

在调试这个代码的过程中,熟悉了isinstance()判断对象类型、glob.glob()匹配文件名,第一次使用pdb单步调试python。
因为数据集下不同内容的图片在不同的文件夹中,需要将他们集中到一个文件夹下,用到以下函数

import os,shutil
sourceDir=''			#源目录
targetDir=''            #目标目录
for root, dirs, files in os.walk(sourceDir):
    for file in files:
        shutil.copy(os.path.join(root,file),targetDir) #复制
      # shutil.move(os.path.join(root,file),targetDir) #移动

其中root是当前目录,
dirs是当前目录的所有子目录,
files是当前目录的所有文件,
通过此程序能遍历到sourceDir目录下所有子目录中的文件。

猜你喜欢

转载自blog.csdn.net/qq_41872271/article/details/105285028
今日推荐