You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by wk...@apache.org on 2019/06/09 05:12:30 UTC

[incubator-mxnet] branch master updated: Fix wrong description of output range of ToTensor (#14794)

This is an automated email from the ASF dual-hosted git repository.

wkcn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git


The following commit(s) were added to refs/heads/master by this push:
     new b64e00a  Fix wrong description of output range of ToTensor (#14794)
b64e00a is described below

commit b64e00a26dd6e00a3c057880ec41b0f46827fcfb
Author: Alexander Grund <Fl...@users.noreply.github.com>
AuthorDate: Sun Jun 9 07:12:05 2019 +0200

    Fix wrong description of output range of ToTensor (#14794)
    
    * Fix wrong description of output range of ToTensor
    
    The range is actually including 1 due to division by 255 (not 256)
    
    * Add ToTensor tests with boundary values
    
    * retrigger CI
---
 python/mxnet/gluon/data/vision/transforms.py    |  2 +-
 src/operator/image/image_random.cc              |  2 +-
 tests/python/gpu/test_gluon_transforms.py       | 11 ++++++++++-
 tests/python/unittest/test_gluon_data_vision.py |  9 +++++++++
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/python/mxnet/gluon/data/vision/transforms.py b/python/mxnet/gluon/data/vision/transforms.py
index dff7f66..955f2b2 100644
--- a/python/mxnet/gluon/data/vision/transforms.py
+++ b/python/mxnet/gluon/data/vision/transforms.py
@@ -100,7 +100,7 @@ class ToTensor(HybridBlock):
 
     Converts an image NDArray of shape (H x W x C) in the range
     [0, 255] to a float32 tensor NDArray of shape (C x H x W) in
-    the range [0, 1).
+    the range [0, 1].
 
     If batch input, converts a batch image NDArray of shape (N x H x W x C) in the
     range [0, 255] to a float32 tensor NDArray of shape (N x C x H x W).
diff --git a/src/operator/image/image_random.cc b/src/operator/image/image_random.cc
index 0b95b19..34f4cb4 100644
--- a/src/operator/image/image_random.cc
+++ b/src/operator/image/image_random.cc
@@ -41,7 +41,7 @@ DMLC_REGISTER_PARAMETER(RandomColorJitterParam);
 NNVM_REGISTER_OP(_image_to_tensor)
 .describe(R"code(Converts an image NDArray of shape (H x W x C) or (N x H x W x C) 
 with values in the range [0, 255] to a tensor NDArray of shape (C x H x W) or (N x C x H x W)
-with values in the range [0, 1)
+with values in the range [0, 1]
 
 Example:
     .. code-block:: python
diff --git a/tests/python/gpu/test_gluon_transforms.py b/tests/python/gpu/test_gluon_transforms.py
index 599a02c..e303008 100644
--- a/tests/python/gpu/test_gluon_transforms.py
+++ b/tests/python/gpu/test_gluon_transforms.py
@@ -24,7 +24,7 @@ from mxnet import gluon
 from mxnet.base import MXNetError
 from mxnet.gluon.data.vision import transforms
 from mxnet.test_utils import assert_almost_equal, set_default_context
-from mxnet.test_utils import almost_equal
+from mxnet.test_utils import almost_equal, same
 curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__)))
 sys.path.insert(0, os.path.join(curr_path, '../unittest'))
 from common import assertRaises, setup_module, with_seed, teardown
@@ -90,6 +90,15 @@ def test_to_tensor():
     transformer = transforms.ToTensor()
     assertRaises(MXNetError, transformer, invalid_data_in)
 
+    # Bounds (0->0, 255->1)
+    data_in = np.zeros((10, 20, 3)).astype(dtype=np.uint8)
+    out_nd = transforms.ToTensor()(nd.array(data_in, dtype='uint8'))
+    assert same(out_nd.asnumpy(), np.transpose(np.zeros(data_in.shape, dtype=np.float32), (2, 0, 1)))
+
+    data_in = np.full((10, 20, 3), 255).astype(dtype=np.uint8)
+    out_nd = transforms.ToTensor()(nd.array(data_in, dtype='uint8'))
+    assert same(out_nd.asnumpy(), np.transpose(np.ones(data_in.shape, dtype=np.float32), (2, 0, 1)))
+
 @with_seed()
 def test_resize():
     # Test with normal case 3D input float type
diff --git a/tests/python/unittest/test_gluon_data_vision.py b/tests/python/unittest/test_gluon_data_vision.py
index cc15bec..627567c 100644
--- a/tests/python/unittest/test_gluon_data_vision.py
+++ b/tests/python/unittest/test_gluon_data_vision.py
@@ -47,6 +47,15 @@ def test_to_tensor():
     invalid_data_in = nd.random.uniform(0, 255, (5, 5, 300, 300, 3)).astype(dtype=np.uint8)
     transformer = transforms.ToTensor()
     assertRaises(MXNetError, transformer, invalid_data_in)
+    
+    # Bounds (0->0, 255->1)
+    data_in = np.zeros((10, 20, 3)).astype(dtype=np.uint8)
+    out_nd = transforms.ToTensor()(nd.array(data_in, dtype='uint8'))
+    assert same(out_nd.asnumpy(), np.transpose(np.zeros(data_in.shape, dtype=np.float32), (2, 0, 1)))
+
+    data_in = np.full((10, 20, 3), 255).astype(dtype=np.uint8)
+    out_nd = transforms.ToTensor()(nd.array(data_in, dtype='uint8'))
+    assert same(out_nd.asnumpy(), np.transpose(np.ones(data_in.shape, dtype=np.float32), (2, 0, 1)))
 
 
 @with_seed()