torchcv
torchcv copied to clipboard
Corner case of box_nms
https://github.com/kuangliu/torchcv/blob/6291f3e1e4bbf6467fd6b1e79001d34a59481bb6/torchcv/utils/box.py#L128
When overlap
contains only 1 element, ids
will be a 0-dimensional tensor, which will cause dimension mismatch later.
Examples:
>>> (torch.Tensor([0.1, 0.2, 0.6]) < 0.45).nonzero().squeeze()
tensor([0, 1])
>>> (torch.Tensor([0.1]) < 0.45).nonzero().squeeze()
tensor(0)
>>> (torch.Tensor([0.6]) < 0.45).nonzero().squeeze()
tensor([], dtype=torch.int64)
It's when (overlap<=threshold).nonzero()
contains only 1 element, more accurately.
And adding dim=1
will fix it:
ids = (overlap<=threshold).nonzero().squeeze(dim=1)
Examples:
>>> (torch.Tensor([0.6, 0.1, 0.2]) < 0.45).nonzero().squeeze(dim=1)
tensor([1, 2])
>>> (torch.Tensor([0.1, 0.6]) < 0.45).nonzero().squeeze(dim=1)
tensor([0])
>>> (torch.Tensor([0.6, 0.1]) < 0.45).nonzero().squeeze(dim=1)
tensor([1])
>>> (torch.Tensor([0.1]) < 0.45).nonzero().squeeze(dim=1)
tensor([0])