概述
- 任务:无条件生成mesh (无颜色)
- 数据集:shapenet v2
- 方法:先trian一个auto encoder,用来获得code book;然后trian一个自回归的transformer
- mesh表达:face序列。face按规定的顺序;每个face用三个顶点的坐标表示
Learning Quantized Triangle Embeddings (一个auto encoder)
- mesh表示为triangle face的序列。
- triangle的顺序?作者直接按照Polygen来的:
- 先排列vertex,再按vertex来排triangle
- vertex是按zyx的顺序,从低到高排
- triangle是从最low的vertex,次low的,最后到最high的vertex来排列。
- face怎么表示呢?直接用3 vertices的9 coordinates 来表达一个face不太好;因此作者就这样:
- 图卷积或的face feature vector
- 用图来表达,图的节点是face,边是face的邻接关系
- node features初始化为9个顶点的位置,face normal,edge between angles,area
- 经过若干SAGEConv 层(也就是encoder E),得到每个face的feature vector Z
- quantization: residual vector quantization (RQ)
- 作者发现每个face只搞一个code效果不好。于是作者用stack of D codes per face。
- 另外发现最好是按vertex来quantize
- T = RQ (Z; C, D) , Z是刚才的face features,C是codebook, D是depth。 T就是得到的tokens。每个t就是一个codebook C里面的index,指向C里面的一个embedding e。(后面的transformer要用的就是这个e和codebook)
- Decoder把face embeddings给decode成triangles
- 先把D个features合成一个,方法是summation和concatenation
- 用的是一个1D ResNet34 decoding head G,把刚才的这个code给decode成triangle序列,顺序就是刚才讲得顺序。每个face表示为9 coordinates。
- 发现coordiantes预测为某些固定点的概率,会比直接回归坐标更准(图4)
- 图卷积或的face feature vector
mesh generation with transformers
像文字接龙的语言模型一样,自回归地训练transformer:
- transformer训练时的输入,是刚才得到的e,(加上learned position encoding等);
- 经过一个类似GPT的transformer,预测下一个token e在codebook中的index
- 用交叉熵loss来train
得到mesh:
- 接龙完成后(得到stop signal后),用刚才的resnet decoder G来得到mesh。
- 用meshlab搞了一个后处理,来合并距离很近的点
训练时间
训练时间:
AutoEncoder用了2 A100, 2 days
transformer用了4 A100, 5 days
数据集:
ShapeNetV2, 所有55个categories来train GPT; 但在chair,table,bench和lamp这四个类别上finetune。