Cyril666's picture
First model version
6250360
import torch
# transpose
FLIP_LEFT_RIGHT = 0
FLIP_TOP_BOTTOM = 1
all_types = [[1,2,3,4],[1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[1,4,3,2],\
[2,1,3,4],[2,1,4,3],[2,3,1,4],[2,3,4,1],[2,4,1,3],[2,4,3,1],\
[3,1,2,4],[3,1,4,2],[3,2,1,4],[3,2,4,1],[3,4,1,2],[3,4,2,1],\
[4,1,2,3],[4,1,3,2],[4,2,1,3],[4,2,3,1],[4,3,1,2],[4,3,2,1]]
aty= [[all_types[iat][0]-1,all_types[iat][1]-1,all_types[iat][2]-1,all_types[iat][3]-1] for iat in range(24)]
class MTY(object):
def __init__(self, mty, size, mode=None):
# FIXME remove check once we have better integration with device
# in my version this would consistently return a CPU tensor
device = mty.device if isinstance(mty, torch.Tensor) else torch.device('cpu')
mty = torch.as_tensor(mty, dtype=torch.int64, device=device)
# TODO should I split them?
assert(len(mty.size()) == 1), str(mty.size())
self.mty = mty
self.size = size
self.mode = mode
def crop(self, box):
w, h = box[2] - box[0], box[3] - box[1]
return type(self)(self.mty, (w, h), self.mode)
def resize(self, size, *args, **kwargs):
return type(self)(self.mty, size, self.mode)
def transpose(self, method):
if method not in (FLIP_LEFT_RIGHT,):
raise NotImplementedError(
"Only FLIP_LEFT_RIGHT implemented")
flipped_data = self.mty.clone()
for i in range(self.mty.size()[0]):
revs = [it for it in aty[self.mty[i]]]
revs.reverse()
flip_type = aty.index(revs)
flipped_data[i] = flip_type
return type(self)(flipped_data, self.size, self.mode)
def to(self, *args, **kwargs):
return type(self)(self.mty.to(*args, **kwargs), self.size, self.mode)
def __getitem__(self, item):
return type(self)(self.mty[item], self.size, self.mode)
def __repr__(self):
s = self.__class__.__name__ + '('
s += 'num_instances={}, '.format(len(self.mty))
s += 'image_width={}, '.format(self.size[0])
s += 'image_height={})'.format(self.size[1])
return s