манипулирование тензорным индексом с помощью "..." - PullRequest
1 голос
/ 18 июня 2020

Привет, я новичок в Pytorch и тензорах torch. Я читаю код yolo_v3 и сталкиваюсь с этим вопросом. Я думаю, что это связано с тензорной индексацией с помощью ..., но поиск ... в Google затруднен, поэтому я решил задать его здесь. Код:

        prediction = (
            x.view(num_samples, self.num_anchors, self.num_classes + 5, grid_size, grid_size)
            .permute(0, 1, 3, 4, 2)
            .contiguous()
        )
        print (prediction.shape)
        # Get outputs
        x = torch.sigmoid(prediction[..., 0])  # Center x
        y = torch.sigmoid(prediction[..., 1])  # Center y
        w = prediction[..., 2]  # Width
        h = prediction[..., 3]  # Height
        pred_conf = torch.sigmoid(prediction[..., 4])  # Conf
        pred_cls = torch.sigmoid(prediction[..., 5:])  # Cls pred.

Насколько я понимаю, прогноз будет тензором с формой [пакет, привязка, x_grid, y_grid, class]. Но что делает предсказание [..., x] (x = 0,1,2,3,4,5)? Это похоже на индексирование numpy [:, x]? Если да, то вычисление x, y, w, h, pred_conf и pred_cls не имеет смысла.

1 Ответ

0 голосов
/ 18 июня 2020

Это звонок Ellipsis. В нем указаны неуказанные размеры ndarray или tensor.

Здесь, если prediction форма равна [batch, anchor, x_grid, y_grid, class], то

prediction[..., 0] # is equivalent to prediction[:,:,:,:,0]
prediction[..., 1] # is equivalent to prediction[:,:,:,:,1]

Подробнее

prediction[0, ..., 0] # equivalent to prediction[0,:,:,:,0]

Вы также можете написать ... как Ellipsis

prediction[Ellipsis, 0]
...