Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make vision datasets return PIL.Image as default #28264

Merged
merged 10 commits into from
Oct 30, 2020
23 changes: 19 additions & 4 deletions python/paddle/hapi/callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,12 +296,17 @@ class ProgBarLogger(Callback):
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

inputs = [InputSpec([-1, 1, 28, 28], 'float32', 'image')]
labels = [InputSpec([None, 1], 'int64', 'label')]

train_dataset = paddle.vision.datasets.MNIST(mode='train')
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)

lenet = paddle.vision.LeNet()
model = paddle.Model(lenet,
Expand Down Expand Up @@ -432,12 +437,17 @@ class ModelCheckpoint(Callback):
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

inputs = [InputSpec([-1, 1, 28, 28], 'float32', 'image')]
labels = [InputSpec([None, 1], 'int64', 'label')]

train_dataset = paddle.vision.datasets.MNIST(mode='train')
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)

lenet = paddle.vision.LeNet()
model = paddle.Model(lenet,
Expand Down Expand Up @@ -484,13 +494,18 @@ class VisualDL(Callback):
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

inputs = [InputSpec([-1, 1, 28, 28], 'float32', 'image')]
labels = [InputSpec([None, 1], 'int64', 'label')]

train_dataset = paddle.vision.datasets.MNIST(mode='train')
eval_dataset = paddle.vision.datasets.MNIST(mode='test')
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
eval_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

net = paddle.vision.LeNet()
model = paddle.Model(net, inputs, labels)
Expand Down
45 changes: 36 additions & 9 deletions python/paddle/hapi/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -836,6 +836,7 @@ class Model(object):

import paddle
import paddle.nn as nn
import paddle.vision.transforms as T
from paddle.static import InputSpec

device = paddle.set_device('cpu') # or 'gpu'
Expand All @@ -857,7 +858,11 @@ class Model(object):
paddle.nn.CrossEntropyLoss(),
paddle.metric.Accuracy())

