Merge branch 'master' into superresolution
diff --git a/examples/onnx/superresolution.py b/examples/onnx/superresolution.py
index 1a6b35b..caaae19 100644
--- a/examples/onnx/superresolution.py
+++ b/examples/onnx/superresolution.py
@@ -23,17 +23,16 @@
from singa import device
from singa import tensor
-from singa import autograd
from singa import sonnx
import onnx
-from utils import download_model, update_batch_size
+from utils import download_model, check_exist_or_download
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s')
def preprocess(img):
- img = resizeimage.resize_cover(img, [224,224], validate=False)
+ img = resizeimage.resize_cover(img, [224, 224], validate=False)
img_ycbcr = img.convert('YCbCr')
img_y_0, img_cb, img_cr = img_ycbcr.split()
img_ndarray = np.asarray(img_y_0)
@@ -41,64 +40,65 @@
img_5 = img_4.astype(np.float32) / 255.0
return img_5, img_cb, img_cr
+
def get_image():
# download image
- image_url = './159008.jpg'
- img = Image.open(image_url)
+ image_url = 'https://s3.amazonaws.com/model-server/inputs/kitten.jpg'
+ img = Image.open(check_exist_or_download(image_url))
return img
-class Infer:
- def __init__(self, sg_ir):
- self.sg_ir = sg_ir
- for idx, tens in sg_ir.tensor_map.items():
- # allow the tensors to be updated
- tens.requires_grad = True
- tens.stores_grad = True
- sg_ir.tensor_map[idx] = tens
+class MyModel(sonnx.SONNXModel):
- def forward(self, x):
- return sg_ir.run([x])[0]
+ def __init__(self, onnx_model):
+ super(MyModel, self).__init__(onnx_model)
+
+ def forward(self, *x):
+ y = super(MyModel, self).forward(*x)
+ return y[0]
+
+ def train_one_batch(self, x, y):
+ pass
if __name__ == "__main__":
url = 'https://github.com/onnx/models/raw/master/vision/super_resolution/sub_pixel_cnn_2016/model/super-resolution-10.tar.gz'
download_dir = '/tmp/'
- model_path = os.path.join(download_dir, 'super_resolution', 'super_resolution.onnx')
+ model_path = os.path.join(download_dir, 'super_resolution',
+ 'super_resolution.onnx')
logging.info("onnx load model...")
download_model(url)
onnx_model = onnx.load(model_path)
- # set batch size
- onnx_model = update_batch_size(onnx_model, 1)
-
- # prepare the model
- logging.info("prepare model...")
- dev = device.get_default_device()
- sg_ir = sonnx.prepare(onnx_model, device=dev)
- autograd.training = False
- model = Infer(sg_ir)
-
# preprocess
logging.info("preprocessing...")
img = get_image()
img_y, img_cb, img_cr = preprocess(img)
-
+ # sg_ir = sonnx.prepare(onnx_model) # run without graph
+ # y = sg_ir.run([img])
+
+ logging.info("model compling...")
+ dev = device.create_cuda_gpu()
+ x = tensor.PlaceHolder(img_y.shape, device=dev)
+ model = MyModel(onnx_model)
+ model.compile([x], is_train=False, use_graph=True, sequential=True)
+
# inference
logging.info("model running...")
x_batch = tensor.Tensor(device=dev, data=img_y)
img_y = model.forward(x_batch)
array_img_y = tensor.to_numpy(img_y)
- img_out_y = Image.fromarray(np.uint8((array_img_y[0] * 255.0).clip(0, 255)[0]), mode='L')
-
+ img_out_y = Image.fromarray(np.uint8((array_img_y[0] * 255.0).clip(0,
+ 255)[0]),
+ mode='L')
+
# postprocess
logging.info("postprocessing...")
- final_img = Image.merge(
- "YCbCr", [
- img_out_y,
- img_cb.resize(img_out_y.size, Image.BICUBIC),
- img_cr.resize(img_out_y.size, Image.BICUBIC),
- ]).convert("RGB")
+ final_img = Image.merge("YCbCr", [
+ img_out_y,
+ img_cb.resize(img_out_y.size, Image.BICUBIC),
+ img_cr.resize(img_out_y.size, Image.BICUBIC),
+ ]).convert("RGB")
final_img.show()