Code Documentation

densetorch.nn

The nn module implements a range of well-established encoders and decoders.

class densetorch.nn.decoders.DLv3plus(input_sizes, num_classes, skip_size=48, agg_size=256, rates=(6, 12, 18), **kwargs)

DeepLab-v3+ for Semantic Image Segmentation.

ASPP with decoder. Allows to have multiple skip-connections. More information about the model: https://arxiv.org/abs/1802.02611

Parameters:
  • input_sizes (int, or list) – number of channels for each input. Last value represents the input to ASPP, other values are for skip-connections.
  • num_classes (int) – number of output channels.
  • skip_size (int) – common filter size for skip-connections.
  • agg_size (int) – common filter size.
  • rates (list of ints) – dilation rates in the ASPP module.
forward(xs)

Defines the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.

class densetorch.nn.decoders.LWRefineNet(input_sizes, collapse_ind, num_classes, agg_size=256, n_crp=4)

Light-Weight RefineNet for Semantic Image Segmentation.

More information about the model: https://arxiv.org/abs/1810.03272

Parameters:
  • input_sizes (int, or list) – number of channels for each input.
  • collapse_ind (list) – which input layers should be united together (via element-wise summation) before CRP.
  • num_classes (int) – number of output channels.
  • agg_size (int) – common filter size.
  • n_crp (int) – number of CRP layers in a single CRP block.
forward(xs)

Defines the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.

class densetorch.nn.decoders.MTLWRefineNet(input_sizes, collapse_ind, num_classes, agg_size=256, n_crp=4)

Multi-Task Light-Weight RefineNet for Dense per-pixel tasks.

More information about the model: https://arxiv.org/abs/1809.04766

Parameters:
  • input_sizes (int, or list) – number of channels for each input.
  • collapse_ind (list) – which input layers should be united together (via element-wise summation) before CRP.
  • num_classes (int or list) – number of output channels per each head.
  • agg_size (int) – common filter size.
  • n_crp (int) – number of CRP layers in a single CRP block.
forward(xs)

Defines the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.

densetorch.nn.mobilenetv2.mobilenetv2(pretrained=True, **kwargs)

Constructs the mobilenet-v2 network.

Parameters:pretrained (bool) – whether to load pre-trained weights.
Returns:nn.Module instance.
densetorch.nn.resnet.resnet18(pretrained=False, **kwargs)

Constructs the ResNet-18 model.

Parameters:pretrained (bool) – If True, returns a model pre-trained on ImageNet.
Returns:nn.Module instance.
densetorch.nn.resnet.resnet34(pretrained=False, **kwargs)

Constructs the ResNet-34 model.

Parameters:pretrained (bool) – If True, returns a model pre-trained on ImageNet.
Returns:nn.Module instance.
densetorch.nn.resnet.resnet50(pretrained=False, **kwargs)

Constructs the ResNet-50 model.

Parameters:pretrained (bool) – If True, returns a model pre-trained on ImageNet.
Returns:nn.Module instance.
densetorch.nn.resnet.resnet101(pretrained=False, **kwargs)

Constructs the ResNet-101 model.

Parameters:pretrained (bool) – If True, returns a model pre-trained on ImageNet.
Returns:nn.Module instance.
densetorch.nn.resnet.resnet152(pretrained=False, **kwargs)

Constructs the ResNet-152 model.

Parameters:pretrained (bool) – If True, returns a model pre-trained on ImageNet.
Returns:nn.Module instance.
densetorch.nn.xception.xception65(pretrained=False, **kwargs)

Constructs the Xception-65 network.

Parameters:pretrained (bool) – whether to load pre-trained weights.
Returns:nn.Module instance.

densetorch.engine

The engine module contains metrics and losses typically used for the tasks of semantic segmentation and depth estimation. Also contains training and validation functions.

class densetorch.engine.losses.InvHuberLoss(ignore_index=0)

Inverse Huber Loss for depth estimation.

The setup is taken from https://arxiv.org/abs/1606.00373

Parameters:ignore_index (float) – value to ignore in the target when computing the loss.
forward(x, target)

Defines the computation performed at every call.

Should be overridden by all subclasses.

Note

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.

class densetorch.engine.metrics.MeanIoU(num_classes)

Mean-IoU computational block for semantic segmentation.

Parameters:num_classes (int) – number of classes to evaluate.
name

descriptor of the estimator.

Type:str
class densetorch.engine.metrics.RMSE(ignore_val=0)

Root Mean Squared Error computational block for depth estimation.

Parameters:ignore_val (float) – value to ignore in the target when computing the metric.
name

descriptor of the estimator.

Type:str
densetorch.engine.trainval.maybe_cast_target_to_long(target)

Torch losses usually work on Long types

