Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

训练时缺少文件的问题 #2

Closed
d-serafly opened this issue Feb 22, 2023 · 21 comments
Closed

训练时缺少文件的问题 #2

d-serafly opened this issue Feb 22, 2023 · 21 comments

Comments

@d-serafly
Copy link

非常感谢您的出色工作和分享,我在复现是遇到以下困难,具体来说
训练时显示缺少文件
/krf/datasets/linemod/Linemod_preprocessed/data/01/add_data/fuse/pred_label/1644.png'
从网盘中下载的数据中没有fuse数据,请问add_data中的fuse数据是怎么生成的或者是否需要下载

@d-serafly d-serafly reopened this Feb 22, 2023
@zhanhz
Copy link
Owner

zhanhz commented Feb 22, 2023

感谢关注,这部分需要自己生成,因为Linemod数据集比较小,作为训练集是不够的。具体可以参照这里

@d-serafly
Copy link
Author

感谢关注,这部分需要自己生成,因为Linemod数据集比较小,作为训练集是不够的。具体可以参照这里

感谢您的回复,这部分render的数据我成功生成了。仔细阅读了您的数据集生成过程,我发现我上个问题可能是因为没有使用generate_ds.py文件生成这部分数据,然而我在使用该文件进行数据生成时,还是有文件找不到的情况,报错信息如下:
FileNotFoundError: [Errno 2] No such file or directory: '/home/extend/KRF/krf/datasets/linemod/Linemod_preprocessed/data/02/test_occ.txt'
非常感谢您的耐心解答

@zhanhz
Copy link
Owner

zhanhz commented Feb 22, 2023

您好,我检查了一下,这个文件里面就是枚举了所有的场景,从0000到1213,每行一个场景。你看下此数据集是否包括train.txt和test.txt,你可以参照这些文件的格式自己简单生成一下。由于之前服务器数据做过搬迁,我不太清楚这些.txt文件否是原数据集自带的,如果都没有的话我之后再传一份。

@d-serafly
Copy link
Author

谢谢,根据您所回复的,我生成了test_occ.txt文件,也完成了generate_ds.py的生成,但是在训练时,仍然有如下报错:
FileNotFoundError: [Errno 2] No such file or directory: '/home/extend/KRF/krf/datasets/linemod/Linemod_preprocessed/data/01/add_data/fuse/pred_label/6594.png'
程序训练前,应该已经完成了raster_triangle所生产的fuse和render数据的读取,add_data文件的fuse/pre_label的数据是我生成出错了吗?
屏幕截图 2023-02-22 172544

@d-serafly
Copy link
Author

同样的是,在配置好环境以后,在YCB数据集上运行完generate_color_pts.py与generate_ds.py进行训练时,出现找不到训练数据的问题,报错信息如下:
FileNotFoundError: [Errno 2] No such file or directory: '/home/extend/KRF/krf/datasets/ycb/YCB_Video_Dataset/data_syn_parts/2k_31/060471-depth.png'
查看data_syn_parts文件夹下的文件,我发现存放的是子文件的pred_label.png文件和pred_pose.npy文件,

@d-serafly d-serafly changed the title LM训练时出现的问题 训练时缺少文件的问题 Feb 22, 2023
@zhanhz
Copy link
Owner

zhanhz commented Feb 22, 2023

谢谢,根据您所回复的,我生成了test_occ.txt文件,也完成了generate_ds.py的生成,但是在训练时,仍然有如下报错: FileNotFoundError: [Errno 2] No such file or directory: '/home/extend/KRF/krf/datasets/linemod/Linemod_preprocessed/data/01/add_data/fuse/pred_label/6594.png' 程序训练前,应该已经完成了raster_triangle所生产的fuse和render数据的读取,add_data文件的fuse/pre_label的数据是我生成出错了吗? 屏幕截图 2023-02-22 172544

这里的问题我猜测是这个地方

root = 'datasets/linemod/Linemod_preprocessed/occ_data/{:0>2}/add_data/'.format(obj_id)

把occ_data改成data应该就好了。

KRF/krf/generate_ds.py

Lines 207 to 208 in e3b6514

