open-mmlab / mmrotate

OpenMMLab Rotated Object Detection Toolbox and Benchmark
https://mmrotate.readthedocs.io/en/latest/
Apache License 2.0
1.83k stars 540 forks source link

[Bug] IndexError: list index out of range #818

Open lj-ij opened 1 year ago

lj-ij commented 1 year ago

Prerequisite

Task

I'm using the official example scripts/configs for the officially supported tasks/models/datasets.

Branch

master branch https://github.com/open-mmlab/mmrotate

Environment

sys.platform: linux Python: 3.8.16 (default, Mar 2 2023, 03:21:46) [GCC 11.2.0] CUDA available: True GPU 0,1,2,3,4: NVIDIA GeForce RTX 3090 CUDA_HOME: /usr/local/cuda-11.2 GCC: gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 PyTorch: 1.13.1 PyTorch compiling details: PyTorch built with:

TorchVision: 0.14.1 OpenCV: 4.3.0 MMCV: 1.7.0 MMCV Compiler: GCC 9.3 MMCV CUDA Compiler: 11.6 MMRotate: 0.3.4+7755aa5

Reproduces the problem - code sample

i just train it on my own datasets

Reproduces the problem - command or script

python tools/train.py --work-dir work-dir/run/oriented-rcnn/

Reproduces the problem - error message

File "tools/train.py", line 192, in main() File "tools/train.py", line 181, in main train_detector( File "/data/liujin/mmrotate/mmrotate/apis/train.py", line 141, in train_detector runner.run(data_loaders, cfg.workflow) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], **kwargs) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train self.call_hook('after_train_epoch') File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch self._do_evaluate(runner) File "/data/liujin/.local/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/data/liujin/mmrotate/mmrotate/datasets/dota.py", line 201, in evaluate meanap, = eval_rbbox_map( File "/data/liujin/mmrotate/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range

Additional information

I want to train this on my own datasets

yangxue0827 commented 1 year ago

Check your datast path.

zytx121 commented 1 year ago

Hi @lj-ij, please check the num_classes is the same as your own dataset.

lj-ij commented 1 year ago

Check your datast path.

I also change my datasets path located at /data/liujin/mmrotate/configs/base/datasets/dotav1.py, is any other files need to be changed?Thank you!

lj-ij commented 1 year ago

Hi @lj-ij, please check the num_classes is the same as your own dataset.

hi, I have tried to checked my num_classes, it seems that the only one place need to be changed, it is in this way mmrotate/configs/oriented_rcnn/oriented_rcnn_r50_fpn_1x_dota_le90.py line 59.Is any other place need to be changed?Thank you for your reply!

RenzhiDaDa commented 1 year ago

Hi @lj-ij, please check the num_classes is the same as your own dataset.

hi, I have tried to checked my num_classes, it seems that the only one place need to be changed, it is in this way mmrotate/configs/oriented_rcnn/oriented_rcnn_r50_fpn_1x_dota_le90.py line 59.Is any other place need to be changed?Thank you for your reply!

Hi,if the name and the numbers of your dataset have changed, you should also change "./mmrotate/datasets/dota.py" . I think "CLASSES" should be changed.

TogetherYH commented 1 year ago

2023-07-20 22:03:08,521 - mmrotate - INFO - Epoch [1][12750/12799] lr: 2.000e-04, eta: 10:36:31, time: 0.267, data_time: 0.002, memory: 8735, loss_rpn_cls: 0.0439, loss_rpn_bbox: 0.1248, loss_cls: 0.2421, acc: 91.7148, loss_bbox: 0.2481, loss: 0.6590, grad_norm: 4.3835 2023-07-20 22:03:21,565 - mmrotate - INFO - Saving checkpoint at 1 epochs completed: 0, elapsed: 0sTraceback (most recent call last): File "tools/train.py", line 192, in main() File "tools/train.py", line 181, in main train_detector( File "/home/gfzx/yh/LSKNet-main/mmrotate/apis/train.py", line 141, in train_detector runner.run(data_loaders, cfg.workflow) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], **kwargs) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train self.call_hook('after_train_epoch') File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch self._do_evaluate(runner) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/home/gfzx/yh/LSKNet-main/mmrotate/datasets/dota.py", line 201, in evaluate meanap, = eval_rbbox_map( File "/home/gfzx/yh/LSKNet-main/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range

I had the same problem, using DOTAv1.0 data set, the num_classes that should have been changed have been changed. May I ask what else is the reason

TogetherYH commented 1 year ago