densetorch.engine.trainval.train(model, opts, crits, dataloader, loss_coeffs=(1.0, ), freeze_bn=False, grad_norm=0.0)

Full Training Pipeline.

Supports multiple optimisers, multiple criteria, multiple losses, multiple outputs. Assumes that the model.eval() property has been set up properly before the function call, that the dataloader outputs have the correct type, that the model outputs do not require any post-processing bar the upsampling to the target size. Criteria, loss_coeff, and model’s outputs all must have the same length, and correspond to the same keys as in the ordered dict of dataloader’s sample.

Parameters:
  • model – PyTorch model object.
  • opts – list of optimisers.
  • crits – list of criterions.
  • dataloader – iterable over samples. Each sample must contain image key and >= 1 optional keys.
  • loss_coeffs – list of coefficients for each loss term.
  • freeze_bn – whether to freeze batch norm parameters in the module.
  • grad_norm – if > 0, clip gradients’ norm to this value.
densetorch.engine.trainval.trainbal(model, dataloader)

Full Training Pipeline with balanced model.

Assumes that the model.eval() property has been set up properly before the function call, that the dataloader outputs have the correct type, that the model outputs do not require any post-processing bar the upsampling to the target size.

Parameters:
  • model – PyTorch model object.
  • dataloader – iterable over samples. Each sample must contain image key and >= 1 optional keys.
densetorch.engine.trainval.validate(model, metrics, dataloader)

Full Validation Pipeline.

Support multiple metrics (but 1 per modality), multiple outputs. Assumes that the dataloader outputs have the correct type, that the model outputs do not require any post-processing bar the upsampling to the target size. Metrics and model’s outputs must have the same length, and correspond to the same keys as in the ordered dict of dataloader’s sample.

Parameters:
  • model – PyTorch model object.
  • metrics – list of metric classes. Each metric class must have update and val functions, and must have ‘name’ attribute.
  • dataloader – iterable over samples. Each sample must contain image key and >= 1 optional keys.

densetorch.data

The data module implements datasets and relevant utilities used for data pre-processing. It supports multi-modal data.

class densetorch.data.datasets.MMDataset(data_file, data_dir, line_to_paths_fn, masks_names, transform=None)

Multi-Modality dataset.

Works with any datasets that contain image and any number of 2D-annotations.

Parameters:
  • data_file (string) – Path to the data file with annotations.
  • data_dir (string) – Directory with all the images.
  • line_to_paths_fn (callable) – function to convert a line of data_file into paths (img_relpath, msk1_relpath, msk2_relpath).
  • masks_names (list of strings) – keys for each annotation mask (e.g., ‘segm’, ‘depth’). Must be in the same order as outputs of line_to_paths_fn
  • transform (callable, optional) – Optional transform to be applied on a sample.
static read_image(x)

Simple image reader

Parameters:x (str) – path to image.

Returns image as np.array.

class densetorch.data.utils.Normalise(scale, mean, std, depth_scale=1.0)

Normalise a tensor image with mean and standard deviation. Given mean: (R, G, B) and std: (R, G, B), will normalise each channel of the torch.*Tensor, i.e. channel = (scale * channel - mean) / std

Parameters:
  • scale (float) – Scaling constant.
  • mean (sequence) – Sequence of means for R,G,B channels respecitvely.
  • std (sequence) – Sequence of standard deviations for R,G,B channels respecitvely.
  • depth_scale (float) – Depth divisor for depth annotations.
class densetorch.data.utils.Pad(size, img_val, msk_vals)

Pad image and mask to the desired size.

Parameters:
  • size (int) – minimum length/width.
  • img_val (array) – image padding value.
  • msk_vals (list of ints) – masks padding value.
class densetorch.data.utils.RandomCrop(crop_size)

Crop randomly the image in a sample.

Parameters:crop_size (int) – Desired output size.
class densetorch.data.utils.RandomMirror

Randomly flip the image and the mask

class densetorch.data.utils.ResizeAndScale(side, low_scale, high_scale, shorter=True)

Resize shorter/longer side to a given value and randomly scale.

Parameters:
  • side (int) – shorter / longer side value.
  • low_scale (float) – lower scaling bound.
  • high_scale (float) – upper scaling bound.
  • shorter (bool) – whether to resize shorter / longer side.
class densetorch.data.utils.ToTensor

Convert ndarrays in sample to Tensors.

densetorch.data.utils.albumentations2densetorch(augmentation)

Wrapper to use Albumentations within DenseTorch dataset.

Parameters:augmentation – either a list of augmentations or a single augmentation
Returns:A composition of augmentations
densetorch.data.utils.denormalise(tensor_bchw, scale, mean_c, std_c)

Reversed normalisation

