ldif数据集准备

我们使用3D-r2n2定义的数据集分割进行训练和测试。

要运行LDIF/SIF,首先应该创建一个数据集。该步骤的输入是一个水密网格目录,输出是一个包含训练和评估LDIF/SIF所需文件的目录。

使用以下结构在磁盘上的某处创建输入目录:

1
```[path/to/root]/{train/val/test}/{class names}/{.ply files}```

1、输入网格.obj转化为.ply文件

请注意.ply文件是必需的,

自己做可以使用gaps库,但是GAPS库提供了一个shell实用程序来在文件格式之间进行转换。你可以做./ldif/gaps/bin/x86_64/msh2msh mesh.obj作为一个转换示例,它将mesh.obj然后写一个新文件mesh.ply到磁盘。

重现shapenet结果,必须使用occnet结果

2、在训练时,输入网格的水密性是非常重要的。

  • 我们使用Occupation Net works的深度融合管道对形状进行预处理,使其防水。要复制shapenet结果,请使用[OccNet repository]使用的TSDF fusion包(https://github.com/autonomousvision/occupation_networks),而不是msh2df。

  • GAPS提供了一个msh2df程序,如果您对完全复制OccNet实验的过程不感兴趣,那么它可以进行转换。下面是一个使单位立方体大小的网格不透水的示例命令:

1
./ldif/gaps/bin/x86_64/msh2df input.ply tmp.grd -estimate_sign -spacing 0.002 -v ./ldif/gaps/bin/x86_64/grd2msh tmp.grd output.ply rm tmp.grd

msh2df算法将网格光栅化为SDF体素网格,grd2msh运行行进立方体从生成的SDF网格中提取网格。

3、要在水密网格可用后实际生成数据集,请运行:

1
python meshes2dataset.py --mesh_directory [path/to/dataset_root] \ --dataset_directory [path/to/nonexistent_output_directory]

请参见“meshes2dataset.py”获取更多标志和文档。为了避免过多的磁盘使用(并避免必须将输入目录路径传递给所有后续脚本),在此过程中会创建指向输入目录中网格的符号链接。创建数据集后,请不要删除或移动输入目录,否则代码将无法访问Ground Truth网格。

数据集生成代码为每个网格写入7-9mb的数据(shapenet-13大约330GB)。

目前已经转换为ply文件

在第3步出错

1
bash reproduce_shapenet_autoencoder.sh

错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "meshes2dataset.py", line 203, in <module>
app.run(main)
File "/root/anaconda3/envs/ldif/lib/python3.6/site-packages/absl/app.py", line 299, in run
_run_main(main, args)
File "/root/anaconda3/envs/ldif/lib/python3.6/site-packages/absl/app.py", line 250, in _run_main
sys.exit(main(argv))
File "meshes2dataset.py", line 151, in main
FLAGS.skip_existing, FLAGS.log_level) for f in tqdm.tqdm(files))
File "/root/anaconda3/envs/ldif/lib/python3.6/site-packages/joblib/parallel.py", line 1042, in __call__
self.retrieve()
File "/root/anaconda3/envs/ldif/lib/python3.6/site-packages/joblib/parallel.py", line 921, in retrieve
self._output.extend(job.get(timeout=self.timeout))
File "/root/anaconda3/envs/ldif/lib/python3.6/site-packages/joblib/_parallel_backends.py", line 542, in wrap_future_result
return future.result(timeout=timeout)
File "/root/anaconda3/envs/ldif/lib/python3.6/concurrent/futures/_base.py", line 432, in result
return self.__get_result()
File "/root/anaconda3/envs/ldif/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
subprocess.CalledProcessError: Command '/root/ldif/ldif/scripts/process_mesh_local.sh ./input_meshes/train/airplane/47d958a8a781144b132a08135eefe76d.ply ./shapenet/train/airplane/47d958a8a781144b132a08135eefe76d/ /root/ldif/ldif' returned non-zero exit status 1.
3%|##7 | 139/4045 [00:04<02:01, 32.05it/s]

查看issue#9

https://github.com/google/ldif/issues/9#issuecomment-720097517

解决!

运行之后发现软连接mesh_orig.ply建立失败

mesh_directory = root/ldif/input_meshes
files = glob.glob(f’{mesh_directory}///*.ply’)

python meshes2dataset.py –mesh_directory root/ldif/input_meshes –dataset_directory root/ldif/shapenet

请参阅meshes2dataset.py了解更多标志和文档。 为避免过多使用磁盘(并避免将输入目录路径传递给所有后续脚本),在此过程中将创建符号链接,这些符号链接指向输入目录中的网格。 创建数据集后,请不要删除或移动输入目录,否则该代码将无法访问地面实况网格进行评估。

错误是软连接执行错误
为找出错误地方,使用pycharm搜索无结果,改用github全局搜索。想法呢,python的方法–》shell的命令

出错点
process_mesh_local.sh–>make_example.py–>mesh2dataset.py from ldif.scripts import make_example

1
修改progress_one()     mesh_to_example(f)------->mesh_to_example(os.path.abspath(f))

解决!

使用后台运行

842 nohup bash reproduce_shapenet_autoencoder.sh > reproduce.log &
843 ls
844 cat reproduce.log
845 conda activate ldif
846 nohup bash reproduce_shapenet_autoencoder.sh > reproduce.log &
847 tail reproduce.log

6.11

拉普拉斯=邻近点的均值和中心点的差

8.30

mseh-fusion更新,改进了cuda版本的问题