nyu.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # Copyright (c) OpenMMLab. All rights reserved.
  2. import argparse
  3. import os.path as osp
  4. import shutil
  5. import tempfile
  6. import zipfile
  7. from mmengine.utils import mkdir_or_exist
  8. def parse_args():
  9. parser = argparse.ArgumentParser(
  10. description='Convert NYU Depth dataset to mmsegmentation format')
  11. parser.add_argument('raw_data', help='the path of raw data')
  12. parser.add_argument(
  13. '-o', '--out_dir', help='output path', default='./data/nyu')
  14. args = parser.parse_args()
  15. return args
  16. def reorganize(raw_data_dir: str, out_dir: str):
  17. """Reorganize NYU Depth dataset files into the required directory
  18. structure.
  19. Args:
  20. raw_data_dir (str): Path to the raw data directory.
  21. out_dir (str): Output directory for the organized dataset.
  22. """
  23. def move_data(data_list, dst_prefix, fname_func):
  24. """Move data files from source to destination directory.
  25. Args:
  26. data_list (list): List of data file paths.
  27. dst_prefix (str): Prefix to be added to destination paths.
  28. fname_func (callable): Function to process file names
  29. """
  30. for data_item in data_list:
  31. data_item = data_item.strip().strip('/')
  32. new_item = fname_func(data_item)
  33. shutil.move(
  34. osp.join(raw_data_dir, data_item),
  35. osp.join(out_dir, dst_prefix, new_item))
  36. def process_phase(phase):
  37. """Process a dataset phase (e.g., 'train' or 'test')."""
  38. with open(osp.join(raw_data_dir, f'nyu_{phase}.txt')) as f:
  39. data = filter(lambda x: len(x.strip()) > 0, f.readlines())
  40. data = map(lambda x: x.split()[:2], data)
  41. images, annos = zip(*data)
  42. move_data(images, f'images/{phase}',
  43. lambda x: x.replace('/rgb', ''))
  44. move_data(annos, f'annotations/{phase}',
  45. lambda x: x.replace('/sync_depth', ''))
  46. process_phase('train')
  47. process_phase('test')
  48. def main():
  49. args = parse_args()
  50. print('Making directories...')
  51. mkdir_or_exist(args.out_dir)
  52. for subdir in [
  53. 'images/train', 'images/test', 'annotations/train',
  54. 'annotations/test'
  55. ]:
  56. mkdir_or_exist(osp.join(args.out_dir, subdir))
  57. print('Generating images and annotations...')
  58. if args.raw_data.endswith('.zip'):
  59. with tempfile.TemporaryDirectory() as tmp_dir:
  60. zip_file = zipfile.ZipFile(args.raw_data)
  61. zip_file.extractall(tmp_dir)
  62. reorganize(osp.join(tmp_dir, 'nyu'), args.out_dir)
  63. else:
  64. assert osp.isdir(
  65. args.raw_data
  66. ), 'the argument --raw-data should be either a zip file or directory.'
  67. reorganize(args.raw_data, args.out_dir)
  68. print('Done!')
  69. if __name__ == '__main__':
  70. main()