Pytorch is a Machine Learning framework that allows you to train Neural Networks. To take advantage of this the Darwin SDK does allow for some integrations with Pytorch.
In this chapter we will learn:
- How to do custom transformations
- How to do a Resize
Custom transformations
To define a custom transformation you use the ClassificationDataset
class which takes a transformation class and the dataset path as paramters.
import numpy as np
from darwin.torch.dataset import ClassificationDataset
from pathlib import Path
import torch
dataset_path = Path('/home/user/.darwin/datasets/my-team-slug/my-dataset-slug')
# Class where you can define your custom transformations
class ToTensor():
def __call__(self, img, target=None):
return torch.from_numpy(np.array(img)), target
ds = ClassificationDataset(
transform=ToTensor(),
dataset_path=dataset_path
)
img, ann = ds[0]
print(type(img))
Resize
Following is an example how to resize an image. To this effect we use the InstanceSegmentationDataset
class, which takes as parameters a transformation class and the dataset path.
from torch.nn.functional import interpolate
import numpy as np
from darwin.torch.dataset import InstanceSegmentationDataset
from pathlib import Path
import torch
dataset_path = Path('/home/pedro/.darwin/datasets/andreas-team/cars')
class Resize():
def __init__(self, size):
self.size = size
def __call__(self, img, target=None):
# resize image
img = img.resize(self.size)
if target:
# resize target mask
target['masks'] = interpolate(
target['masks'].unsqueeze(0), size=self.size).squeeze(0)
if not target:
return img
return img, target
ds = InstanceSegmentationDataset(
transform=Resize(size=(224, 224)),
dataset_path=dataset_path
)
img, ann = ds[0]
print(img.size)
print(ann['masks'].shape)