Before transforming tvm.IRModule into runtime.Module, I use tvm.relay.optimize() to optimize IRModule. However, an exception was thrown. The involving model vgg16-cifar10.h5 can be installed through google drive: https://drive.google.com/file/d/1CQOtLADOOjNwm34OfHc7IiPKBikS3NT7/view?usp=sharing Below are my code and the exception.
import keras
import os
import tvm
from tvm import te
import tvm.relay as relay
import tvm.relay.transform as transform
import numpy as np
from PIL import Image
import tvm.runtime as runtime
from tvm.contrib import graph_runtime
input_tensor = 'input_4'
def image_resize(x, shape):
x_return = []
for x_test in x:
tmp = np.copy(x_test)
img = Image.fromarray(tmp.astype('uint8')).convert('RGB')
img = img.resize(shape, Image.ANTIALIAS)
x_return.append(np.array(img))
return np.array(x_return)
input_precessor = keras.applications.vgg16.preprocess_input
input_shape = (224,224) #excption (299,299)
dataset_dir = "/tensorflow/data/tvm/dataset"
data_path = os.path.join(dataset_dir,"imagenet-val-1500.npz")
data = np.load(data_path)
x, y = data['x_test'], data['y_test']
x_resize = image_resize(np.copy(x),input_shape)
x_test = input_precessor(x_resize)
y_test = keras.utils.to_categorical(y, num_classes=1000)
model_path = 'your_path/vgg16-cifar10.h5'
predict_model = keras.models.load_model(model_path)
shape_dict = {input_tensor: (1,3,224,224)}
irmod, params = relay.frontend.from_keras(predict_model, shape_dict)
target = 'llvm'
ctx = tvm.cpu(0)
irmod, params = relay.optimize(irmod,target=target,params=params)
with transform.PassContext(opt_level=3):
graph, lib, params = relay.build_module.build(irmod, target, params=params)
I cannot figure out what happened and wonder if it’s a bug of TVM. Thank you in advance!!