open-mmlab / mmrotate

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

[Bug] a bug about data preprocess #835

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

ll rename the package names mmcv to mmcv-lite and mmcv-full to mmcv. See https://github.com/open-mmlab/mmcv/blob/master/docs/en/compatibility.md for more details. warnings.warn( 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.7.1+cu110 PyTorch compiling details: PyTorch built with:

TorchVision: 0.8.2+cu110 OpenCV: 4.1.2 MMCV: 1.7.1 MMCV Compiler: GCC 7.3 MMCV CUDA Compiler: 11.0 MMRotate: 0.3.4+7755aa5

Reproduces the problem - code sample

I have some problem with https://mmrotate.readthedocs.io/en/latest/tutorials/customize_config.html#. When tried to append the data preparation method such as RMosaic into my model. First I change the document in dotav1.py. and I also change the document in oriented_rcnn_r50_fpn_1x_dota_le90.py.But it was not worked and a bug was occured.Here is the document which has been changed. In dotav1.py the following two line has been added into the train_pipeline dict(type='RMosaic', img_size=(1024,1024)), dict(type='RRandomCrop', crop_size=(1024,1024)), same change in in oriented_rcnn_r50_fpn_1x_dota_le90.py

Reproduces the problem - command or script

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

Reproduces the problem - error message

Traceback (most recent call last): File "tools/train.py", line 192, in main() File "tools/train.py", line 85, in main cfg = Config.fromfile(args.config) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/config.py", line 340, in fromfile cfg_dict, cfg_text = Config._file2dict(filename, File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/config.py", line 207, in _file2dict Config._validate_py_syntax(filename) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/config.py", line 105, in _validate_py_syntax raise SyntaxError('There are syntax errors in config ' SyntaxError: There are syntax errors in config file /data/liujin/mmrotate/configs/oriented_rcnn/oriented_rcnn_r50_fpn_1x_dota_le90.py: invalid character in identifier (, line 138) Exception ignored in: <function _TemporaryFileCloser.del at 0x7f2e521588b0> Traceback (most recent call last): File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/tempfile.py", line 440, in del self.close() File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/tempfile.py", line 436, in close unlink(self.name) FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpwi0w127t/tmp_ql3plzv.py'

Additional information

The RMosaic is expected to be added in the train process.What should I do, I has read the tutorial, but I can not understand it, thank you!

lj-ij commented 1 year ago

when I only append dict(type='RMosaic') to the document, a new bug occured. Traceback (most recent call last): 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 49, in train for i, data_batch in enumerate(self.data_loader): File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 435, in next data = self._next_data() File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1085, in _next_data return self._process_data(data) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1111, in _process_data data.reraise() File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/_utils.py", line 428, in reraise raise self.exc_type(msg) AssertionError: Caught AssertionError in DataLoader worker process 0. Original Traceback (most recent call last): File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", line 198, in _worker_loop data = fetcher.fetch(index) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch data = [self.dataset[idx] for idx in possibly_batched_index] File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/_utils/fetch.py", line 44, in data = [self.dataset[idx] for idx in possibly_batched_index] File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmdet/datasets/custom.py", line 220, in getitem data = self.prepare_train_img(idx) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmdet/datasets/custom.py", line 243, in prepare_train_img return self.pipeline(results) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmdet/datasets/pipelines/compose.py", line 41, in call data = t(data) File "/data/liujin/miniconda3/envs/openmmlab/lib/python3.8/site-packages/mmdet/datasets/pipelines/transforms.py", line 2042, in call results = self._mosaic_transform(results) File "/data/liujin/mmrotate/mmrotate/datasets/pipelines/transforms.py", line 469, in _mosaic_transform assert 'mix_results' in results AssertionError

zytx121 commented 1 year ago

Hi @lj-ij, please use 1.x branch for using Mosaic. And you can refer to https://github.com/open-mmlab/mmrotate/blob/8b305251a05967f3cb88ad6322b8ed3742a5d56a/configs/rotated_rtmdet/rotated_rtmdet_l-100e-aug-dota.py#L82 for the detail.

lj-ij commented 1 year ago

Thanks! is there any other way of data augmentation, such as mixup, can be used in mmrotate, I search it in the transformer.py, but found nothing.