2023-07-20 22:03:08,521 - mmrotate - INFO - Epoch [1][12750/12799] lr: 2.000e-04, eta: 10:36:31, time: 0.267, data_time: 0.002, memory: 8735, loss_rpn_cls: 0.0439, loss_rpn_bbox: 0.1248, loss_cls: 0.2421, acc: 91.7148, loss_bbox: 0.2481, loss: 0.6590, grad_norm: 4.3835 2023-07-20 22:03:21,565 - mmrotate - INFO - Saving checkpoint at 1 epochs completed: 0, elapsed: 0sTraceback (most recent call last): File "tools/train.py", line 192, in main() File "tools/train.py", line 181, in main train_detector( File "/home/gfzx/yh/LSKNet-main/mmrotate/apis/train.py", line 141, in train_detector runner.run(data_loaders, cfg.workflow) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], **kwargs) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train self.call_hook('after_train_epoch') File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch self._do_evaluate(runner) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/home/gfzx/yh/LSKNet-main/mmrotate/datasets/dota.py", line 201, in evaluate meanap, = eval_rbbox_map( File "/home/gfzx/yh/LSKNet-main/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range

I had the same problem, using DOTAv1.0 data set, the num_classes that should have been changed have been changed. May I ask what else is the reason

已解决,缺少了验证集

getup201 commented 1 year ago

2023-07-20 22:03:08,521 - mmrotate - INFO - Epoch [1][12750/12799] lr: 2.000e-04, eta: 10:36:31, time: 0.267, data_time: 0.002, memory: 8735, loss_rpn_cls: 0.0439, loss_rpn_bbox: 0.1248, loss_cls: 0.2421, acc: 91.7148, loss_bbox: 0.2481, loss: 0.6590, grad_norm: 4.3835 2023-07-20 22:03:21,565 - mmrotate - INFO - Saving checkpoint at 1 epochs completed: 0, elapsed: 0sTraceback (most recent call last): File "tools/train.py", line 192, in main() File "tools/train.py", line 181, in main train_detector( File "/home/gfzx/yh/LSKNet-main/mmrotate/apis/train.py", line 141, in train_detector runner.run(data_loaders, cfg.workflow) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], kwargs) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train self.call_hook('after_train_epoch') File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch self._do_evaluate(runner) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/home/gfzx/yh/LSKNet-main/mmrotate/datasets/dota.py", line 201, in evaluate meanap, = eval_rbbox_map( File "/home/gfzx/yh/LSKNet-main/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range I had the same problem, using DOTAv1.0 data set, the num_classes that should have been changed have been changed. May I ask what else is the reason**

已解决,缺少了验证集

你好,剪裁后的dota数据集是trainval,这样的话算缺少验证集吗,是还有加个val文件夹吗

CrazyBrick commented 9 months ago

2023-07-20 22:03:08,521 - mmrotate - INFO - Epoch [1][12750/12799] lr: 2.000e-04, eta: 10:36:31, time: 0.267, data_time: 0.002, memory: 8735, loss_rpn_cls: 0.0439, loss_rpn_bbox: 0.1248, loss_cls: 0.2421, acc: 91.7148, loss_bbox: 0.2481, loss: 0.6590, grad_norm: 4.3835 2023-07-20 22:03:21,565 - mmrotate - INFO - Saving checkpoint at 1 epochs completed: 0, elapsed: 0sTraceback (most recent call last): File "tools/train.py", line 192, in main() File "tools/train.py", line 181, in main train_detector( File "/home/gfzx/yh/LSKNet-main/mmrotate/apis/train.py", line 141, in train_detector runner.run(data_loaders, cfg.workflow) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 136, in run epoch_runner(data_loaders[i], kwargs) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 58, in train self.call_hook('after_train_epoch') File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 271, in after_train_epoch self._do_evaluate(runner) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/home/gfzx/anaconda3/envs/yh_openmmlab/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/home/gfzx/yh/LSKNet-main/mmrotate/datasets/dota.py", line 201, in evaluate meanap, = eval_rbbox_map( File "/home/gfzx/yh/LSKNet-main/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range I had the same problem, using DOTAv1.0 data set, the num_classes that should have been changed have been changed. May I ask what else is the reason**

已解决,缺少了验证集

你好,剪裁后的dota数据集是trainval,这样的话算缺少验证集吗,是还有加个val文件夹吗

yes,you need to generate folder val for every validation after one epoch

huzhuoxuan commented 9 months ago

load checkpoint from local path: model_weight/latest.pth Traceback (most recent call last): File "tools/test.py", line 251, in main() File "tools/test.py", line 240, in main metric = dataset.evaluate(outputs, **eval_kwargs) File "/DATA/huzhuoxuan/anaconda3/envs/openmmlab/lib/python3.7/site-packages/mmrotate/datasets/dota.py", line 208, in evaluate nproc=nproc) File "/DATA/huzhuoxuan/anaconda3/envs/openmmlab/lib/python3.7/site-packages/mmrotate/core/evaluation/eval_map.py", line 169, in eval_rbbox_map num_classes = len(det_results[0]) # positive class num IndexError: list index out of range

I confirmed that the path and num_classes of my data set are correct. Why is this error still reported? How should I solve it?