loveda.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Copyright (c) OpenMMLab. All rights reserved.
  2. import argparse
  3. import os
  4. import os.path as osp
  5. import shutil
  6. import tempfile
  7. import zipfile
  8. from mmengine.utils import mkdir_or_exist
  9. def parse_args():
  10. parser = argparse.ArgumentParser(
  11. description='Convert LoveDA dataset to mmsegmentation format')
  12. parser.add_argument('dataset_path', help='LoveDA folder path')
  13. parser.add_argument('--tmp_dir', help='path of the temporary directory')
  14. parser.add_argument('-o', '--out_dir', help='output path')
  15. args = parser.parse_args()
  16. return args
  17. def main():
  18. args = parse_args()
  19. dataset_path = args.dataset_path
  20. if args.out_dir is None:
  21. out_dir = osp.join('data', 'loveDA')
  22. else:
  23. out_dir = args.out_dir
  24. print('Making directories...')
  25. mkdir_or_exist(out_dir)
  26. mkdir_or_exist(osp.join(out_dir, 'img_dir'))
  27. mkdir_or_exist(osp.join(out_dir, 'img_dir', 'train'))
  28. mkdir_or_exist(osp.join(out_dir, 'img_dir', 'val'))
  29. mkdir_or_exist(osp.join(out_dir, 'img_dir', 'test'))
  30. mkdir_or_exist(osp.join(out_dir, 'ann_dir'))
  31. mkdir_or_exist(osp.join(out_dir, 'ann_dir', 'train'))
  32. mkdir_or_exist(osp.join(out_dir, 'ann_dir', 'val'))
  33. assert 'Train.zip' in os.listdir(dataset_path), \
  34. f'Train.zip is not in {dataset_path}'
  35. assert 'Val.zip' in os.listdir(dataset_path), \
  36. f'Val.zip is not in {dataset_path}'
  37. assert 'Test.zip' in os.listdir(dataset_path), \
  38. f'Test.zip is not in {dataset_path}'
  39. with tempfile.TemporaryDirectory(dir=args.tmp_dir) as tmp_dir:
  40. for dataset in ['Train', 'Val', 'Test']:
  41. zip_file = zipfile.ZipFile(
  42. os.path.join(dataset_path, dataset + '.zip'))
  43. zip_file.extractall(tmp_dir)
  44. data_type = dataset.lower()
  45. for location in ['Rural', 'Urban']:
  46. for image_type in ['images_png', 'masks_png']:
  47. if image_type == 'images_png':
  48. dst = osp.join(out_dir, 'img_dir', data_type)
  49. else:
  50. dst = osp.join(out_dir, 'ann_dir', data_type)
  51. if dataset == 'Test' and image_type == 'masks_png':
  52. continue
  53. else:
  54. src_dir = osp.join(tmp_dir, dataset, location,
  55. image_type)
  56. src_lst = os.listdir(src_dir)
  57. for file in src_lst:
  58. shutil.move(osp.join(src_dir, file), dst)
  59. print('Removing the temporary files...')
  60. print('Done!')
  61. if __name__ == '__main__':
  62. main()