论文名:PCN: Point Completion Network
源码:https://github.com/wentaoyuan/pcn
一些杂乱的记录:
1.一定要记得conda activate py36(后续所有的包其实安装在了这里面了)
2.初次安装完open3d之后 环境应该是被覆盖了 所以requirement安装的依赖就都没有了
3.查看makefile文件里面对应的路径,是否是你已下载好的or总服务器里有的(此处我还犯了个错,就是修改makefile一直不生效,后来发现是和远程服务器的映射关系写错了,一直改动的是另外的文件夹的makefile。此处的错误解决是因为在命令行里面通过vim看了该文件。所以啊,有时候可视化工具方便,但是你基础配置错了就要找半天毛病。)
4.tensorflow版本1.12.1,原因:
5.https://forums.developer.nvidia.com/t/cuda-with-tensorflow-issue-libcudart-so-9-0-cannot-open-shared-object-file-no-such-file-or-directory/62437/3
6.https://blog.csdn.net/wotainanlejnhj/article/details/120208545?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link
弃掉了之前的TensorFlow版本,转为实现pytorch版本了。
源码:https://github.com/qinglew/PCN-PyTorch
以下是跑通了dataset.py和demo.py之后阅读源码的一些杂乱记录:
1. pytorch:F.relu() 与 nn.ReLU() 的区别
其实这两种方法都是使用relu激活,只是使用的场景不一样,F.relu()是函数调用,一般使用在foreward函数里。而nn.ReLU()是模块调用,一般在定义网络层的时候使用。
当用print(net)输出时,会有nn.ReLU()层,而F.ReLU()是没有输出的。
2. 再次学习一下nn.Module
学习的参考链接:https://blog.csdn.net/qq_27825451/article/details/90550890
3. 有关pytorch中num_workers详解
学习的参考链接:https://blog.csdn.net/qq_24407657/article/details/103992170
4. nn.Conv1d
计算过程的参考链接:https://www.cnblogs.com/talkaudiodev/p/14287562.html
理解时应将里面的所有矩阵转置一下,涉及到的行应都理解为列。所谓一维卷积,就是卷积时只看纵列。重点是卷积时,只在纵列一个方向上滑动。
5. 什么是shared mlp
以及对如下代码的理解:
学习参考链接:https://blog.csdn.net/Passersby__/article/details/104941591
5. 对torch.max()的理解、对dim的理解
学习参考链接:https://www.cnblogs.com/flix/p/11262606.html
关于维度可以用一句话总结,0表示张量的最高维度(代表最外侧括号),1表示张张量的次高维度,2表示张量的次次高维度,以此类推。-1表示张量维度的最低维度(最内侧括号),-2表示倒数第二维度,-3表示倒数第三维度。
6. 代码中的第一个PN层理解
7. 代码中的第二个PN层理解
8. 理解全连接层
理解结构的话,简单来说就是:相邻层之间所有节点全部连接。
理解意义的话,参考链接:https://blog.csdn.net/nanhuaibeian/article/details/100532038
9. 理解decoder部分的第一阶段,生成粗略点云输出
在理解这部分的时候又对张量的维度有了进一步的理解,顺道也更正了前文的图。
首先仍然是定义网络:
然后附上对维度的理解,顺道更新了前文的v:
10. 理解decoder部分的第二阶段
对上一张草图的FC结果,加了一层修改(微小)
至此,整个autoencoder部分(encoder+decoder)理解完成。



