Class TNetLayer<T>
- Namespace
- AiDotNet.PointCloud.Layers
- Assembly
- AiDotNet.dll
Implements a Transformation Network (T-Net) for learning spatial transformations of point clouds.
public class TNetLayer<T> : LayerBase<T>, ILayer<T>, IJitCompilable<T>, IDiagnosticsProvider, IWeightLoadable<T>, IDisposable
Type Parameters
TThe numeric type used for calculations (e.g., float, double).
- Inheritance
-
LayerBase<T>TNetLayer<T>
- Implements
-
ILayer<T>
- Inherited Members
Remarks
For Beginners: T-Net learns to align and normalize point clouds before processing.
What T-Net does:
- Learns a transformation matrix to apply to input points
- Aligns point clouds to a canonical orientation
- Makes the network more robust to rotations and translations
- Helps the network focus on shape rather than orientation
How it works:
- Takes point cloud as input
- Processes it through small neural network
- Outputs a transformation matrix (e.g., 3x3 for spatial, KxK for feature)
- Applies this matrix to transform the input
Two types of T-Net in PointNet:
- Input T-Net: 3x3 matrix to align XYZ coordinates
- Feature T-Net: KxK matrix to align high-dimensional features
Benefits:
- Achieves invariance to rigid transformations
- Normalizes point cloud orientation
- Improves classification and segmentation accuracy
Example:
- Input: Point cloud that might be rotated randomly
- T-Net learns: "Rotate this cloud 45 degrees to align it"
- Output: Aligned point cloud in standard orientation
Constructors
TNetLayer(int, int, int[]?, int[]?)
Initializes a new instance of the TNetLayer class.
public TNetLayer(int transformDim, int numFeatures, int[]? mlpChannels = null, int[]? fcChannels = null)
Parameters
transformDimintDimension of the transformation matrix (3 for spatial, higher for features).
numFeaturesintNumber of feature channels in the input.
mlpChannelsint[]Per-point MLP channels used before global pooling.
fcChannelsint[]Fully connected channels used to predict the transformation.
Remarks
For Beginners: Creates a T-Net that learns transformations for point clouds.
Parameters:
- transformDim: Size of transformation matrix
- Use 3 for spatial transformation of XYZ coordinates (learns 3x3 matrix)
- Use 64, 128, etc. for feature transformation (learns KxK matrix)
- numFeatures: How many features each point has
The T-Net internally uses:
- Convolution layers to process point features
- Max pooling to get global information
- Fully connected layers to predict transformation matrix
Example:
- TNetLayer(3, 3): Spatial transformer for XYZ coordinates
- TNetLayer(64, 64): Feature transformer for 64-dimensional features
Properties
ParameterCount
Gets the total number of parameters in this layer.
public override int ParameterCount { get; }
Property Value
- int
The total number of trainable parameters.
Remarks
This property returns the total number of trainable parameters in the layer. By default, it returns the length of the Parameters vector, but derived classes can override this to calculate the number of parameters differently.
For Beginners: This tells you how many learnable values the layer has.
The parameter count:
- Shows how complex the layer is
- Indicates how many values need to be learned during training
- Can help estimate memory usage and computational requirements
Layers with more parameters can potentially learn more complex patterns but may also require more data to train effectively.
SupportsJitCompilation
Gets whether this layer supports JIT compilation.
public override bool SupportsJitCompilation { get; }
Property Value
- bool
True if the layer can be JIT compiled, false otherwise.
Remarks
This property indicates whether the layer has implemented ExportComputationGraph() and can benefit from JIT compilation. All layers MUST implement this property.
For Beginners: JIT compilation can make inference 5-10x faster by converting the layer's operations into optimized native code.
Layers should return false if they:
- Have not yet implemented a working ExportComputationGraph()
- Use dynamic operations that change based on input data
- Are too simple to benefit from JIT compilation
When false, the layer will use the standard Forward() method instead.
SupportsTraining
Gets a value indicating whether this layer supports training.
public override bool SupportsTraining { get; }
Property Value
- bool
trueif the layer has trainable parameters and supports backpropagation; otherwise,false.
Remarks
This property indicates whether the layer can be trained through backpropagation. Layers with trainable parameters such as weights and biases typically return true, while layers that only perform fixed transformations (like pooling or activation layers) typically return false.
For Beginners: This property tells you if the layer can learn from data.
A value of true means:
- The layer has parameters that can be adjusted during training
- It will improve its performance as it sees more data
- It participates in the learning process
A value of false means:
- The layer doesn't have any adjustable parameters
- It performs the same operation regardless of training
- It doesn't need to learn (but may still be useful)
Methods
Backward(Tensor<T>)
Performs the backward pass of the layer.
public override Tensor<T> Backward(Tensor<T> outputGradient)
Parameters
outputGradientTensor<T>The gradient of the loss with respect to the layer's output.
Returns
- Tensor<T>
The gradient of the loss with respect to the layer's input.
Remarks
This abstract method must be implemented by derived classes to define the backward pass of the layer. The backward pass propagates error gradients from the output of the layer back to its input, and calculates gradients for any trainable parameters.
For Beginners: This method is used during training to calculate how the layer's input should change to reduce errors.
During the backward pass:
- The layer receives information about how its output contributed to errors
- It calculates how its parameters should change to reduce errors
- It calculates how its input should change, which will be used by earlier layers
This is the core of how neural networks learn from their mistakes during training.
ClearGradients()
Clears all parameter gradients in this layer.
public override void ClearGradients()
Remarks
This method sets all parameter gradients to zero. This is typically called at the beginning of each batch during training to ensure that gradients from previous batches don't affect the current batch.
For Beginners: This method resets all adjustment values to zero to start fresh.
Clearing gradients:
- Erases all previous adjustment information
- Prepares the layer for a new training batch
- Prevents old adjustments from interfering with new ones
This is typically done at the start of processing each batch of training data to ensure clean, accurate gradient calculations.
ExportComputationGraph(List<ComputationNode<T>>)
Exports the layer's computation graph for JIT compilation.
public override ComputationNode<T> ExportComputationGraph(List<ComputationNode<T>> inputNodes)
Parameters
inputNodesList<ComputationNode<T>>List to populate with input computation nodes.
Returns
- ComputationNode<T>
The output computation node representing the layer's operation.
Remarks
This method constructs a computation graph representation of the layer's forward pass that can be JIT compiled for faster inference. All layers MUST implement this method to support JIT compilation.
For Beginners: JIT (Just-In-Time) compilation converts the layer's operations into optimized native code for 5-10x faster inference.
To support JIT compilation, a layer must:
- Implement this method to export its computation graph
- Set SupportsJitCompilation to true
- Use ComputationNode and TensorOperations to build the graph
All layers are required to implement this method, even if they set SupportsJitCompilation = false.
Forward(Tensor<T>)
Performs the forward pass of the layer.
public override Tensor<T> Forward(Tensor<T> input)
Parameters
inputTensor<T>The input tensor to process.
Returns
- Tensor<T>
The output tensor after processing.
Remarks
This abstract method must be implemented by derived classes to define the forward pass of the layer. The forward pass transforms the input tensor according to the layer's operation and activation function.
For Beginners: This method processes your data through the layer.
The forward pass:
- Takes input data from the previous layer or the network input
- Applies the layer's specific transformation (like convolution or matrix multiplication)
- Applies any activation function
- Passes the result to the next layer
This is where the actual data processing happens during both training and prediction.
GetParameters()
Gets all trainable parameters of the layer as a single vector.
public override Vector<T> GetParameters()
Returns
- Vector<T>
A vector containing all trainable parameters.
Remarks
This abstract method must be implemented by derived classes to provide access to all trainable parameters of the layer as a single vector. This is useful for optimization algorithms that operate on all parameters at once, or for saving and loading model weights.
For Beginners: This method collects all the learnable values from the layer.
The parameters:
- Are the numbers that the neural network learns during training
- Include weights, biases, and other learnable values
- Are combined into a single long list (vector)
This is useful for:
- Saving the model to disk
- Loading parameters from a previously trained model
- Advanced optimization techniques that need access to all parameters
ResetState()
Resets the internal state of the layer.
public override void ResetState()
Remarks
This abstract method must be implemented by derived classes to reset any internal state the layer maintains between forward and backward passes. This is useful when starting to process a new sequence or when implementing stateful recurrent networks.
For Beginners: This method clears the layer's memory to start fresh.
When resetting the state:
- Cached inputs and outputs are cleared
- Any temporary calculations are discarded
- The layer is ready to process new data without being influenced by previous data
This is important for:
- Processing a new, unrelated sequence
- Preventing information from one sequence affecting another
- Starting a new training episode
UpdateParameters(Vector<T>)
Updates the parameters of the layer with the given vector of parameter values.
public override void UpdateParameters(Vector<T> parameters)
Parameters
parametersVector<T>A vector containing all parameters to set.
Remarks
This method sets all the parameters of the layer from a single vector of parameters. The parameters vector must have the correct length to match the total number of parameters in the layer.
For Beginners: This method updates all the learnable values in the layer at once.
When updating parameters:
- The input must be a vector with the correct length
- This replaces all the current parameters with the new ones
- Throws an error if the input doesn't match the expected number of parameters
This is useful for:
- Optimizers that work with all parameters at once
- Applying parameters from another source
- Setting parameters to specific values for testing
Exceptions
- ArgumentException
Thrown when the parameters vector has incorrect length.
UpdateParameters(T)
Updates the parameters of the layer using the calculated gradients.
public override void UpdateParameters(T learningRate)
Parameters
learningRateTThe learning rate to use for the parameter updates.
Remarks
This abstract method must be implemented by derived classes to define how the layer's parameters are updated during training. The learning rate controls the size of the parameter updates.
For Beginners: This method updates the layer's internal values during training.
When updating parameters:
- The weights, biases, or other parameters are adjusted to reduce prediction errors
- The learning rate controls how big each update step is
- Smaller learning rates mean slower but more stable learning
- Larger learning rates mean faster but potentially unstable learning
This is how the layer "learns" from data over time, gradually improving its ability to extract useful patterns from inputs.