операции pytorch: объединение и инверсия значений в тензоре torch

#python-3.x #opencv #image-processing #pytorch #tensor

#python-3.x #opencv #обработка изображений #pytorch #тензор

Вопрос:

У меня есть набор масок на cuda / GPU, соответствующих различным объектам на изображении (формы и размеры приведены ниже)

 masks.shape:            torch.Size([10, 240, 320, 1])
masks[0].shape:         torch.Size([240, 320, 1])
masks[0][:,:,0].shape:  torch.Size([240, 320])
  

1. Могу ли я выполнить объединение этих масок с помощью операции torch.tensor? чтобы я мог применить все это один раз к изображению?

2. Как мне инвертировать значения в тензоре факела? Я имею в виду, что 1 превращается в 0 и наоборот. Я пытался ~mytensor, но он говорит, что оператор применим только к целочисленным или булевым значениям. У меня есть значения с плавающей запятой в моих тензорах, т.Е. [1.] и т.д.

Я намерен выполнять все эти операции на графическом процессоре без переноса данных обратно на процессор.

Спасибо.

Комментарии:

1. 1. (torch.sum(masks, dim = 0) > 0).astype(‘float’) сделает свое дело

Ответ №1:

2. Как мне инвертировать значения в тензоре факела?

 t = torch.tensor([1., 0., 0., 1., 0., 1., 1.])
  

Вы можете вычесть значения из 1, если не хотите менять тип

 1 - t
tensor([0., 1., 1., 0., 1., 0., 0.])
  

Или лучше, вы можете преобразовать его в логический тип, а затем использовать ~

 ~t.type(torch.bool)
tensor([False,  True,  True, False,  True, False, False])