MyCaffe
1.12.2.41
Deep learning software for Windows C# programmers.
|
The ConvolutionLayer convolves the input image with a bank of learned filters, and (optionally) adds biases. This layer is initialized with the MyCaffe.param.ConvolutionParameter. More...
Public Member Functions | |
ConvolutionLayer (CudaDnn< T > cuda, Log log, LayerParameter p) | |
The ConvolutionLayer constructor. More... | |
override void | LayerSetUp (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Setup the layer for use with both Engine.CAFFE and Engine.CUDNN modes. More... | |
override void | Reshape (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Reshape the bottom (input) and top (output) blobs. More... | |
Public Member Functions inherited from MyCaffe.layers.BaseConvolutionLayer< T > | |
BaseConvolutionLayer (CudaDnn< T > cuda, Log log, LayerParameter p) | |
The BaseConvolutionLayer constructor. More... | |
override bool | ReInitializeParameters (WEIGHT_TARGET target) |
Re-initialize the parameters of the layer. More... | |
Public Member Functions inherited from MyCaffe.layers.Layer< T > | |
Layer (CudaDnn< T > cuda, Log log, LayerParameter p) | |
The Layer constructor. More... | |
void | Dispose () |
Releases all GPU and host resources used by the Layer. More... | |
virtual void | ConnectLoss (LossLayer< T > layer) |
Called to connect the loss OnLoss event to a specified layer (typically the data layer). More... | |
virtual BlobCollection< T > | PreProcessInput (PropertySet customInput, out int nSeqLen, BlobCollection< T > colBottom=null) |
The PreprocessInput allows derivative data layers to convert a property set of input data into the bottom blob collection used as intput. More... | |
virtual bool | PreProcessInput (string strEncInput, int? nDecInput, BlobCollection< T > colBottom) |
Preprocess the input data for the RUN phase. More... | |
virtual List< Tuple< string, int, double > > | PostProcessOutput (Blob< T > blobSofmtax, int nK=1) |
The PostProcessOutput allows derivative data layers to post-process the results, converting them back into text results (e.g., detokenizing). More... | |
virtual List< Tuple< string, int, double > > | PostProcessLogitsOutput (int nCurIdx, Blob< T > blobLogits, Layer< T > softmax, int nAxis, int nK=1) |
The PostProcessLogitsOutput allows derivative data layers to post-process the results, converting them back into text results (e.g., detokenizing). More... | |
virtual string | PostProcessFullOutput (Blob< T > blobSoftmax) |
The PostProcessFullOutput allows derivative data layers to post-process the results, usually be detokenizing the data in the blobSoftmax. More... | |
virtual string | PostProcessOutput (int nIdx) |
Convert the index to the word. More... | |
virtual void | SetOnDebug (EventHandler< GetWorkBlobArgs< T > > fn) |
Set the OnDebug event. More... | |
virtual void | ResetOnDebug (EventHandler< GetWorkBlobArgs< T > > fn) |
Reset the OnDebug event, disabling it. More... | |
void | SetNetReshapeRequest () |
Called by the Net when requesting a reshape. More... | |
void | SetPhase (Phase phase) |
Changes the layer's Phase to the one specified. More... | |
void | Setup (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Implements common Layer setup functionality. More... | |
virtual void | SetNetParameterUsed (NetParameter np) |
This function allows other layers to gather needed information from the NetParameters if any, and is called when initialzing the Net. More... | |
void | ConvertToBase (BlobCollection< T > col) |
ConvertToBase converts any blobs in a collection that are in half size to the base size. More... | |
double | Forward (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Given the bottom (input) Blobs, this function computes the top (output) Blobs and the loss. More... | |
void | Backward (BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom) |
Given the top Blob error gradients, compute the bottom Blob error gradients. More... | |
double | loss (int nTopIdx) |
Returns the scalar loss associated with the top Blob at a given index. More... | |
void | set_loss (int nTopIdx, double dfLoss) |
Sets the loss associated with a top Blob at a given index. More... | |
virtual bool | AllowForceBackward (int nBottomIdx) |
Return whether to allow More... | |
bool | param_propagate_down (int nParamIdx) |
Returns whether or not the Layer should compute gradients w.r.t. a parameter at a particular index given by a parameter index. More... | |
void | set_param_propagate_down (int nParamIdx, bool bPropagate) |
Sets whether or not the Layer should compute gradients w.r.t. a parameter at a particular index given by a parameter index. More... | |
void | SetEnablePassthrough (bool bEnable) |
Enables/disables the pass-through mode. More... | |
Protected Member Functions | |
override void | dispose () |
Releases all GPU and host resources used by the Layer. More... | |
override bool | reshapeNeeded (BlobCollection< T > colBottom, BlobCollection< T > colTop, bool bReset=true) |
Tests the shapes of both the bottom and top blobs and if they are the same as the previous sizing, returns false indicating that no reshape is needed. More... | |
override bool | reverse_dimensions () |
Returns false, for we want convolution, not deconvolution. More... | |
override void | compute_output_shape () |
Computes the output shape used by the BaseConvolutionLayer. More... | |
override void | forward (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Run the Forward computation using either the Engine.CAFFE or Engine.CUDNN mode as specified in the LayerParameter. More... | |
override void | backward (BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom) |
Run the Backward computation using either the Engine.CAFFE or Engine.CUDNN mode as specified in the LayerParameter. More... | |
void | forward_cuda (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Run the Forward computation using the Engine.CAFFE mode as specified in the LayerParameter. More... | |
void | backward_cuda (BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom) |
Run the Backward computation using the Engine.CAFFE mode as specified in the LayerParameter. More... | |
void | forward_cudnn (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Run the Forward computation using the Engine CUDNN mode as specified in the LayerParameter. More... | |
void | backward_cudnn (BlobCollection< T > colTop, List< bool > rgbPropagateDown, BlobCollection< T > colBottom) |
Run the Backward computation using the Engine CUDNN mode as specified in the LayerParameter. More... | |
Protected Member Functions inherited from MyCaffe.layers.BaseConvolutionLayer< T > | |
ulong | getWorkspaceLimitInBytes (bool bUseTensorCores=false) |
Returns the workspace limit in bytes based on the cudnn_workspace_limit setting. More... | |
override void | setup_internal_blobs (BlobCollection< T > col) |
Derivative layers should add all internal blobws to the 'col' provided. More... | |
override WorkspaceArgs | getWorkspace () |
Retruns the WorkspaceArgs containing the workspace used by this Layer. More... | |
override bool | setWorkspace (ulong lSizeInBytes) |
If not already set, allocates the workspace needed in GPU memory. More... | |
void | forward_gemm (long hInput, int nInputOffset, long hWeights, long hOutput, int nOutputOffset, bool bSkipIm2Col=false) |
Helper function that abstract away the column buffer and gemm arguments. More... | |
void | forward_bias (long hOutput, int nOutputOffset, long hBias) |
Helper function that abstracts away the column buffer and gemm arguments. More... | |
void | backward_gemm (long hOutput, int nOutputOffset, long hWeights, long hInput, int nInputOffset) |
Helper function that abstract away the column buffer and gemm arguments. More... | |
void | weight_gemm (long hInput, int nInputOffset, long hOutput, int nOutputOffset, long hWeights) |
Helper function that abstract away the column buffer and gemm arguments. More... | |
void | backward_bias (long hBias, long hInput, int nInputOffset) |
Helper function that abstracts away the column buffer and gemm arguments. More... | |
int | input_shape (int i) |
Returns the spatial dimensions of the input. More... | |
Protected Member Functions inherited from MyCaffe.layers.Layer< T > | |
void | dispose (ref Layer< T > l) |
Helper method used to dispose internal layers. More... | |
void | dispose (ref Blob< T > b) |
Helper method used to dispose internal blobs. More... | |
void | dispose (ref BlobCollection< T > rg, bool bSetToNull=true) |
Dispose the blob collection. More... | |
GetIterationArgs | getCurrentIteration () |
Fires the OnGetIteration event to query the current iteration. More... | |
long | convert_to_full (int nCount, long hMem) |
Convert half memory to full memory. More... | |
void | convert (BlobCollection< T > col) |
Convert a collection of blobs from / to half size. More... | |
bool | compareShapes (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Compare the shapes of the top and bottom and if the same, return true, otherwise false. More... | |
void | setShapes (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Set the internal shape sizes - used when determining if a Reshape is necessary. More... | |
void | CheckBlobCounts (BlobCollection< T > colBottom, BlobCollection< T > colTop) |
Called by the Layer::Setup function to check the number of bottom (input) and top (output) Blobs provided match the expected number of blobs expected via the {EactNum,Min,Max}{Bottom,Top}Blobs functions. More... | |
void | SetLossWeights (BlobCollection< T > colTop) |
Called by Layer::Setup to initialize the weights associated with any top (output) Blobs in the loss function ans store non-zero loss weights in the diff Blob. More... | |
LayerParameter | convertLayerParam (LayerParameter pChild, LayerParameter pParent) |
Called to convert a parent LayerParameterEx, used in blob sharing, with a child layer parameter. More... | |
bool | shareParameter (Blob< T > b, List< int > rgMinShape, bool bAllowEndsWithComparison=false) |
Attempts to share a parameter Blob if another parameter Blob with the same name and accpetable size is found. More... | |
bool | shareLayerBlob (Blob< T > b, List< int > rgMinShape) |
Attempts to share a Layer Blob if another parameter Blob with the same name and acceptable size is found. More... | |
bool | shareLayerBlobs (Layer< T > layer) |
Attempts to share the Layer blobs and internal_blobs with matching names and sizes with those in another matching layer. More... | |
void | check_nan (Blob< T > b) |
Checks a Blob for NaNs and throws an exception if found. More... | |
T | convert (double df) |
Converts a double to a generic. More... | |
T | convert (float f) |
Converts a float to a generic. More... | |
double | convertD (T df) |
Converts a generic to a double value. More... | |
float | convertF (T df) |
Converts a generic to a float value. More... | |
double[] | convertD (T[] rg) |
Converts an array of generic values into an array of double values. More... | |
T[] | convert (double[] rg) |
Converts an array of double values into an array of generic values. More... | |
float[] | convertF (T[] rg) |
Converts an array of float values into an array of generic values. More... | |
T[] | convert (float[] rg) |
Converts an array of float values into an array of generic values. More... | |
int | val_at (T[] rg, int nIdx) |
Returns the integer value at a given index in a generic array. More... | |
Size | size_at (Blob< T > b) |
Returns the Size of a given two element Blob, such as one that stores Blob size information. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from MyCaffe.layers.Layer< T > | |
static Layer< T > | Create (CudaDnn< T > cuda, Log log, LayerParameter p, CancelEvent evtCancel, IXDatabaseBase db=null, TransferInput trxinput=null) |
Create a new Layer based on the LayerParameter. More... | |
Protected Attributes inherited from MyCaffe.layers.BaseConvolutionLayer< T > | |
Blob< T > | m_blobKernelShape |
The spatial dimensions of the filter kernel. More... | |
Blob< T > | m_blobStride |
The spatial dimensions of the stride. More... | |
Blob< T > | m_blobPad |
The spatial dimensions of the padding. More... | |
Blob< T > | m_blobDilation |
The spatial dimentions of the dilation. More... | |
Blob< T > | m_blobConvInputShape |
The spatial dimensions of the convolution input. More... | |
List< int > | m_rgColBufferShape |
The spatial dimensionss of the col_buffer. More... | |
List< int > | m_rgOutputShape = new List<int>() |
The spatial dimensions of the output. More... | |
List< int > | m_rgBottomShape = new List<int>() |
The buttom shape. More... | |
int | m_nNumSpatialAxes |
The number of spatial axes. More... | |
int | m_nBottomDim |
The bottom dimension. More... | |
int | m_nTopDim |
The top dimension. More... | |
int | m_nChannelAxis |
The channel axis. More... | |
int | m_nNum |
The number of items in the batch. More... | |
int | m_nChannels |
The number of channels in each item. More... | |
int | m_nGroup |
The group. More... | |
int | m_nOutSpatialDim |
The output spatial dimension. More... | |
int | m_nWeightOffset |
The weight offset used. More... | |
int | m_nNumOutput |
The number of outputs. More... | |
bool | m_bBiasTerm |
Whether or not to use bias. More... | |
bool | m_bIs1x1 |
Whether or not the kernel is 1x1. More... | |
bool | m_bForceNDim2col |
Whether or not to force n-dim 2 column. More... | |
Protected Attributes inherited from MyCaffe.layers.Layer< T > | |
LayerParameter.LayerType | m_type = LayerParameter.LayerType._MAX |
Specifies the Layer type. More... | |
CudaDnn< T > | m_cuda |
Specifies the CudaDnn connection to Cuda. More... | |
Log | m_log |
Specifies the Log for output. More... | |
LayerParameter | m_param |
Specifies the LayerParameter describing the Layer. More... | |
Phase | m_phase |
Specifies the Phase under which the Layer is run. More... | |
BlobCollection< T > | m_colBlobs |
Specifies the learnable parameter Blobs of the Layer. More... | |
BlobCollection< T > | m_colInternalBlobs = new BlobCollection<T>() |
Specifies internal blobs used by the layer. More... | |
DictionaryMap< bool > | m_rgbParamPropagateDown |
Specifies whether or not to compute the learnable diff of each parameter Blob. More... | |
DictionaryMap< double > | m_rgLoss |
Specifies the loss values that indeicate whether each top (output) Blob has a non-zero weight in the objective function.. More... | |
T | m_tOne |
Specifies a generic type equal to 1.0. More... | |
T | m_tZero |
Specifies a generic type equal to 0.0. More... | |
bool | m_bEnablePassthrough = false |
Enables/disables the pass-through mode for the layer. Default = false. More... | |
bool | m_bUseHalfSize = false |
Specifies that the half size of the top (if any) should be converted to the base size. More... | |
bool | m_bConvertTopOnFwd = false |
Specifies whether or not the layer should convert the top on the forward pass when using half sized memory (typically only done with input data). More... | |
bool | m_bConvertTopOnBwd = true |
Specifies whether or not to convert the top on the backward pass when using half sized memory (typically not done on loss layers). More... | |
bool | m_bConvertBottom = true |
Specifies whether or not the layer should convert the bottom when using half sized memory. More... | |
bool | m_bReshapeOnForwardNeeded = true |
Specifies whether or not the reshape on forward is needed or not. More... | |
bool | m_bNetReshapeRequest = false |
Specifies whether the reshape is requested from a Net.Reshape call or not. More... | |
LayerParameter.? LayerType | m_parentLayerType = null |
Specifies the layer type of the parent. More... | |
Properties inherited from MyCaffe.layers.BaseConvolutionLayer< T > | |
override int | MinBottomBlobs [get] |
Returns the minimum number of required bottom Blobs: input More... | |
override int | MinTopBlobs [get] |
Returns the minimum number of required top (output) Blobs: output More... | |
override bool | EqualNumBottomTopBlobs [get] |
Returns that there are an equal number of top and bottom Blobs. More... | |
Properties inherited from MyCaffe.layers.Layer< T > | |
LayerParameter.? LayerType | parent_layer_type [get] |
Optionally, specifies the parent layer type (e.g. LOSS, etc.) More... | |
virtual bool | SupportsPreProcessing [get] |
Should return true when PreProcessing methods are overriden. More... | |
virtual bool | SupportsPostProcessing [get] |
Should return true when pre PostProcessing methods are overriden. More... | |
virtual bool | SupportsPostProcessingLogits [get] |
Should return true when pre PostProcessingLogits methods are overriden. More... | |
virtual bool | SupportsPostProcessingFullOutput [get] |
Should return true when PostProcessingFullOutput is supported. More... | |
BlobCollection< T > | blobs [get] |
Returns the collection of learnable parameter Blobs for the Layer. More... | |
BlobCollection< T > | internal_blobs [get] |
Returns the collection of internal Blobs used by the Layer. More... | |
LayerParameter | layer_param [get] |
Returns the LayerParameter for this Layer. More... | |
LayerParameter.LayerType | type [get] |
Returns the LayerType of this Layer. More... | |
virtual int | ExactNumBottomBlobs [get] |
Returns the exact number of bottom (input) Blobs required by the Layer, or -1 if no exact number is required. More... | |
virtual int | MinBottomBlobs [get] |
Returns the minimum number of bottom (input) Blobs required by the Layer, or -1 if no minimum number is required. More... | |
virtual int | MaxBottomBlobs [get] |
Returns the maximum number of bottom (input) Blobs required by the Layer, or -1 if no maximum number is required. More... | |
virtual int | ExactNumTopBlobs [get] |
Returns the exact number of top (output) Blobs required by the Layer, or -1 if no exact number is required. More... | |
virtual int | MinTopBlobs [get] |
Returns the minimum number of top (output) Blobs required by the Layer, or -1 if no minimum number is required. More... | |
virtual int | MaxTopBlobs [get] |
Returns the maximum number of top (output) Blobs required by the Layer, or -1 if no maximum number is required. More... | |
virtual bool | EqualNumBottomTopBlobs [get] |
Returns true if the Layer requires and equal number of bottom (input) and top (output) Blobs. More... | |
virtual bool | AutoTopBlobs [get] |
Return whether "anonymous" top (output) Blobs are created automatically by the Layer. More... | |
double | forward_timing [get] |
Returns the timing of the last forward pass in milliseconds. More... | |
double | forward_timing_average [get] |
Returns the average timing of the forward passes in milliseconds. More... | |
double | backward_timing [get] |
Returns the timing of the last backward pass in milliseconds. More... | |
double | backward_timing_average [get] |
Returns the average timing of the backward passes in milliseconds. More... | |
Events inherited from MyCaffe.layers.Layer< T > | |
EventHandler< WorkspaceArgs > | OnGetWorkspace |
Specifies the OnGetWorkspace event that fires when the getWorkspace() function is called by a layer to get a shareable workspace to conserve GPU memory. More... | |
EventHandler< WorkspaceArgs > | OnSetWorkspace |
Specifies the OnSetWorkspace event that fires when the setWorkspace() function is called by a layer to get a shareable workspace to conserve GPU memory. More... | |
EventHandler< GetIterationArgs > | OnGetIteration |
Specifies the OnGetIteration event that fires when a layer needs to get the current iteration from the solver. More... | |
EventHandler< GetWorkBlobArgs< T > > | OnDebug |
Specifies the OnGetWorkBlob event that is only supported when debugging to get a work blob from the primary Net holding this layer. More... | |
The ConvolutionLayer convolves the input image with a bank of learned filters, and (optionally) adds biases. This layer is initialized with the MyCaffe.param.ConvolutionParameter.
Caffe convolves by reduction to matrix multiplication. This achieves high-throughput and generality of input and filter dimensions but comes at the cost of memory for matrices. This makes use of efficiency in BLAS.
The input is 'im2col' transformed to a channel 'K x H x W' data matrix for multiplication with the 'N x K x H x W' filter matrix to yield a 'N x H x W' output matrix that is then 'col2im' restored. K is the input channel * kernel height * kernel width dimension of the unrolled inputs so that the im2col matrix has a column for each input region to be filtered. col2im restores the output spatial structure by unrulling up the output channel 'N' columns of the output matrix.
Note: cuDNN accelerates convolution through forward kernels for filtering and bias plus backward kernels for gradient w.r.t the filters, biases, and inputs. Caffe + cuDNN further speeds up the computation through forward parallelism across groups and backward parallelism across gradients.
The cuDNN engine does not have memory overhead for the matrix buffers. For many input and filter regimes the cuDNN engien is faster than the CAFFE engine, but for fully-convolutional models and large inputs the CAFFE engine can be faster as long as it fits in memory.
T | Specifies the base type float or double. Using float is recommended to conserve GPU memory. |
Definition at line 47 of file ConvolutionLayer.cs.
MyCaffe.layers.ConvolutionLayer< T >.ConvolutionLayer | ( | CudaDnn< T > | cuda, |
Log | log, | ||
LayerParameter | p | ||
) |
The ConvolutionLayer constructor.
cuda | Specifies the CudaDnn connection to Cuda. |
log | Specifies the Log for output. |
p | Provides ConvolutionParameter convolution_param with ConvolutionLayer options:
|
Definition at line 118 of file ConvolutionLayer.cs.
|
protectedvirtual |
Run the Backward computation using either the Engine.CAFFE or Engine.CUDNN mode as specified in the LayerParameter.
colTop | top output Blob vector (length 1). |
rgbPropagateDown | see Layer::Backward |
colBottom | bottom input Blob vector (length 1). |
Implements MyCaffe.layers.Layer< T >.
Definition at line 421 of file ConvolutionLayer.cs.
|
protected |
Run the Backward computation using the Engine.CAFFE mode as specified in the LayerParameter.
colTop | top output Blob vector (length 1). |
rgbPropagateDown | see Layer::Backward |
colBottom | bottom input Blob vector (length 1). |
Definition at line 459 of file ConvolutionLayer.cs.
|
protected |
Run the Backward computation using the Engine CUDNN mode as specified in the LayerParameter.
colTop | top output Blob vector (length 1). |
rgbPropagateDown | see Layer::Backward |
colBottom | bottom input Blob vector (length 1). |
Definition at line 569 of file ConvolutionLayer.cs.
|
protectedvirtual |
Computes the output shape used by the BaseConvolutionLayer.
Implements MyCaffe.layers.BaseConvolutionLayer< T >.
Definition at line 374 of file ConvolutionLayer.cs.
|
protectedvirtual |
Releases all GPU and host resources used by the Layer.
Reimplemented from MyCaffe.layers.BaseConvolutionLayer< T >.
Definition at line 125 of file ConvolutionLayer.cs.
|
protectedvirtual |
Run the Forward computation using either the Engine.CAFFE or Engine.CUDNN mode as specified in the LayerParameter.
colBottom | Specifies the collection of bottom (input) Blobs. |
colTop | Specifies the collection of top (output) Blobs. |
Implements MyCaffe.layers.Layer< T >.
Definition at line 407 of file ConvolutionLayer.cs.
|
protected |
Run the Forward computation using the Engine.CAFFE mode as specified in the LayerParameter.
colBottom | Specifies the collection of bottom (input) Blobs. |
colTop | Specifies the collection of top (output) Blobs. |
Definition at line 434 of file ConvolutionLayer.cs.
|
protected |
Run the Forward computation using the Engine CUDNN mode as specified in the LayerParameter.
colBottom | Specifies the collection of bottom (input) Blobs. |
colTop | Specifies the collection of top (output) Blobs. |
Definition at line 503 of file ConvolutionLayer.cs.
|
virtual |
Setup the layer for use with both Engine.CAFFE and Engine.CUDNN modes.
colBottom | Specifies the collection of bottom (input) Blobs. |
colTop | Specifies the collection of top (output) Blobs. |
Reimplemented from MyCaffe.layers.BaseConvolutionLayer< T >.
Definition at line 170 of file ConvolutionLayer.cs.
|
virtual |
Reshape the bottom (input) and top (output) blobs.
colBottom | Specifies the collection of bottom (input) Blobs. |
colTop | Specifies the collection of top (output) Blobs. |
Reimplemented from MyCaffe.layers.BaseConvolutionLayer< T >.
Definition at line 274 of file ConvolutionLayer.cs.
|
protectedvirtual |
Tests the shapes of both the bottom and top blobs and if they are the same as the previous sizing, returns false indicating that no reshape is needed.
colBottom | Specifies the bottom blobs. |
colTop | Specifies the top blobs. |
bReset | Specifies to reset the test (set to false when using in second derivative classes, e.g. set to true in BaseConvolutionLayer, and false in ConvolutionLayer). |
Reimplemented from MyCaffe.layers.Layer< T >.
Definition at line 251 of file ConvolutionLayer.cs.
|
protectedvirtual |
Returns false, for we want convolution, not deconvolution.
Implements MyCaffe.layers.BaseConvolutionLayer< T >.
Definition at line 366 of file ConvolutionLayer.cs.