Implements the Feature Steered graph convolution.
tfg.geometry.convolution.graph_convolution.feature_steered_convolution( data, neighbors, sizes, var_u, var_v, var_c, var_w, var_b, name=None )
FeaStNet: Feature-Steered Graph Convolutions for 3D Shape Analysis Nitika Verma, Edmond Boyer, Jakob Verbeek CVPR 2018 https://arxiv.org/abs/1706.05206
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 (
to the variables with the same names in the paper cited above.
In the following, A1 to An are optional batch dimensions.
floattensor with shape
[A1, ..., An, V, C].
SparseTensorwith the same type as
dataand 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] > 0if vertex j is a neighbor of i, and
neighbors[A1, ..., An, i, i] > 0for all i, and
sum(neighbors, axis=-1)[A1, ..., An, i] == 1.0 for all i. These requirements are relaxed in this implementation.
inttensor of shape
[A1, ..., An]indicating the true input sizes in case of padding (
sizes=Noneindicates no padding).Note that
sizes[A1, ..., An] <= V. If
sizeswill 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
neighborsshould have no nonzero entries in the padded regions.
var_u: A 2-D tensor with shape
var_v: A 2-D tensor with shape
var_c: A 1-D tensor with shape
var_w: A 3-D tensor with shape
[W, C, D].
var_b: A 1-D tensor with shape
name: A name for this op. Defaults to
Tensor with shape
[A1, ..., An, V, D].
TypeError: if the input types are invalid.
ValueError: if the input dimensions are invalid.