Implements the Feature Steered graph convolution.

FeaStNet: Feature-Steered Graph Convolutions for 3D Shape Analysis Nitika Verma, Edmond Boyer, Jakob Verbeek CVPR 2018

The shorthands used below are V: The number of vertices. C: The number of channels in the input data. D: The number of channels in the output after convolution. W: The number of weight matrices used in the convolution. The input variables (var_u, var_v, var_c, var_w, var_b) correspond to the variables with the same names in the paper cited above.

In the following, A1 to An are optional batch dimensions.

data A float tensor with shape [A1, ..., An, V, C].
neighbors A SparseTensor with the same type as data and with shape [A1, ..., An, V, V] representing vertex neighborhoods. The neighborhood of a vertex defines the support region for convolution. For a mesh, a common choice for the neighborhood of vertex i would be the vertices in the K-ring of i (including i itself). Each vertex must have at least one neighbor. For a faithful implementation of the FeaStNet convolution, neighbors should be a row-normalized weight matrix corresponding to the graph adjacency matrix with self-edges: neighbors[A1, ..., An, i, j] > 0 if vertex j is a neighbor of i, and neighbors[A1, ..., An, i, i] > 0 for all i, and sum(neighbors, axis=-1)[A1, ..., An, i] == 1.0 for all i. These requirements are relaxed in this implementation.
sizes An int tensor of shape [A1, ..., An] indicating the true input sizes in case of padding (sizes=None indicates no padding).Note that sizes[A1, ..., An] <= V. If data and neighbors are 2-D, sizes will be ignored. An example usage of sizes: consider an input consisting of three graphs G0, G1, and G2 with V0, V1, and V2 vertices respectively. The padded input would have the following shapes: data.shape = [3, V, C] and neighbors.shape = [3, V, V], where V = max([V0, V1, V2]). The true sizes of each graph will be specified by sizes=[V0, V1, V2], data[i, :Vi, :] and neighbors[i, :Vi, :Vi] will be the vertex and neighborhood data of graph Gi. The SparseTensor neighbors should have no nonzero entries in the padded regions.
var_u A 2-D tensor with shape [C, W].
var_v A 2-D tensor with shape [C, W].
var_c A 1-D tensor with shape [W].
var_w A 3-D tensor with shape [W, C, D].
var_b A 1-D tensor with shape [D].
name A name for this op. Defaults to graph_convolution_feature_steered_convolution.

Tensor with shape [A1, ..., An, V, D].

TypeError if the input types are invalid.
ValueError if the input dimensions are invalid.