Skip to content

Commit 1e90f7e

Browse files
authored
fix both document and a bug for RandomCrop (#1389)
* fix both document and a bug for RandomCrop `RandomCrop` pad first and then crop, not what is said in the document or even CIFAR tutorials. further, an error occurs with the default `pad=None` ``` >>> for i in train_data:break ... multiprocessing.pool.RemoteTraceback: """ Traceback (most recent call last): File "/usr/lib/python3.8/multiprocessing/pool.py", line 125, in worker result = (True, func(*args, **kwds)) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/data/dataloader.py", line 450, in _worker_fn batch = batchify_fn([_worker_dataset[i] for i in samples]) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/data/dataloader.py", line 450, in <listcomp> batch = batchify_fn([_worker_dataset[i] for i in samples]) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/data/dataset.py", line 219, in __getitem__ return self._fn(*item) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/data/dataset.py", line 230, in __call__ return (self._fn(x),) + args File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/block.py", line 693, in __call__ out = self.forward(*args) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/nn/basic_layers.py", line 55, in forward x = block(x) File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/block.py", line 693, in __call__ out = self.forward(*args) File "/home/neutron/.local/lib/python3.8/site-packages/gluoncv/data/transforms/block.py", line 75, in forward return image.random_crop(nd.array(x_pad), *self._args)[0] UnboundLocalError: local variable 'x_pad' referenced before assignment """ The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/neutron/.local/lib/python3.8/site-packages/mxnet/gluon/data/dataloader.py", line 505, in __next__ batch = pickle.loads(ret.get(self._timeout)) File "/usr/lib/python3.8/multiprocessing/pool.py", line 771, in get raise self._value UnboundLocalError: local variable 'x_pad' referenced before assignment ``` This PR is intend to fix both the document and the BUG which caused `pad` cannot be optional. * make pylint happy. make pylint happy. * happy-2 happy-2 * remove monkey patch I just think monkey patch may goes faster than the useless switch in the forward step * make checkers happy
1 parent 481019b commit 1e90f7e

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

gluoncv/data/transforms/block.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class RandomCrop(Block):
5353
Inputs:
5454
- **data**: input tensor with (Hi x Wi x C) shape.
5555
Outputs:
56-
- **out**: output tensor with ((H+2*pad) x (W+2*pad) x C) shape.
56+
- **out**: output tensor with (size[0] x size[1] x C) or (size x size x C) shape.
5757
"""
5858

5959
def __init__(self, size, pad=None, interpolation=2):
@@ -62,18 +62,13 @@ def __init__(self, size, pad=None, interpolation=2):
6262
if isinstance(size, numeric_types):
6363
size = (size, size)
6464
self._args = (size, interpolation)
65-
if isinstance(pad, int):
66-
self.pad = ((pad, pad), (pad, pad), (0, 0))
67-
else:
68-
self.pad = pad
69-
65+
self.pad = ((pad, pad), (pad, pad), (0, 0)) if isinstance(pad, int) else pad
7066
def forward(self, x):
7167
if self.pad:
72-
x_pad = np.pad(x.asnumpy(), self.pad,
73-
mode='constant', constant_values=0)
74-
75-
return image.random_crop(nd.array(x_pad), *self._args)[0]
76-
68+
return image.random_crop(nd.array(
69+
np.pad(x.asnumpy(), self.pad, mode='constant', constant_values=0)), *self._args)[0]
70+
else:
71+
return image.random_crop(x, *self._args)[0]
7772

7873
class RandomErasing(Block):
7974
"""Randomly erasing the area in `src` between `s_min` and `s_max` with `probability`.

0 commit comments

Comments
 (0)