mmrotate icon indicating copy to clipboard operation
mmrotate copied to clipboard

[Bug] IndexError: list index out of range

Open lj-ij opened this issue 1 year ago • 10 comments

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:

  • GCC 9.3
  • C++ Version: 201402
  • Intel(R) oneAPI Math Kernel Library Version 2021.4-Product Build 20210904 for Intel(R) 64 architecture applications
  • Intel(R) MKL-DNN v2.6.0 (Git Hash 52b5f107dd9cf10910aaa19cb47f3abf9b349815)
  • OpenMP 201511 (a.k.a. OpenMP 4.5)
  • LAPACK is enabled (usually provided by MKL)
  • NNPACK is enabled
  • CPU capability usage: AVX2
  • CUDA Runtime 11.6
  • NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_37,code=compute_37
  • CuDNN 8.3.2 (built against CUDA 11.5)
  • Magma 2.6.1
  • Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.6, CUDNN_VERSION=8.3.2, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -DEDGE_PROFILER_USE_KINETO -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.13.1, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF,

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 mean_ap, _ = 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

lj-ij avatar Apr 17 '23 07:04 lj-ij

Check your datast path.

yangxue0827 avatar Apr 17 '23 13:04 yangxue0827

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

zytx121 avatar Apr 17 '23 14:04 zytx121

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 avatar Apr 18 '23 02:04 lj-ij

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!

lj-ij avatar Apr 18 '23 02:04 lj-ij

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.

RenzhiDaDa avatar Jun 09 '23 02:06 RenzhiDaDa

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 mean_ap, _ = 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 avatar Jul 20 '23 14:07 TogetherYH

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 mean_ap, _ = 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 avatar Jul 21 '23 01:07 TogetherYH

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 mean_ap, _ = 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文件夹吗

getup201 avatar Sep 06 '23 02:09 getup201

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 mean_ap, _ = 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

CrazyBrick avatar Dec 01 '23 04:12 CrazyBrick

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?

huzhuoxuan avatar Dec 06 '23 13:12 huzhuoxuan