Merge branch 'master' into superresolution
diff --git a/examples/onnx/159008.jpg b/examples/onnx/159008.jpg
new file mode 100644
index 0000000..2b90845
--- /dev/null
+++ b/examples/onnx/159008.jpg
Binary files differ
diff --git a/examples/onnx/densenet121.py b/examples/onnx/densenet121.py
index 14cfa5f..c8a8f95 100644
--- a/examples/onnx/densenet121.py
+++ b/examples/onnx/densenet121.py
@@ -22,10 +22,9 @@
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, check_exist_or_download
+from utils import download_model, check_exist_or_download
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s')
@@ -44,7 +43,7 @@
return img
-def get_image_labe():
+def get_image_label():
# download label
label_url = 'https://s3.amazonaws.com/onnx-model-zoo/synset.txt'
with open(check_exist_or_download(label_url), 'r') as f:
@@ -56,56 +55,52 @@
return img, labels
-class Infer:
+class MyModel(sonnx.SONNXModel):
- 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
+ def __init__(self, onnx_model):
+ super(MyModel, self).__init__(onnx_model)
- def forward(self, x):
- return sg_ir.run([x])[0]
+ def forward(self, *x):
+ y = super(MyModel, self).forward(*x)
+ return y[0]
+
+ def train_one_batch(self, x, y):
+ pass
if __name__ == "__main__":
+
+ download_dir = '/tmp'
url = 'https://s3.amazonaws.com/download.onnx/models/opset_9/densenet121.tar.gz'
- download_dir = '/tmp/'
model_path = os.path.join(download_dir, 'densenet121', 'model.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)
+ # inference demo
+ logging.info("preprocessing...")
+ img, labels = get_image_label()
+ img = preprocess(img)
+ # sg_ir = sonnx.prepare(onnx_model) # run without graph
+ # y = sg_ir.run([img])
- # prepare the model
- logging.info("prepare model...")
+ logging.info("model compling...")
dev = device.create_cuda_gpu()
- sg_ir = sonnx.prepare(onnx_model, device=dev)
- autograd.training = False
- model = Infer(sg_ir)
+ x = tensor.Tensor(device=dev, data=img)
+ model = MyModel(onnx_model)
+ model.compile([x], is_train=False, use_graph=True, sequential=True)
# verifty the test
# from utils import load_dataset
- # inputs, ref_outputs = load_dataset(
- # os.path.join('/tmp', 'densenet121', 'test_data_set_0'))
+ # inputs, ref_outputs = load_dataset(os.path.join('/tmp', 'densenet121', 'test_data_set_0'))
# x_batch = tensor.Tensor(device=dev, data=inputs[0])
- # outputs = model.forward(x_batch)
+ # outputs = sg_ir.run([x_batch])
# for ref_o, o in zip(ref_outputs, outputs):
# np.testing.assert_almost_equal(ref_o, tensor.to_numpy(o), 4)
- # inference
- logging.info("preprocessing...")
- img, labels = get_image_labe()
- img = preprocess(img)
-
logging.info("model running...")
- x_batch = tensor.Tensor(device=dev, data=img)
- y = model.forward(x_batch)
+ y = model.forward(x)
logging.info("postprocessing...")
y = tensor.softmax(y)
@@ -113,4 +108,4 @@
scores = np.squeeze(scores)
a = np.argsort(scores)[::-1]
for i in a[0:5]:
- logging.info('class=%s ; probability=%f' % (labels[i], scores[i]))
+ logging.info('class=%s ; probability=%f' % (labels[i], scores[i]))
\ No newline at end of file
diff --git a/examples/onnx/shufflenetv1.py b/examples/onnx/shufflenetv1.py
index 35fa777..139d6d3 100644
--- a/examples/onnx/shufflenetv1.py
+++ b/examples/onnx/shufflenetv1.py
@@ -23,12 +23,9 @@
from singa import device
from singa import tensor
-from singa import autograd
from singa import sonnx
import onnx
-from utils import download_model
-from utils import update_batch_size
-from utils import check_exist_or_download
+from utils import download_model, check_exist_or_download
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')
@@ -56,51 +53,53 @@
return img, labels
-class Infer:
+class MyModel(sonnx.SONNXModel):
- def __init__(self, sg_ir):
- self.sg_ir = sg_ir
- for idx, tens in sg_ir.tensor_map.items():
- tens.require_grad = True
- tens.store_grad = True
- sg_ir.tensor_map[idx] = tens
+ def __init__(self, onnx_model):
+ super(MyModel, self).__init__(onnx_model)
- def forward(self, x):
- return sg_ir.run([x])[0]
+ def forward(self, *x):
+ y = super(MyModel, self).forward(*x)
+ return y[0]
+
+ def train_one_batch(self, x, y):
+ pass
if __name__ == '__main__':
+ download_dir = '/tmp'
url = 'https://github.com/onnx/models/raw/master/vision/classification/shufflenet/model/shufflenet-9.tar.gz'
- download_dir = "/tmp/"
model_path = os.path.join(download_dir, 'shufflenet', 'model.onnx')
- logging.info("onnx load model....")
+
+ logging.info("onnx load model...")
download_model(url)
onnx_model = onnx.load(model_path)
- # setting batch size
- onnx_model = update_batch_size(onnx_model, 1)
- # preparing the model
- logging.info("preparing model...")
- dev = device.create_cuda_gpu()
- sg_ir = sonnx.prepare(onnx_model, device=dev)
- autograd.training = False
- model = Infer(sg_ir)
-
- # verifying the test dataset
- #from utils import load_dataset
- #inputs,ref_outputs = load_dataset(os.path.join('/tmp','shufflenet','test_data_set_0'))
- #x_batch = tensor.Tensor(device = dev,data=inputs[0])
- #outputs = model.forward(x_batch)
- # for ref_o,o in zip(ref_outputs,outputs):
- # np.testing.assert_almost_equal(ref_o,tensor.to_numpy(o),4)
-
- # inference
+
+ # inference demo
logging.info("preprocessing...")
img, labels = get_image_label()
img = preprocess(img)
- x_batch = tensor.Tensor(device=dev, data=img)
- logging.info("model running....")
- y = model.forward(x_batch)
- logging.info("postprocessing....")
+ # 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.Tensor(device=dev, data=img)
+ model = MyModel(onnx_model)
+ model.compile([x], is_train=False, use_graph=True, sequential=True)
+
+ # verifty the test
+ # from utils import load_dataset
+ # inputs, ref_outputs = load_dataset(os.path.join('/tmp', 'shufflenet', 'test_data_set_0'))
+ # x_batch = tensor.Tensor(device=dev, data=inputs[0])
+ # outputs = sg_ir.run([x_batch])
+ # for ref_o, o in zip(ref_outputs, outputs):
+ # np.testing.assert_almost_equal(ref_o, tensor.to_numpy(o), 4)
+
+ logging.info("model running...")
+ y = model.forward(x)
+
+ logging.info("postprocessing...")
y = tensor.softmax(y)
scores = tensor.to_numpy(y)
scores = np.squeeze(scores)
diff --git a/examples/onnx/shufflenetv2.py b/examples/onnx/shufflenetv2.py
index 74dd794..60f84a4 100644
--- a/examples/onnx/shufflenetv2.py
+++ b/examples/onnx/shufflenetv2.py
@@ -43,7 +43,7 @@
return img
-def get_image_labe():
+def get_image_label():
# download label
label_url = 'https://s3.amazonaws.com/onnx-model-zoo/synset.txt'
with open(check_exist_or_download(label_url), 'r') as f:
@@ -81,7 +81,7 @@
# inference
logging.info("preprocessing...")
- img, labels = get_image_labe()
+ img, labels = get_image_label()
img = preprocess(img)
# sg_ir = sonnx.prepare(onnx_model) # run without graph
# y = sg_ir.run([img])
diff --git a/examples/onnx/squeezenet.py b/examples/onnx/squeezenet.py
index 8a6ecf5..861550c 100644
--- a/examples/onnx/squeezenet.py
+++ b/examples/onnx/squeezenet.py
@@ -22,10 +22,9 @@
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, check_exist_or_download
+from utils import download_model, check_exist_or_download
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s')
@@ -56,24 +55,22 @@
return img, labels
-class Infer:
+class MyModel(sonnx.SONNXModel):
- 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
+ def __init__(self, onnx_model):
+ super(MyModel, self).__init__(onnx_model)
- def forward(self, x):
- return sg_ir.run([x])[0]
+ def forward(self, *x):
+ y = super(MyModel, self).forward(*x)
+ return y[0]
+
+ def train_one_batch(self, x, y):
+ pass
-if __name__ == "__main__":
-
+if __name__ == '__main__':
+ download_dir = '/tmp'
url = 'https://github.com/onnx/models/raw/master/vision/classification/squeezenet/model/squeezenet1.1-7.tar.gz'
- download_dir = '/tmp/'
model_path = os.path.join(download_dir, 'squeezenet1.1',
'squeezenet1.1.onnx')
@@ -81,33 +78,29 @@
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.create_cuda_gpu()
- sg_ir = sonnx.prepare(onnx_model, device=dev)
- autograd.training = False
- model = Infer(sg_ir)
-
- # verify the test
- # from utils import load_dataset
- # inputs, ref_outputs = load_dataset(
- # os.path.join('/tmp', 'squeezenet1.1', 'test_data_set_0'))
- # x_batch = tensor.Tensor(device=dev, data=inputs[0])
- # outputs = model.forward(x_batch)
- # for ref_o, o in zip(ref_outputs, outputs):
- # np.testing.assert_almost_equal(ref_o, tensor.to_numpy(o), 4)
-
- # inference
+ # inference demo
logging.info("preprocessing...")
img, labels = get_image_label()
img = 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.Tensor(device=dev, data=img)
+ model = MyModel(onnx_model)
+ model.compile([x], is_train=False, use_graph=True, sequential=True)
+
+ # verifty the test
+ # from utils import load_dataset
+ # inputs, ref_outputs = load_dataset(os.path.join('/tmp', 'squeezenet1.1', 'test_data_set_0'))
+ # x_batch = tensor.Tensor(device=dev, data=inputs[0])
+ # outputs = sg_ir.run([x_batch])
+ # for ref_o, o in zip(ref_outputs, outputs):
+ # np.testing.assert_almost_equal(ref_o, tensor.to_numpy(o), 4)
logging.info("model running...")
- x_batch = tensor.Tensor(device=dev, data=img)
- y = model.forward(x_batch)
+ y = model.forward(x)
logging.info("postprocessing...")
y = tensor.softmax(y)
diff --git a/examples/onnx/superresolution.py b/examples/onnx/superresolution.py
index 0e752ba..caaae19 100644
--- a/examples/onnx/superresolution.py
+++ b/examples/onnx/superresolution.py
@@ -19,7 +19,6 @@
import os
import numpy as np
from PIL import Image
-# pip install python-resize-image
from resizeimage import resizeimage
from singa import device
diff --git a/examples/onnx/vgg19.py b/examples/onnx/vgg19.py
index 49606cb..a2c3ea7 100644
--- a/examples/onnx/vgg19.py
+++ b/examples/onnx/vgg19.py
@@ -22,10 +22,9 @@
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, check_exist_or_download
+from utils import download_model, check_exist_or_download
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(message)s')
@@ -44,7 +43,7 @@
return img
-def get_image_label():
+def get_image_labe():
# download label
label_url = 'https://s3.amazonaws.com/onnx-model-zoo/synset.txt'
with open(check_exist_or_download(label_url), 'r') as f:
@@ -56,22 +55,21 @@
return img, labels
-class Infer:
+class MyModel(sonnx.SONNXModel):
- 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
+ def __init__(self, onnx_model):
+ super(MyModel, self).__init__(onnx_model)
- def forward(self, x):
- return sg_ir.run([x])[0]
+ 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/classification/vgg/model/vgg19-7.tar.gz'
+ url = 'https://s3.amazonaws.com/onnx-model-zoo/vgg/vgg19/vgg19.tar.gz'
download_dir = '/tmp/'
model_path = os.path.join(download_dir, 'vgg19', 'vgg19.onnx')
@@ -79,33 +77,30 @@
download_model(url)
onnx_model = onnx.load(model_path)
- # set batch size
- onnx_model = update_batch_size(onnx_model, 1)
+ # inference
+ logging.info("preprocessing...")
+ img, labels = get_image_labe()
+ img = preprocess(img)
+ # sg_ir = sonnx.prepare(onnx_model) # run without graph
+ # y = sg_ir.run([img])
- # prepare the model
- logging.info("prepare model...")
- # dev = device.get_default_device()
+ logging.info("model compling...")
dev = device.create_cuda_gpu()
- sg_ir = sonnx.prepare(onnx_model, device=dev)
- autograd.training = False
- model = Infer(sg_ir)
+ x = tensor.PlaceHolder(img.shape, device=dev)
+ model = MyModel(onnx_model)
+ model.compile([x], is_train=False, use_graph=True, sequential=True)
- # verify the test
+ # verifty the test
# from utils import load_dataset
# inputs, ref_outputs = load_dataset(os.path.join('/tmp', 'vgg19', 'test_data_set_0'))
# x_batch = tensor.Tensor(device=dev, data=inputs[0])
- # outputs = model.forward(x_batch)
+ # outputs = sg_ir.run([x_batch])
# for ref_o, o in zip(ref_outputs, outputs):
# np.testing.assert_almost_equal(ref_o, tensor.to_numpy(o), 4)
- # inference
- logging.info("preprocessing...")
- img, labels = get_image_label()
- img = preprocess(img)
-
logging.info("model running...")
- x_batch = tensor.Tensor(device=dev, data=img)
- y = model.forward(x_batch)
+ x = tensor.Tensor(device=dev, data=img)
+ y = model.forward(x)
logging.info("postprocessing...")
y = tensor.softmax(y)
diff --git a/python/singa/utils.py b/python/singa/utils.py
index d102771..7dcf8fb 100644
--- a/python/singa/utils.py
+++ b/python/singa/utils.py
@@ -16,7 +16,6 @@
# =============================================================================
import sys
-import math
import numpy as np
import collections