# test_ds = LM_Dataset('test', cls_type=args.cls)
test_ds = LM_OCC_Dataset('test', cls_type=args.cls)

以及这里test_ds切换一下,有空我重组一下代码。

同样的是,在配置好环境以后,在YCB数据集上运行完generate_color_pts.py与generate_ds.py进行训练时,出现找不到训练数据的问题,报错信息如下: FileNotFoundError: [Errno 2] No such file or directory: '/home/extend/KRF/krf/datasets/ycb/YCB_Video_Dataset/data_syn_parts/2k_31/060471-depth.png' 查看data_syn_parts文件夹下的文件,我发现存放的是子文件的pred_label.png文件和pred_pose.npy文件,

这里的我看应该是YCB自身的数据,并不是生成的,生成的文件应该在add_data文件夹下面,你可以把数据集的组织形式发一下吗?因为之前服务器数据都没了,看不到原来的组织形式了.....

@d-serafly
Copy link
Author

image
这是我YCB数据集的组成,这个data_syn_parts是从您的网盘下载下载的add_data下的子目录,然后我移动合并到了数据集下,另外,运行generate_ds.py文件后,目录下生成了add_data和data_syn两个目录。我直接下好的YCB数据集不包含这些文件

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

不好意思,这行得注释掉,这是考虑到occ数据会出现没有目标物体时返回空值的问题。

if(data['go'] == False): return

另外,data_syn也不是原文件吗?我记得应该有原数据应该有真实数据和合成数据两部分来着,data_syn下应该是2k_01到2k_40的文件夹,共80k个数据,你能再把这部分的文件发一下吗

@d-serafly
Copy link
Author

哈哈哈,原来如此,纳闷了好久。data_syn这部分除了40个文件夹,还有分别有80000label.png和meta.mat等文件
image
看起来是2K_**数据的所有数据

@d-serafly
Copy link
Author

Debug时,我注意到data['rnd_typ']参数一直是real,是否是这个原因,导致generate_ds.py的其他两个if未运行(第178行),所以没有add_data/fuse和add_data/render的数据产生

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

我之前应该是从国内的资源上下载的,不知道为啥data_syn后面有个part,可能需要你把data_syn重命名一下才能正确读取数据...

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

Debug时,我注意到data['rnd_typ']参数一直是real,是否是这个原因,导致generate_ds.py的其他两个if未运行(第178行),所以没有add_data/fuse和add_data/render的数据产生

这两个数据是只有在linemod才有的,感觉是loader没读取到对应的数据。fuse,render,data应该都在Linemod_preprocessed文件夹下,data['rnd_typ']应该在生成数据的时候就保存到.pkl文件里了。

@d-serafly
Copy link
Author

