Beispiel #1
0
    def get_hard_samples(self, hm_pred, wh_pred, reg_pred, gt_hm, gt_inds,
                         gt_bboxes, num_levels, down_ratios):
        #op last layer of HG
        hm_pred = hm_pred[num_levels]
        wh_pred = wh_pred[num_levels]
        reg_pred = reg_pred[num_levels]
        gt_hm = gt_hm[num_levels]
        gt_inds = gt_inds[num_levels]
        down_ratio = down_ratios[num_levels]
        batch, cat, height, width = hm_pred.size()
        hard_bboxes_pred, hard_gt_bbox = [], []
        hard_hm_pred, hard_gt_hm = [], []

        for i in range(batch):
            _gt_hm = gt_hm[i].unsqueeze(0)
            _hm_pred = hm_pred[i].unsqueeze(0)
            _gt_bbox = gt_bboxes[i] / down_ratio[0]  ## WARNING: hard code
            _reg_pred = reg_pred[i].unsqueeze(0)
            _wh_pred = wh_pred[i].unsqueeze(0)
            K = gt_bboxes[i].shape[0]  #number of gt

            gt_box_inds = gt_inds[i][:K].unsqueeze(0)
            ys = (gt_box_inds / width).int().float()
            xs = (gt_box_inds % width).int().float()

            # decode pred_boxes according to the gt_hm
            _reg_pred = transpose_and_gather_feat(_reg_pred, gt_box_inds)
            _reg_pred = _reg_pred.view(1, K, 2)
            xs = xs.view(1, K, 1) + _reg_pred[:, :, 0:1]
            ys = ys.view(1, K, 1) + _reg_pred[:, :, 1:2]
            _wh_pred = transpose_and_gather_feat(_wh_pred, gt_box_inds)
            _wh_pred = _wh_pred.view(1, K, 2)
            bboxes_pred = torch.cat([
                xs - _wh_pred[..., 0:1] / 2, ys - _wh_pred[..., 1:2] / 2,
                xs + _wh_pred[..., 0:1] / 2, ys + _wh_pred[..., 1:2] / 2
            ],
                                    dim=2)
            bboxes_pred = bboxes_pred.squeeze(0)
            hard_gt_bbox.append(_gt_bbox)
            hard_bboxes_pred.append(bboxes_pred)

            # hm dynamic_training
            _gt_hm = transpose_and_gather_feat(_gt_hm,
                                               gt_box_inds)  #([1, K, cat])
            _hm_pred = transpose_and_gather_feat(_hm_pred,
                                                 gt_box_inds)  #([1, K, cat])
            hard_gt_hm.append(_gt_hm)
            hard_hm_pred.append(_hm_pred)

        return hard_bboxes_pred, hard_gt_bbox, hard_hm_pred, hard_gt_hm
Beispiel #2
0
 def forward(self, output, mask, ind, target):
     pred = transpose_and_gather_feat(output, ind)
     mask = mask.unsqueeze(2).expand_as(pred).float()
     loss = F.l1_loss(pred * mask,
                      target * mask,
                      reduction='elementwise_mean')
     return loss
Beispiel #3
0
 def forward(self, output, mask, ind, target):
     pred = transpose_and_gather_feat(output, ind)
     mask = mask.float()
     # loss = F.l1_loss(pred * mask, target * mask, reduction='elementwise_mean')
     loss = F.l1_loss(pred * mask, target * mask, size_average=False)
     loss = loss / (mask.sum() + 1e-4)
     return loss
Beispiel #4
0
 def forward(self, output, mask, ind, target):
     pred = transpose_and_gather_feat(output, ind)
     mask = mask.unsqueeze(2).expand_as(pred).float()
     # loss = F.l1_loss(pred * mask, target * mask, reduction='elementwise_mean')
     pred = pred / (target + 1e-4)
     target = target * 0 + 1
     loss = F.l1_loss(pred * mask, target * mask, size_average=False)
     loss = loss / (mask.sum() + 1e-4)
     return loss
Beispiel #5
0
 def forward(self, output, mask, ind, rotbin, rotres):
     pred = transpose_and_gather_feat(output, ind)
     loss = compute_rot_loss(pred, rotbin, rotres, mask)
     return loss
Beispiel #6
0
 def forward(self, output, mask, ind, target):
     pred = transpose_and_gather_feat(output, ind)
     loss = _reg_loss(pred, target, mask)
     return loss