Wraps the function
feature_steered_convolution as a TensorFlow layer.
The shorthands used below are
V: The number of vertices.
C: The number of channels in the input data.
In the following, A1 to An are optional batch dimensions.
float tensor with shape
[A1, ..., An, V, C].
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 itself). Each vertex must have at least
one neighbor. For a faithful implementation of the FeaStNet paper,
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 are neighbors,
neighbors[A1, ..., An, i, i] > 0 for all
sum(neighbors, axis=-1)[A1, ..., An, i] == 1.0 for all
These requirements are relaxed in this implementation.
int tensor of shape
[A1, ..., An] indicating the true input
sizes in case of padding (
sizes=None indicates no padding).
sizes[A1, ..., An] <= V. If
neighbors are 2-D,
be ignored. As an example, consider an input consisting of three graphs
V2 vertices respectively. The
padded input would have the following shapes:
data.shape = [3, V, C],
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
have no nonzero entries in the padded regions.
True the assignment of features to
weight matrices will be invariant to translation.
int specifying the number of weight matrices used
in the convolution.
int specifying the number of channels in
the output. If
num_output_channels = C.
An initializer for the trainable variables.
A (name_scope) name for this op. Passed through to
A (var_scope) name for the variables. Defaults to
Tensor with shape
[A1, ..., An, V, num_output_channels].