嗯嗯,是的,这是我的Linemod_preprocessed和add_data的数据组成。raster_triangle所生产的fuse和render数据在Linemod_preprocessed下,现在程序报错的是Linemod_preprocessed/data/01/add_data下找不到fuse文件和render文件
FileNotFoundError: [Errno 2] No such file or directory: /home/extend/KRF/krf/datasets/linemod/Linemod_preprocessed/data/01/add_data/fuse/pred_label/6594.png`
感觉不是下载的add_data里的pred_label文件,因为该文件夹只有1213个项目。
image
KRF/krf/generate_ds.py

        if data['rnd_typ'][0] =='render':
            ensure_fd(os.path.join(root, 'render/pred_pose'))
            ensure_fd(os.path.join(root, 'render/pred_label'))   
            cv2.imwrite(root + 'render/pred_label/{}.png'.format(data['name'][0]), all_msk*255)
        elif data['rnd_typ'][0] =='fuse':
            ensure_fd(os.path.join(root, 'fuse/pred_pose'))
            ensure_fd(os.path.join(root, 'fuse/pred_label'))
            cv2.imwrite(root + 'fuse/pred_label/{}.png'.format(data['name'][0]), all_msk*255)
        else:
            ensure_fd(os.path.join(root, 'pred_label'))
            ensure_fd(os.path.join(root, 'pred_pose'))
            cv2.imwrite(root + 'pred_label/{}.png'.format(data['name'][0]), all_msk*255)

这里imwrite似乎是在往这些路径保存数据

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

我知道问题所在了,把‘test’换成‘train’,我这里默认的都是生成测试数据,所以没有生成fuse和render的数据。我之后再补充一下训练数据集的生成方式。感谢你的帮助。

# test_ds = LM_Dataset('test', cls_type=args.cls)

@d-serafly
Copy link
Author

d-serafly commented Feb 23, 2023

非常感谢您的耐心解答,训练YCB数据集没有文件问题了,但是出现了让我更加疑惑的问题,报错信息:
RuntimeError: CUDA error: no kernel image is available for execution on the device
为此我去复现运行了FFB6D train_ycb文件,成功运行。为此我测试了KNN_CUDA,也成功测试。因此,应该不存在pytorch和cuda版本不匹配,以及编译显卡算力差异的问题。所以非常疑惑 T⌓T
image

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

可以告知你当前的系统、cuda、pytorch、python版号吗?
因为系统全部更新过,我按照这个的配置成功运行了。
我这边的配置是Ubuntu20.04,cuda11.0,pytorch 1.7.0,python 3.7.7,你参考一下

@d-serafly
Copy link
Author

可以告知你当前的系统、cuda、pytorch、python版号吗? 因为系统全部更新过,我按照这个的配置成功运行了。 我这边的配置是Ubuntu20.04,cuda11.0,pytorch 1.7.0,python 3.7.7,你参考一下

好的,好的,我现在怀疑是安装apex时,export TORCH_CUDA_ARCH_LIST导入这个后出现了一些问题,但是很奇怪的是FFB6D能运行,目前还在运行generate_ds.py生成render数据,还没有实验是不是那个原因

@d-serafly
Copy link
Author

我知道问题所在了,把‘test’换成‘train’,我这里默认的都是生成测试数据,所以没有生成fuse和render的数据。我之后再补充一下训练数据集的生成方式。感谢你的帮助。

# test_ds = LM_Dataset('test', cls_type=args.cls)

您那边单个子数据集生成这两个文件需要多久呢?我这边运行ape的render数据生成到50000it的时候已经接近8个小时,考虑到linemod有十几个子数据集,这样生成的时间能否加快呢?或者您是否考虑网盘的形式=。=

@zhanhz
Copy link
Owner

zhanhz commented Feb 23, 2023

我不知道其他作者在linemod上测试时生成多少合成数据,我这边单个数据集各生成了10000左右效果就可以了。印象中应该一个多小时吧。

@d-serafly
Copy link
Author

可以告知你当前的系统、cuda、pytorch、python版号吗? 因为系统全部更新过,我按照这个的配置成功运行了。 我这边的配置是Ubuntu20.04,cuda11.0,pytorch 1.7.0,python 3.7.7,你参考一下

实验过调整导入显卡算力,还是存在上述的CUDA error。我这边的配置是Ubuntu20.04,cuda11.1,pytorch 1.8.0,python 3.6.9,我今天重新配置一套您这样的环境进行运行。

好的,一个多小时的生成时间还是可以的

@d-serafly
Copy link
Author

感谢作者的耐心和详细解答,已经成功运行YCB数据集训练。以下是我的安装环境和配置,希望能给今后的同学一些帮助。Ubuntu20.04,cuda11.1,pytorch 1.7.1,python 3.6.13. requirement.txt如下:
h5py
numpy
pyyaml==5.4.1
enum34
future
scipy==1.4.1
opencv_contrib_python==3.4.2.17
matplotlib==3.0.2
transforms3d==0.3.1
scikit_image==0.13.1
lmdb==0.94
setuptools==41.0.0
cffi==1.11.5
easydict==1.7
plyfile==0.6
pillow==8.2.0
glumpy
tqdm
tensorboardX
pandas
scikit-learn
scipy

torch安装版本命令如下:
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch

编译apex时,原命令报错可以尝试如下命令:
pip install -v --disable-pip-version-check --no-cache-dir ./

编译normalSpeed时注意安装pybind11包,命令如下:
conda install pybind11 -c conda-forge

再次感谢作者的出色工作和无私分享

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants