¶CVPR2020 SketchGCN
论文:SketchGCN: Semantic Sketch Segmentation with Graph Convolutional Networks
代码:暂未开放源代码
这篇文章首次使用GCN进行手绘草图的语义分割任务,如下图中,将手绘的螃蟹的眼睛、钳子、身体、腿用不同的颜色标注。下图是SketchGCN的网络结构图。
首先将输入的草图根据笔画转化为graph,将笔画变成密集的N个点(图中仅画出部分点作示意),同一笔画中的点是有边相连的,不同笔画中的点是不相连的,每个点存储它的绝对坐标(即节点特征是二维的),将节点特征(2*N)和边的集合送入网络,经过两个图卷积 分支提取笔画内的特征(下)和笔画间的特征(上),笔画间的特征再经过Mix池化后和笔画内特征相连,送入多层感知机得到最终的结果。其中两个图卷积分支都采用了类似ResNet的残差连接。
SConv为静态图卷积单元,在不同的层中不会更新图的连接。DConv为动态图卷积单元,在每层都会使用KNN (k=8)来更新图的连接(更新方式和对于图的解释待补充)。SConv和DConv中采用相同的图卷积操作。
图卷积操作:对于第l层的v_i节点 ,节点的特征f_i^l根据下式更新:
$$ f_{i}^{l}=max _{j:(i, j) in mathcal{E}_{l}} h_{Theta_{l}}left(f_{i}^{l-1}, f_{j}^{l-1}right) $$ 其中$Theta$是$h_{Theta}()$中可学习的参数 $$ h_{Theta}left(f_{i}, f_{j}right)=operatorname{ReLU}left(operatorname{MLP}_{Theta}left(operatorname{concat}left(f_{i}, f_{j}-f_{i}right)right)right) $$
Mix Pooling的实现,分为两个分支:
上面的分支用来学习草图级别的特征,通过Max Pooling:
$$ f_{i}^{text {sketch}}=max _{f_{i} in mathcal{F}_{text {global}}} mathrm{MLP}_{Theta_{s k}}left(f_{i}right) $$ 下面的分支用来学习笔画级别的特征,通过自己定义的Stroke Pooling: $$ f_{i}^{text {stroke}}=max _{j:(i, j) in mathcal{E}_{text {pool}, f_{j} in mathcal{F}_{text {global}}}} operatorname{MLP}_{Theta_{text {st}}}left(f_{j}right) $$ 其中,$mathcal{E}_{p o o l}=left{e_{p q}=left{v_{p}, v_{q}right} | v_{p}, v_{q} in mathcal{S}_{r}right}_{r=1, cdots, s}$,$S_r$是草图中的第r个笔画。