这篇论文的工作是,将模型用一组具有层级结构的长方体来表述,且这种层级结构模型,可以通过rvnn来编码为一串隐向量特征,这样就能进行模型混合啦。最后还能把层级结构模型复原为连续的模型。
整个方法是三步走的,首先是一个基于RVNN的auto-encoder,这一步的主要工作其实是找出合理的层级结构,也顺便进行了预训练。然后是RVNN-GAN,这一步的主要目的是让整个特征空间都能复原出合理的模型。最后就是体素化的几何生成,训练了另一个神经网络用于将层级结构模型复原为体素模型。
这个基于rvnn的autoencoder结构很神奇,它总共有三个encode和三个decode。
其中boxDecode是叶子节点对应的decode,输入n-D 向量,输出目标的12-D参数,也就是box的尺寸、位置、旋转那些啦
而adjDecode和SymDecode则都是继续开枝散叶。adjDecode是输入n-D向量,输出两个n-D向量,这两个向量分别编码了两个相邻的结构。SymDecode是输入n-D向量,输出一个n-D向量以及一组用于对称(或阵列)操作的参数,输出的n-D向量编码了进行对称操作的单元结构(比如镜像的一边、阵列的元素)。
而在对一串n-D特征进行解码时,要把它送进哪个decode则取决于NodeClassifier,把这串n-D向量送进NodeClassifier,根据一个3-D的输出结果判断接下来要用哪个decode。
也就是说一串n-D特征,它可能编码了一整个模型,也可能是编码了模型的一部分,也可能只是一个box,这是由特征内隐含的信息决定的,NodeClassifier会对这个信息进行判断
而三个encode则就是decode的对称情况,不过在encode阶段,我们不需要再借助一个NodeClassifier来判断要选用哪个encode,因为encode是对本身已经具有层级结构的模型进行编码,只要按自身的层级结构来进行编码就行。
在这篇论文中,auto-encoder pre-training阶段的训练的初始层级结构,是通过随机选取满足相邻或对称条件的部件来构成的,他们为每个模型随机了20个层级结构来作为pre-training阶段的输入,这样随机选取的层级结构可能不是很准确,但大体上是合理的。而且在训练时,encode和decode不一定是对称的,decode会为了最小化误差而自动调整层级结构
如下图中,相比于先阵列再邻接,先进行邻接再进行阵列的更易于减小误差,那么在进行训练后,auto-encoder就会更倾向于找出这样的层级结构
未完待续