pytorch3d 上手测试
前言
最近Facebook放出了PyTorch3D,用于3D Computer Vision research。尚不知都可以做些什么。最近正在做3D point cloud和mesh相关的处理,也有深度学习的东西,由于前两天nvidia的一个在线webinar,还有目前老板都对我推荐了这个,所以今天上手测试一下。
后记
测试完所有4个目前的tutorial之后,可以简单总结如下。PyTorch3D提供了一组batch模式下处理3D数据的package。针对以mesh形式描述的3D数据,PyTorch3D提供了mesh的表达,点sample,io,loss计算,render,和transform等功能。这些功能不单方便了处理3D mesh,同时由于引入了torch,运算可以直接在GPU上执行。PyTorch3D不单可用于tutorial中所列举的用途(多数是对少量参数进行优化),在针对3D的深度学习上,应该也会有现实用途,之后再慢慢探索。
关于点云,并没有特别的提及,可能是目前主要的目标是mesh,后期再探索点云相关的使用场景。
系统信息
测试的计算机运行Ubuntu 18.04 LTS,nvidia driver 440.64, cuda SDK 10.2 with cudnn7。Python 3.6.9 (Native python)
PyTorch3D采用的是20200313 commit 4d3c886。目前官方要求cuda 10.1,但是本机已然是10.2了,先这么着。
目前参考的PyTroch documentation在这里。
准备与安装
首先整了一个virtualenv,称为p3pt3d
virtualenv -p /usr/bin/python3 p3pt3d
activate这个virtualenv然后开始安装我平时需要的package
pip install numpy scipy matplotlib==3.0.0 ipython numba pandas visdom plyfile scikit-image opencv-python opencv-contrib-python
接下来是jupyter,由于在运行PyTorch3D的官方教程时出现了一些错误,google了一下采用了如下措施
pip install jupyterlab ipywidgets
jupyter nbextension enable --py widgetsnbextension --sys-prefix
注意最后那个--sys-prefix
是由于我正在使用virtualenv。上述的处理方案出自
https://github.com/tqdm/tqdm/issues/872 和
https://ipywidgets.readthedocs.io/en/latest/user_install.html
之后是torch
pip install torch torchvision
我选择以在本地编译源码的方式安装PyTorch3D,原因是这个项目目前还在发展阶段,肯定会有各种bug和快速迭代更新,可以通过自己pull源码来快速获得更新。从PyTorch3D的github页面复制repo的地址在本地clone。之后根据官方的install说明尝试安装。
pip install fvcore
然后在PyTorch3D源码文件夹内 (此时virtualenv是activate状态)
pip install -e .
等了一段时间,安装成功。
官方tutorial
目前在PyTorch3D的官方github页面上,有4个tutorial。
T1: Deform a sphere mesh to dolphin
这个tutorial的官方原始notebook文件在这里。在本机上测试是可以智行的。由于jupyter会报一些错误,于是都是手工复制了cell到本地的notebook去挨个执行的,本来也是要学习,所以一个个手工搞也没有啥不好。
这是deform之前和之后的mesh,用meshlab读入然后将目标mesh渲染为grid(红色),将deform过的mesh渲染为surface(灰色)。
T2: Bundle Adjustment
官方的notebook在这里。
在本机上执行的结果和官网上的结果一模一样,话说并行计算时结果很多时候不都会有一点细微差异么,这个貌似没有。
这个tutorial中展示了PyTorch3D提供的一些package,例如
- pytorch3d.transforms 提供了处理3D空间平移,旋转,quaternion,so(3)等所需要的工具。看API描述,大部分支持batch运算,尚未仔细测试。
- pytorch3d.renderer 提供了处理位图,相机pose,光照,表面纹理,光影渲染等用途的工具。尚未仔细测试。
T3: Render a textured mesh
目前的官方notebook里,出现的几个牛的图片是重复的,实际上的运行效果是下图所示的样子。
值得注意的是render也是可以以batch方式运行的。
T4: Camera position optimization
这个tutorial展示了从nn.Module派生出优化对象,利用pytorch提供的优化方法直接进行优化。tutorial给出的初始值挺magical的,我测了几个别的初始值,都没有成功收敛到官方的结果。但是计算流程是顺利的。以后再琢磨了。
下图是以(-3.0, 6.9, 2.5)为初始相机位置开始的迭代结果,这个是得到了和官方tutorial一样的结果。
上一篇: TIDB安装
下一篇: 使用Docker安装TiDB