CropFlipNormalizeReformat
- group NVCV_C_ALGORITHM_CROP_FLIP_NORMALIZE_REFORMAT
Functions
-
NVCVStatus cvcudaCropFlipNormalizeReformatCreate(NVCVOperatorHandle *handle)
Constructs and an instance of the SliceFlipNormalize operator.
- Parameters:
handle – [out] Where the image instance handle will be written to.
Must not be NULL.
- Return values:
NVCV_ERROR_INVALID_ARGUMENT – Handle is null.
NVCV_ERROR_OUT_OF_MEMORY – Not enough memory to create the operator.
NVCV_SUCCESS – Operation executed successfully.
-
NVCVStatus cvcudaCropFlipNormalizeReformatSubmit(NVCVOperatorHandle handle, cudaStream_t stream, NVCVImageBatchHandle in, NVCVTensorHandle out, NVCVTensorHandle cropRect, NVCVBorderType borderMode, float borderValue, NVCVTensorHandle flipCode, NVCVTensorHandle base, NVCVTensorHandle scale, float global_scale, float shift, float epsilon, uint32_t flags)
Executes the CropFlipNormalizeReformat operation on the given cuda stream. This operation does not wait for completion.
This operation performs the following steps:
Pad and Crop the input image to the specified rectangle.
Flip the cropped image horizontally and/or vertically.
Normalize the flipped image using the provided base and scale.
Convert the normalized image to the specified output data type.
Reformat the normalized image to the specified output layout.
Data normalization is done using externally provided base (typically: mean or min) and scale (typically reciprocal of standard deviation or 1/(max-min)). The normalization follows the formula:
Whereout[data_idx] = (in[data_idx] - base[param_idx]) * scale[param_idx] * global_scale + shift
data_idx
is a position in the data tensor (in, out) andparam_idx
is a position in the base and scale tensors (see below for details). The two additional constants,global_scale
andshift
can be used to adjust the result to the dynamic range and resolution of the output type.The
scale
parameter may also be interpreted as standard deviation - in that case, its reciprocal is used and optionally, a regularizing term is added to the variance.m = 1 / sqrt(square(stddev[param_idx]) + epsilon) out[data_idx] = (in[data_idx] - mean[param_idx]) * m * global_scale + shift
param_idx
is calculated as follows (where axis = N,H,W,C):param_idx[axis] = param_shape[axis] == 1 ? 0 : data_idx[axis]
For the Crop operation, the input image is cropped to the specified rectangle. The rectangle is [crop_x, crop_y, crop_x + crop_width, crop_y + crop_height]. Where the crop_x and crop_y can be negative, in which case the image is padded. The padding method is specified by the borderMode parameter.
Limitations:
Input: Data Layout: [kNHWC, kHWC, kNCHW, KCHW] Channels: [1, 3, 4]
Data Type
Allowed
8bit Unsigned
Yes
8bit Signed
Yes
16bit Unsigned
Yes
16bit Signed
Yes
32bit Unsigned
Yes
32bit Signed
Yes
32bit Float
Yes
64bit Float
No
Output: Data Layout: [kNHWC, kNCHW] Channels: [1, 3, 4]
Data Type
Allowed
8bit Unsigned
Yes
8bit Signed
Yes
16bit Unsigned
Yes
16bit Signed
Yes
32bit Unsigned
Yes
32bit Signed
Yes
32bit Float
Yes
64bit Float
No
Input/Output dependency
Property | Input == Output -------------- | ------------- Data Layout | Yes/No Data Type | Yes/No Number | Yes Channels | Yes Width | Yes/No Height | Yes/No
- Parameters:
handle – [in] Handle to the operator.
Must not be NULL.
stream – [in] Handle to a valid CUDA stream.
in – [in] Input image batch.
out – [out] Output tensor.
cropRect – [in] crop rectangle tensor which has shape of [batch_size, 1, 1, 4] in reference to the input tensor. The crop value of [crop_x, crop_y, crop_width, crop_height] stored in the final dimension of the crop tensor
borderMode – [in] Border mode to be used when accessing elements outside input image, cf.
NVCVBorderType
.borderValue – [in] Border value to be used for constant border mode
NVCV_BORDER_CONSTANT
.flipCode – [in] a tensor flag to specify how to flip the array; 0 means flipping around the x-axis, 1 means flipping around the y-axis, -1 means flipping around both axes, and any other value will result in no flip.
base – [in] Tensor providing base values for normalization.
scale – [in] Tensor providing scale values for normalization.
global_scale – [in] Additional scale value to be used in addition to scale.
shift – [in] Additional bias value to be used in addition to base.
epsilon – [in] Epsilon to use when
CVCUDA_NORMALIZE_SCALE_IS_STDDEV
flag is set as a regularizing term to be added to variance.flags – [in] Algorithm flags, use
CVCUDA_NORMALIZE_SCALE_IS_STDDEV
if scale passed as argument is standard deviation instead or 0 if it is scaling.
- Return values:
NVCV_ERROR_INVALID_ARGUMENT – Some parameter is outside valid range.
NVCV_ERROR_INTERNAL – Internal error in the operator, invalid types passed in.
NVCV_SUCCESS – Operation executed successfully.
-
NVCVStatus cvcudaCropFlipNormalizeReformatCreate(NVCVOperatorHandle *handle)