torchgeo
torchgeo copied to clipboard
Kornia raises ValueError: Invalid input tensor, it is empty.
Description
If a mask is empty (i.e. a scene with no annotations) kornia will raise
ValueError: Invalid input tensor, it is empty.
I've tried patching this in the get_item, but the transform happens in the on_after_batch I believe. I think it is desirable to handle these empty chips somehow
Steps to reproduce
Use Instance segmentation dataset with a chip that is clear of annotations
Version
0.7.0
Full trace
File "/teamspace/studios/this_studio/hawkeye/lightning_ai/cli.py", line 143, in <module>
run(obj={})
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/core.py", line 1442, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/core.py", line 1363, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/core.py", line 1830, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/core.py", line 794, in invoke
return callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/click/decorators.py", line 34, in new_func
return f(get_current_context(), *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/teamspace/studios/this_studio/hawkeye/lightning_ai/cli.py", line 121, in train
run_trainer(lightning_cli.model, lightning_cli.trainer, lightning_cli.datamodule)
File "/teamspace/studios/this_studio/hawkeye/lightning_ai/cli.py", line 112, in run_trainer
lightning_cli.trainer.fit(model, datamodule=datamodule)
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py", line 561, in fit
call._call_and_handle_interrupt(
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/call.py", line 48, in _call_and_handle_interrupt
return trainer_fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py", line 599, in _fit_impl
self._run(model, ckpt_path=ckpt_path)
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py", line 1012, in _run
results = self._run_stage()
^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py", line 1056, in _run_stage
self.fit_loop.run()
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/loops/fit_loop.py", line 216, in run
self.advance()
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/loops/fit_loop.py", line 455, in advance
self.epoch_loop.run(self._data_fetcher)
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/loops/training_epoch_loop.py", line 150, in run
self.advance(data_fetcher)
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/loops/training_epoch_loop.py", line 293, in advance
batch = call._call_strategy_hook(trainer, "batch_to_device", batch, dataloader_idx=0)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/call.py", line 328, in _call_strategy_hook
output = fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/strategies/strategy.py", line 278, in batch_to_device
return model._apply_batch_transfer_handler(batch, device=device, dataloader_idx=dataloader_idx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/core/module.py", line 353, in _apply_batch_transfer_handler
batch = self._call_batch_hook("on_after_batch_transfer", batch, dataloader_idx)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/core/module.py", line 341, in _call_batch_hook
return trainer_method(trainer, hook_name, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/lightning/pytorch/trainer/call.py", line 198, in _call_lightning_datamodule_hook
return fn(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/torchgeo/datamodules/geo.py", line 141, in on_after_batch_transfer
batch = aug(batch)
^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/container/augment.py", line 516, in __call__
_output_image = decorated_forward(*inputs, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/core/module.py", line 81, in wrapper
tensor_outputs = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1751, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1762, in _call_impl
return forward_call(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/container/augment.py", line 465, in forward
outputs = self.transform_op.transform( # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/container/ops.py", line 153, in transform
outputs.append(MaskSequentialOps.transform_list(inp, module, param=param, extra_args=extra_arg))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/container/ops.py", line 335, in transform_list
tfm_inp = module.transform_masks(
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/base.py", line 362, in transform_masks
output = self.apply_transform_mask(in_tensor, params, flags, transform=transform)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/_2d/geometric/base.py", line 92, in apply_transform_mask
output = self.apply_transform(input, params, flags, transform)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/augmentation/_2d/geometric/resize.py", line 87, in apply_transform
out[i] = resize(
^^^^^^^
File "/home/zeus/miniconda3/envs/cloudspace/lib/python3.11/site-packages/kornia/utils/image.py", line 292, in _wrapper
raise ValueError("Invalid input tensor, it is empty.")
ValueError: Invalid input tensor, it is empty.
Hmm, wonder if we should fix this in Kornia somehow or in TorchGeo...