2.6 KiB
2.6 KiB
Torchvision to OpenVINO preprocessing converter
The Torchvision to OpenVINO preprocessing converter enables the use of an existing torchvision.transforms object to automatically translate it to OpenVINO preprocessing. It is then being embedded into the model, resulting in better inference performance.
Supported transforms
Currently, the torchvision to OpenVINO preprocessing converter does not support all torchvision transforms.
Supported operations:
transforms.Composetransforms.Normalizetransforms.ConvertImageDtypetransforms.Grayscaletransforms.Padtransforms.ToTensortransforms.CenterCroptransforms.Resize
Example usage
preprocess_pipeline = torchvision.transforms.Compose(
[
torchvision.transforms.Resize(256, interpolation=transforms.InterpolationMode.NEAREST),
torchvision.transforms.CenterCrop((216, 218)),
torchvision.transforms.Pad((2, 3, 4, 5), fill=3),
torchvision.transforms.ToTensor(),
torchvision.transforms.ConvertImageDtype(torch.float32),
torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
]
)
torch_model = SimpleConvnet(input_channels=3)
torch.onnx.export(torch_model, torch.randn(1, 3, 224, 224), "test_convnet.onnx", verbose=False, input_names=["input"], output_names=["output"])
core = Core()
ov_model = core.read_model(model="test_convnet.onnx")
test_input = np.random.randint(255, size=(260, 260, 3), dtype=np.uint16)
ov_model = PreprocessConverter.from_torchvision(
model=ov_model, transform=preprocess_pipeline, input_example=Image.fromarray(test_input.astype("uint8"), "RGB")
)
ov_model = core.compile_model(ov_model, "CPU")
ov_input = np.expand_dims(test_input, axis=0)
output = ov_model.output(0)
ov_result = ov_model(ov_input)[output]
Key contacts
If you have any questions, feature requests or want us to review your PRs, send us a message or ping us on GitHub via openvino-ie-python-api-maintainers. You can always directly contact everyone from this group.