def forward(self, fmap, rois, union_inds):
        union_pools = union_boxes(fmap, rois, union_inds, pooling_size=self.pooling_size, stride=self.stride)
        if not self.use_feats:
            return union_pools.detach()

        pair_rois = torch.cat((rois[:, 1:][union_inds[:, 0]], rois[:, 1:][union_inds[:, 1]]),1).data.cpu().numpy()
        # rects_np = get_rect_features(pair_rois, self.pooling_size*2-1) - 0.5
        x1_union = np.minimum(pair_rois[:, 0], pair_rois[:, 4])
        y1_union = np.minimum(pair_rois[:, 1], pair_rois[:, 5])
        x2_union = np.maximum(pair_rois[:, 2], pair_rois[:, 6])
        y2_union = np.maximum(pair_rois[:, 3], pair_rois[:, 7])
        w = x2_union - x1_union
        h = y2_union - y1_union
        w0 = np.where(w==0)[0]
        h0 = np.where(h==0)[0]
        if w0.shape[0]>0:
          print ('w==0 at ', w0)
        if h0.shape[0]>0:
          print ('h==0 at ', h0)
        pair_rois[np.where(w==0), 6] = x1_union[np.where(w==0)] + 1.
        pair_rois[np.where(h==0), 7] = y1_union[np.where(h==0)] + 1.
        rects_np = draw_union_boxes(pair_rois, self.pooling_size*4-1) - 0.5
        rects = Variable(torch.FloatTensor(rects_np).cuda(fmap.get_device()), volatile=fmap.volatile)
        if self.concat:
            return torch.cat((union_pools, self.conv(rects)), 1)
        return union_pools + self.conv(rects)
Exemple #2
0
    def forward(self, fmap, rois, union_inds):

        union_pools = union_boxes(fmap,
                                  rois,
                                  union_inds,
                                  pooling_size=self.pooling_size,
                                  stride=self.stride)
        if not self.use_feats:
            return union_pools.detach()

        pair_rois = torch.cat(
            (rois[:, 1:][union_inds[:, 0]], rois[:, 1:][union_inds[:, 1]]),
            1).data.cpu().numpy()
        # rects_np = get_rect_features(pair_rois, self.pooling_size*2-1) - 0.5
        rects_np = draw_union_boxes(pair_rois, self.pooling_size * 4 - 1) - 0.5
        rects = Variable(torch.FloatTensor(rects_np).cuda(fmap.get_device()),
                         volatile=fmap.volatile)
        if self.concat:
            return torch.cat((union_pools, self.conv(rects)), 1)

        if conf.rl_offdropout:
            self.conv[2].training = False
            self.conv[6].training = False

        return union_pools + self.conv(rects)
Exemple #3
0
    def forward(self, fmap, rois, union_inds, use_feats=True):

        union_S_pools, union_O_pools = new_union_boxes(
            fmap,
            rois,
            union_inds,
            pooling_size=self.pooling_size,
            stride=self.stride)

        if use_feats:
            pair_rois = torch.cat(
                (rois[union_inds[:, 0]], rois[union_inds[:, 1]]),
                1).data.cpu().numpy()
            # rects_np = get_rect_features(pair_rois, self.pooling_size*2-1) - 0.5
            rects_np = draw_union_boxes(pair_rois,
                                        self.pooling_size * 4 - 1) - 0.5
            rects = Variable(torch.FloatTensor(rects_np).cuda(
                fmap.get_device()),
                             volatile=fmap.volatile)

            return union_S_pools, union_O_pools, self.conv(rects)
        else:
            return union_S_pools, union_O_pools, None