MPSCNNLocalContrastNormalizationGradient(3) MetalPerformanceShaders.framework MPSCNNLocalContrastNormalizationGradient(3)
NAME
MPSCNNLocalContrastNormalizationGradient
SYNOPSIS
#import <MPSCNNNormalization.h>
Inherits MPSCNNGradientKernel.
Instance Methods
(nonnull instancetype) - initWithDevice:kernelWidth:kernelHeight:
(nullable instancetype) - initWithCoder:device:
Properties
float alpha
float beta
float delta
float p0
float pm
float ps
NSUInteger kernelWidth
NSUInteger kernelHeight
Additional Inherited Members
Detailed Description
This depends on Metal.framework Specifies the local contrast normalization gradient filter. The local contrast normalization is quite
similar to spatial normalization (see MPSCNNSpatialNormalization) in that it applies the filter over local regions which extend spatially,
but are in separate feature channels (i.e., they have shape 1 x kernelWidth x kernelHeight), but instead of dividing by the local 'energy'
of the feature, the denominator uses the local variance of the feature - effectively the mean value of the feature is subtracted from the
signal. For each feature channel, the function computes the variance VAR(i,j) and mean M(i,j) of X(i,j) inside each rectangle around the
spatial point (i,j).
Then the result is computed for each element of X as follows:
Y(i,j) = pm + ps * ( X(i,j) - p0 * M(i,j)) / (delta + alpha * VAR(i,j))^beta,
where kw and kh are the kernelWidth and the kernelHeight and pm, ps and p0 are parameters that can be used to offset and scale the result
in various ways. For example setting pm=0, ps=1, p0=1, delta=0, alpha=1.0 and beta=0.5 scales input data so that the result has unit
variance and zero mean, provided that input variance is positive. It is the end-users responsibility to ensure that the combination of the
parameters delta and alpha does not result in a situation where the denominator becomes zero - in such situations the resulting pixel-value
is undefined. A good way to guard against tiny variances is to regulate the expression with a small value for delta, for example delta =
1/1024 = 0.0009765625.
T(i,j) = (delta + alpha * VAR(i,j)) N = kw * kh
OutputGradient: dZ/dX(i,j) = ps * T(i,j)^(-beta) * ( dZ/dY(i,j) - (sum_{l,k in L(i),K(j)} dZ/dY(l,k) * (((p0/N) +
(2*alpha*beta/N)*(X(k,l)-1)*(X(i,j)-M(i,j)*p0)/T(i,j)))) ) N is the kernel size. The window L(i) and K(j) itself is defined as: L(i) = [i-
floor((kw-1)/2), i+floor(kw/2] K(j) = [j-floor((kh-1)/2), j+floor(kh/2]
For correct gradient computation all parameters must be the same as the original normalization filter.
Method Documentation
- (nullable instancetype) initWithCoder: (NSCoder *__nonnull) aDecoder(nonnull id< MTLDevice >) device
NSSecureCoding compatability While the standard NSSecureCoding/NSCoding method -initWithCoder: should work, since the file can't know
which device your data is allocated on, we have to guess and may guess incorrectly. To avoid that problem, use initWithCoder:device
instead.
Parameters:
aDecoder The NSCoder subclass with your serialized MPSKernel
device The MTLDevice on which to make the MPSKernel
Returns:
A new MPSKernel object, or nil if failure.
Reimplemented from MPSCNNGradientKernel.
- (nonnull instancetype) initWithDevice: (nonnull id< MTLDevice >) device(NSUInteger) kernelWidth(NSUInteger) kernelHeight
Initialize a local contrast normalization filter
Parameters:
device The device the filter will run on
kernelWidth The width of the kernel
kernelHeight The height of the kernel
Returns:
A valid MPSCNNLocalContrastNormalization object or nil, if failure.
NOTE: For now, kernelWidth must be equal to kernelHeight
Property Documentation
- alpha [read], [write], [nonatomic], [assign]
The value of alpha. Default is 0.0 The default value 0.0 is not recommended and is preserved for backwards compatibility. With alpha 0, it
performs a local mean subtraction. The MPSCNNLocalContrastNormalizationNode used with the MPSNNGraph uses 1.0 as a default.
- beta [read], [write], [nonatomic], [assign]
The value of beta. Default is 0.5
- delta [read], [write], [nonatomic], [assign]
The value of delta. Default is 1/1024
- kernelHeight [read], [nonatomic], [assign]
The height of the filter window
- kernelWidth [read], [nonatomic], [assign]
The width of the filter window
- p0 [read], [write], [nonatomic], [assign]
The value of p0. Default is 1.0
- pm [read], [write], [nonatomic], [assign]
The value of pm. Default is 0.0
- ps [read], [write], [nonatomic], [assign]
The value of ps. Default is 1.0
Author
Generated automatically by Doxygen for MetalPerformanceShaders.framework from the source code.
Version MetalPerformanceShaders-100 Thu Feb 8 2018 MPSCNNLocalContrastNormalizationGradient(3)