Parameters:
  • tensor_bchw (torch.tensor) – 4D tensor of shape BxCxHxW
  • scale (float) – scale value
  • mean_c (np.ndarray) – mean array of shape (C,)
  • std_c (np.ndarray) – standard deviation array of shape (C,)
Returns:

Un-normalised torch tensor.

densetorch.data.utils.densetorch2torchvision(augmentation)

Wrapper to use DenseTorch augmentations within torchvision dataset.

Parameters:augmentation – either a list of augmentations or a single augmentation
Returns:A composition of augmentations.
densetorch.data.utils.get_loaders(train_batch_size, val_batch_size, train_set, val_set, num_stages=1, num_workers=8, train_shuffle=True, val_shuffle=False, train_pin_memory=False, val_pin_memory=False, train_drop_last=False, val_drop_last=False)

Create train and val loaders

densetorch.misc

The misc module has various useful utilities.

class densetorch.misc.utils.AverageMeter(momentum=0.99)

Simple running average estimator.

Parameters:momentum (float) – running average decay.
update(val)

Update running average given a new value.

The new running average estimate is given as a weighted combination of the previous estimate and the current value.

Parameters:val (float) – new value
class densetorch.misc.utils.Balancer(model, opts, crits, loss_coeffs)

Wrapper for balanced multi-GPU training.

When forward and backward passes are fused into a single nn.Module object, the multi-GPU consumption is distributed more equally across the GPUs.

Parameters:
  • model (nn.Module) – PyTorch module.
  • opts (list or single instance of torch.optim) – optimisers.
  • crits (list or single instance of torch.nn or nn.Module) – criterions.
  • loss_coeffs (list of single instance of float) – loss coefficients.
forward(inp, targets=None)

Forward and (optionally) backward pass.

When targets are provided, the backward pass is performed. Otherwise only the forward pass is done.

Parameters:
  • inp (torch.tensor) – input batch.
  • targets (None or torch.tensor) – targets batch.
Returns:

Forward output if targets=None, else returns the loss value.

class densetorch.misc.utils.Saver(args, ckpt_dir, best_val=0, condition=<function Saver.<lambda>>, save_interval=100, save_several_mode=<built-in function any>)

Saver class for checkpointing the training progress.

maybe_load(ckpt_path, keys_to_load)

Loads existing checkpoint if exists.

Parameters:
  • ckpt_path (str) – path to the checkpoint.
  • keys_to_load (list of str) – keys to load from the checkpoint.

Returns the epoch at which the checkpoint was saved.

maybe_save(new_val, dict_to_save)

Maybe save new checkpoint

densetorch.misc.utils.broadcast(x, num_times)

Given an element, broadcast it number of times and return a list. If it is already a list, only the first element will be copied.

Parameters:
  • x – input.
  • num_times (int) – how many times to copy the element.

Returns list of length num_times.

densetorch.misc.utils.compute_params(model)

Compute the total number of parameters.

Parameters:model (nn.Module) – PyTorch model.
Returns:Total number of parameters - both trainable and non-trainable (int).
densetorch.misc.utils.create_optim(optim_type, parameters, **kwargs)

Initialise optimisers.

Parameters:
  • optim_type (string) – type of optimiser - either ‘SGD’ or ‘Adam’.
  • parameters (iterable) – parameters to be optimised.
Returns:

An instance of torch.optim.

Raises:

ValueError if optim_type is not either of ‘SGD’ or ‘Adam’.

densetorch.misc.utils.create_scheduler(scheduler_type, optim, **kwargs)

Initialise schedulers.

Parameters:
  • scheduler_type (string) – type of scheduler – either ‘poly’ or ‘multistep’.
  • optim (torch.optim) – optimiser to which the scheduler will be applied to.
Returns:

An instance of torch.optim.lr_scheduler

Raises:

ValueError if scheduler_type is not either of ‘poly’ or ‘multistep’.

densetorch.misc.utils.ctime()

Returns current timestamp in the format of hours-minutes-seconds.

densetorch.misc.utils.get_args(func)

Get function’s arguments.

Parameters:func (callable) – input function.
Returns:List of positional and keyword arguments.
densetorch.misc.utils.make_list(x)

Returns the given input as a list.

densetorch.misc.utils.polyschedule(max_epochs, gamma=0.9)

Poly-learning rate policy popularised by DeepLab-v2: https://arxiv.org/abs/1606.00915

Parameters:
  • max_epochs (int) – maximum number of epochs, at which the multiplier becomes zero.
  • gamma (float) – decay factor.
Returns:

Callable that takes the current epoch as an argument and returns the learning rate multiplier.

densetorch.misc.utils.set_seed(seed)

Setting the random seed across torch, numpy and random libraries.

Parameters:seed (int) – random seed value.