-
Notifications
You must be signed in to change notification settings - Fork 3
base64 image encoding
torchlambda supports base64 encoding out-of-the box. This approach is recommended in order to speed up data passing (if only feasible) and should be your go-to for image-related tasks (classification, style transfer etc.).
In this tutorial we assume you already have exported your PyTorch model to torchscript and have is saved as model.ptc.
If that's not the case please follow first step of ResNet18 deployment on AWS Lambda
and come back after that.
Following YAML settings will allow you to use base64 encoding. Save contents below as torchlambda.yaml (or any other, just remember to pass it appropriately to functions in the next steps):
---
input:
name: data
type: base64
validate: true
shape: [1, 3, width, height]
cast: float
divide: 255
normalize:
means: [0.485, 0.456, 0.406]
stddevs: [0.229, 0.224, 0.225]
return:
output:
type: double
name: output
item: falsePlease notice that all you have to do is specify input type as base64 and you are good to. If you aren't sure what
each field does, see YAML settings file reference or introductory tutorial mentioned previously.
Also notice you may want to modify those settings a little bit (e.g. shape and return) to fit your exact use case.
Python code below will create a base64 encoded random image of shape [1, 3, 1024, 1024] with all necessary fields specified and save it in the file called payload.json in your current working directory.
import base64
import json
import struct
import numpy as np
def create_payload():
width = 1024
height = 1024
data = np.random.randint(low=0, high=255, size=(1, 3, width, height)).flatten()
data = base64.b64encode(
struct.pack("<{}B".format(len(data)), *(data.tolist()))
).decode()
payload = {"width": width, "height": height, "data": data}
with open("payload.json", "w") as file:
json.dump(payload, file)
if __name__ == "__main__":
create_payload()You can either start deployment on AWS Lambda or test it locally. For the first case follow the tutorial ResNet18-deployment-on-AWS-Lambda from step 5. For the second option just follow Test-Lambda-deployment-locally.