Description
🐛 Bug
torchvision.ops.boxes.box_iou works only if (x1,y1) < (x2,y2) and calculates zero IoU otherwise
To Reproduce
Steps to reproduce the behavior:
- Consider a hypothetical bbox array:
hboxes = torch.arange(5,5*25,5).view(-1,4).float(); hboxes
tensor([[ 5., 10., 15., 20.],
[ 25., 30., 35., 40.],
[ 45., 50., 55., 60.],
[ 65., 70., 75., 80.],
[ 85., 90., 95., 100.],
[105., 110., 115., 120.]])
As all the (x1,y1) are less than (x2,y2) in this case, the box_iou
output with itself is a perfect identity matrix
from torchvision.ops.boxes import box_iou
box_iou(hboxes,hboxes)
tensor([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 1., 0.],
[0., 0., 0., 0., 0., 1.]])
- However, if the said condition doesn't hold (x1y1 > x2y2)
hboxes[[2,4],:] = torch.cat([hboxes[[2,4],2:],hboxes[[2,4],:2]],dim=1); hboxes
tensor([[ 5., 10., 15., 20.],
[ 25., 30., 35., 40.],
[ 55., 60., 45., 50.],
[ 65., 70., 75., 80.],
[ 95., 100., 85., 90.],
[105., 110., 115., 120.]])
like the row 2nd and 4th in this case
The box_iou
output is 0
box_iou(hboxes,hboxes)
tensor([[1., 0., 0., 0., 0., 0.],
[0., 1., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1.]])
Expected behavior
The coordinates should be handled beforehand and output for the 2nd case mentioned above should also be an Identity Matrix
Environment
PyTorch version: 1.6.0
Is debug build: No
CUDA used to build PyTorch: 10.2
OS: Manjaro Linux
GCC version: (GCC) 10.1.0
Clang version: Could not collect
CMake version: version 3.17.3
Python version: 3.8 (64-bit runtime)
Is CUDA available: Yes
CUDA runtime version: Could not collect
GPU models and configuration: GPU 0: GeForce 940MX
Nvidia driver version: 440.100
cuDNN version: Could not collect
Versions of relevant libraries:
[pip3] numpy==1.19.1
[pip3] pytorch-lightning==0.7.6
[pip3] torch==1.6.0
[pip3] torchvision==0.7.0
[conda] blas 1.0 mkl
[conda] cudatoolkit 10.2.89 hfd86e86_1
[conda] mkl 2020.1 217
[conda] mkl-service 2.3.0 py38he904b0f_0
[conda] mkl_fft 1.1.0 py38h23d657b_0
[conda] mkl_random 1.1.1 py38h0573a6f_0
[conda] numpy 1.19.1 py38hbc911f0_0
[conda] numpy-base 1.19.1 py38hfa32c7d_0
[conda] pytorch 1.6.0 py3.8_cuda10.2.89_cudnn7.6.5_0 pytorch
[conda] pytorch-lightning 0.7.6 pypi_0 pypi
[conda] torchvision 0.7.0 py38_cu102 pytorch
Willing to work
I'd be glad to fix this behaviour 🙂