data = paddle.vision.datasets.MNIST(mode='train')
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
data = paddle.vision.datasets.MNIST(mode='train', transform=transform)
model.fit(data, epochs=2, batch_size=32, verbose=1)
"""

Expand Down Expand Up @@ -1066,6 +1071,7 @@ def save(self, path, training=True):

import paddle
import paddle.nn as nn
import paddle.vision.transforms as T
from paddle.static import InputSpec

class Mnist(nn.Layer):
Expand All @@ -1092,7 +1098,13 @@ def forward(self, x):
optim = paddle.optimizer.SGD(learning_rate=1e-3,
parameters=model.parameters())
model.prepare(optim, paddle.nn.CrossEntropyLoss())
data = paddle.vision.datasets.MNIST(mode='train')

transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
data = paddle.vision.datasets.MNIST(mode='train', transform=transform)

model.fit(data, epochs=1, batch_size=32, verbose=0)
model.save('checkpoint/test') # save for training
model.save('inference_model', False) # save for inference
Expand Down Expand Up @@ -1352,14 +1364,19 @@ def fit(
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

dynamic = True
device = paddle.set_device('cpu') # or 'gpu'
paddle.disable_static(device) if dynamic else None

train_dataset = paddle.vision.datasets.MNIST(mode='train')
val_dataset = paddle.vision.datasets.MNIST(mode='test')

transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

input = InputSpec([None, 1, 28, 28], 'float32', 'image')
label = InputSpec([None, 1], 'int64', 'label')
Expand All @@ -1385,16 +1402,21 @@ def fit(
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

dynamic = True
device = paddle.set_device('cpu') # or 'gpu'
paddle.disable_static(device) if dynamic else None

train_dataset = paddle.vision.datasets.MNIST(mode='train')

transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
train_loader = paddle.io.DataLoader(train_dataset,
places=device, batch_size=64)
val_dataset = paddle.vision.datasets.MNIST(mode='test')
val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
val_loader = paddle.io.DataLoader(val_dataset,
places=device, batch_size=64)

Expand Down Expand Up @@ -1521,10 +1543,15 @@ def evaluate(
.. code-block:: python

import paddle
import paddle.vision.transforms as T
from paddle.static import InputSpec

# declarative mode
val_dataset = paddle.vision.datasets.MNIST(mode='test')
transform = T.Compose([
T.Transpose(),
T.Normalize([127.5], [127.5])
])
val_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

input = InputSpec([-1, 1, 28, 28], 'float32', 'image')
label = InputSpec([None, 1], 'int64', 'label')
Expand Down
8 changes: 6 additions & 2 deletions python/paddle/tests/test_callbacks.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from paddle.static import InputSpec
from paddle.vision.models import LeNet
from paddle.hapi.callbacks import config_callbacks
import paddle.vision.transforms as T


class TestCallbacks(unittest.TestCase):
Expand Down Expand Up @@ -112,8 +113,11 @@ def test_visualdl_callback(self):
inputs = [InputSpec([-1, 1, 28, 28], 'float32', 'image')]
labels = [InputSpec([None, 1], 'int64', 'label')]

train_dataset = paddle.vision.datasets.MNIST(mode='train')
eval_dataset = paddle.vision.datasets.MNIST(mode='test')
transform = T.Compose([T.Transpose(), T.Normalize([127.5], [127.5])])
train_dataset = paddle.vision.datasets.MNIST(
mode='train', transform=transform)
eval_dataset = paddle.vision.datasets.MNIST(
mode='test', transform=transform)

net = paddle.vision.LeNet()
model = paddle.Model(net, inputs, labels)
Expand Down
54 changes: 46 additions & 8 deletions python/paddle/tests/test_dataset_cifar.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 50000)
data, label = cifar[idx]
data = np.array(data)
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[0] == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[2] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 9)


Expand All @@ -43,12 +44,30 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 10000)
data, label = cifar[idx]
data = np.array(data)
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[0] == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[2] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 9)

# test cv2 backend
cifar = Cifar10(mode='test', backend='cv2')
self.assertTrue(len(cifar) == 10000)

# traversal whole dataset may cost a
# long time, randomly check 1 sample
idx = np.random.randint(0, 10000)
data, label = cifar[idx]
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 99)

with self.assertRaises(ValueError):
cifar = Cifar10(mode='test', backend=1)


class TestCifar100Train(unittest.TestCase):
def test_main(self):
Expand All @@ -59,10 +78,11 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 50000)
data, label = cifar[idx]
data = np.array(data)
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[0] == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[2] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 99)


Expand All @@ -75,12 +95,30 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 10000)
data, label = cifar[idx]
data = np.array(data)
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[0] == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[2] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 99)

# test cv2 backend
cifar = Cifar100(mode='test', backend='cv2')
self.assertTrue(len(cifar) == 10000)

# traversal whole dataset may cost a
# long time, randomly check 1 sample
idx = np.random.randint(0, 10000)
data, label = cifar[idx]
self.assertTrue(len(data.shape) == 3)
self.assertTrue(data.shape[2] == 3)
self.assertTrue(data.shape[1] == 32)
self.assertTrue(data.shape[0] == 32)
self.assertTrue(0 <= int(label) <= 99)

with self.assertRaises(ValueError):
cifar = Cifar100(mode='test', backend=1)


if __name__ == '__main__':
unittest.main()
24 changes: 24 additions & 0 deletions python/paddle/tests/test_dataset_voc.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 3)
image, label = voc2012[idx]
image = np.array(image)
label = np.array(label)

self.assertTrue(len(image.shape) == 3)
self.assertTrue(len(label.shape) == 2)

Expand All @@ -45,6 +48,9 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 1)
image, label = voc2012[idx]
image = np.array(image)
label = np.array(label)

self.assertTrue(len(image.shape) == 3)
self.assertTrue(len(label.shape) == 2)

Expand All @@ -58,9 +64,27 @@ def test_main(self):
# long time, randomly check 1 sample
idx = np.random.randint(0, 1)
image, label = voc2012[idx]
image = np.array(image)
label = np.array(label)

self.assertTrue(len(image.shape) == 3)
self.assertTrue(len(label.shape) == 2)

# test cv2 backend
voc2012 = VOC2012(mode='test', backend='cv2')
self.assertTrue(len(voc2012) == 2)

# traversal whole dataset may cost a
# long time, randomly check 1 sample
idx = np.random.randint(0, 1)
image, label = voc2012[idx]

self.assertTrue(len(image.shape) == 3)
self.assertTrue(len(label.shape) == 2)

with self.assertRaises(ValueError):
voc2012 = VOC2012(mode='test', backend=1)


if __name__ == '__main__':
unittest.main()
Loading