Argoverse.yaml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
  2. # Argoverse-HD dataset (ring-front-center camera) https://www.cs.cmu.edu/~mengtial/proj/streaming/ by Argo AI
  3. # Documentation: https://docs.ultralytics.com/datasets/detect/argoverse/
  4. # Example usage: yolo train data=Argoverse.yaml
  5. # parent
  6. # ├── ultralytics
  7. # └── datasets
  8. # └── Argoverse ← downloads here (31.5 GB)
  9. # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
  10. path: ../datasets/Argoverse # dataset root dir
  11. train: Argoverse-1.1/images/train/ # train images (relative to 'path') 39384 images
  12. val: Argoverse-1.1/images/val/ # val images (relative to 'path') 15062 images
  13. test: Argoverse-1.1/images/test/ # test images (optional) https://eval.ai/web/challenges/challenge-page/800/overview
  14. # Classes
  15. names:
  16. 0: person
  17. 1: bicycle
  18. 2: car
  19. 3: motorcycle
  20. 4: bus
  21. 5: truck
  22. 6: traffic_light
  23. 7: stop_sign
  24. # Download script/URL (optional) ---------------------------------------------------------------------------------------
  25. download: |
  26. import json
  27. from tqdm import tqdm
  28. from ultralytics.utils.downloads import download
  29. from pathlib import Path
  30. def argoverse2yolo(set):
  31. labels = {}
  32. a = json.load(open(set, "rb"))
  33. for annot in tqdm(a['annotations'], desc=f"Converting {set} to YOLOv5 format..."):
  34. img_id = annot['image_id']
  35. img_name = a['images'][img_id]['name']
  36. img_label_name = f'{img_name[:-3]}txt'
  37. cls = annot['category_id'] # instance class id
  38. x_center, y_center, width, height = annot['bbox']
  39. x_center = (x_center + width / 2) / 1920.0 # offset and scale
  40. y_center = (y_center + height / 2) / 1200.0 # offset and scale
  41. width /= 1920.0 # scale
  42. height /= 1200.0 # scale
  43. img_dir = set.parents[2] / 'Argoverse-1.1' / 'labels' / a['seq_dirs'][a['images'][annot['image_id']]['sid']]
  44. if not img_dir.exists():
  45. img_dir.mkdir(parents=True, exist_ok=True)
  46. k = str(img_dir / img_label_name)
  47. if k not in labels:
  48. labels[k] = []
  49. labels[k].append(f"{cls} {x_center} {y_center} {width} {height}\n")
  50. for k in labels:
  51. with open(k, "w") as f:
  52. f.writelines(labels[k])
  53. # Download 'https://argoverse-hd.s3.us-east-2.amazonaws.com/Argoverse-HD-Full.zip' (deprecated S3 link)
  54. dir = Path(yaml['path']) # dataset root dir
  55. urls = ['https://drive.google.com/file/d/1st9qW3BeIwQsnR0t8mRpvbsSWIo16ACi/view?usp=drive_link']
  56. print("\n\nWARNING: Argoverse dataset MUST be downloaded manually, autodownload will NOT work.")
  57. print(f"WARNING: Manually download Argoverse dataset '{urls[0]}' to '{dir}' and re-run your command.\n\n")
  58. # download(urls, dir=dir)
  59. # Convert
  60. annotations_dir = 'Argoverse-HD/annotations/'
  61. (dir / 'Argoverse-1.1' / 'tracking').rename(dir / 'Argoverse-1.1' / 'images') # rename 'tracking' to 'images'
  62. for d in "train.json", "val.json":
  63. argoverse2yolo(dir / annotations_dir / d) # convert Argoverse annotations to YOLO labels