Hi!
I am currently working on a Convolutional Neural Network architecture that is fed by semantic segmentation. However, semantic segmentation is fed in the form of one hot tensor of size:
BatchSize x NumberClasses x H x W
The code I’m currently to create this is the following:
def make_one_hot(labels, C=151):
'''
Converts an integer label torch image to a one-hot tensor of probabilities.
Parameters
----------
labels : torch.cuda.LongTensor N x 1 x H x W, where N is batch size.
Each value is an integer representing semantic label.
C : integer.
the number of classes in labels.
Returns
-------
target : torch.cuda.FloatTensor N x C x H x W, where C is class number. One-hot encoded.
'''
# Semantic Labels
one_hot = torch.cuda.FloatTensor(labels.size(0), C+1, labels.size(2), labels.size(3)).zero_()
# Create tensor
target = one_hot.scatter_(1, labels, 1)
return target
I was wondering if there is a more memory efficient way to handle this kind of tensors. For instance, is it possible to create from it, a sparse tensor? And if so, is after possible to use a sparse tensor as an input to a CNN?
Thnaks!