habana_frameworks.mediapipe.fn.Normalize
habana_frameworks.mediapipe.fn.Normalize¶
- Class:
habana_frameworks.mediapipe.fn.Normalize(**kwargs)
- Define graph call:
__call__(input)
- Parameter:
input - Input tensor to operator. Supported dimensions: minimum = 4, maximum = 4. Supported data types: UINT8, UINT16.
Description:
Normalizes the input tensor by subtracting mean and dividing by standard deviation. The mean and stddev are calculated internally. Normalization is done using the formula given below. Epsilon(1e-05) is added in order to avoid division by 0.
out = (scale * (in - mean)) / sqrt(variance + epsilon) + shift
- Supported backend:
HPU
Keyword Arguments
kwargs |
Description |
---|---|
scale |
Scaling factor to be applied to output.
|
shift |
The value to which mean will map to the output.
|
axis |
An optional bitmap for CHW data layout. Set res bit for the dim to be normalized.
|
batch |
If set to True, the mean and standard deviation are calculated across tensors in the batch. This argument is not yet supported by TPC kernel.
|
dtype |
Ouptput data type.
|
Note
When number of input tensor = 1, i.e., only ifm is provided and the axis is also set to default value, i.e. 0 then normalization is done along CHW.
If either of mean or inverse standard deviation tensor is given as input and along with that axis is also specified then the shape of mean/inverse standard deviation tensor should match the reduced input tensor shape based on axis. Currently attribute
axis
can take the following values - 1, 2, 3, 4, 5 and 7.
Example: Normalize Operator
The following code snippet shows usage of Normalize operator:
from habana_frameworks.mediapipe import fn
from habana_frameworks.mediapipe.mediapipe import MediaPipe
from habana_frameworks.mediapipe.media_types import imgtype as it
from habana_frameworks.mediapipe.media_types import dtype as dt
import matplotlib.pyplot as plt
# Create media pipeline derived class
class myMediaPipe(MediaPipe):
def __init__(self, device, dir, queue_depth, batch_size, img_h, img_w):
super(
myMediaPipe,
self).__init__(
device,
queue_depth,
batch_size,
self.__class__.__name__)
self.input = fn.ReadImageDatasetFromDir(shuffle=False,
dir=dir,
format="jpg")
# WHCN
self.decode = fn.ImageDecoder(device="hpu",
output_format=it.RGB_P,
resize=[img_w, img_h])
self.normalize = fn.Normalize(scale=60.0,
shift=120.0,
axis=1)
# WHCN -> CWHN
self.transpose = fn.Transpose(permutation=[2, 0, 1, 3],
tensorDim=4,
dtype=dt.UINT8)
def definegraph(self):
images, labels = self.input()
images = self.decode(images)
images = self.normalize(images)
images = self.transpose(images)
return images, labels
def display_images(images, batch_size, cols):
rows = (batch_size + 1) // cols
plt.figure(figsize=(10, 10))
for i in range(batch_size):
ax = plt.subplot(rows, cols, i + 1)
plt.imshow(images[i])
plt.axis("off")
plt.show()
def main():
batch_size = 6
img_width = 200
img_height = 200
img_dir = "/path/to/images"
queue_depth = 2
columns = 3
# Create media pipeline object
pipe = myMediaPipe('hpu', img_dir, queue_depth, batch_size,
img_height, img_width)
# Build media pipeline
pipe.build()
# Initialize media pipeline iterator
pipe.iter_init()
# Run media pipeline
images, labels = pipe.run()
# Copy data to host from device as numpy array
images = images.as_cpu().as_nparray()
labels = labels.as_cpu().as_nparray()
# Display images
display_images(images, batch_size, columns)
if __name__ == "__main__":
main()
Normalized Images 1
- 1
Licensed under a CC BY SA 4.0 license. The images used here are taken from https://data.caltech.edu/records/mzrjq-6wc02.