odinw_text_only.yaml 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. # @package _global_
  2. defaults:
  3. - _self_
  4. # ============================================================================
  5. # Paths Configuration (Chage this to your own paths)
  6. # ============================================================================
  7. # python sam3/train/train.py -c configs/odinw_text_only.yaml --use-cluster 1 --partition ${PARTITION} --account ${ACCOUNT} --qos ${QoS}
  8. paths:
  9. odinw_data_root: <YOUR_DATA_DIR>
  10. experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
  11. bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
  12. supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}}
  13. # Validation transforms pipeline
  14. val_transforms:
  15. - _target_: sam3.train.transforms.basic_for_api.ComposeAPI
  16. transforms:
  17. - _target_: sam3.train.transforms.basic_for_api.RandomResizeAPI
  18. sizes: ${scratch.resolution}
  19. max_size:
  20. _target_: sam3.train.transforms.basic.get_random_resize_max_size
  21. size: ${scratch.resolution}
  22. square: true
  23. consistent_transform: False
  24. - _target_: sam3.train.transforms.basic_for_api.ToTensorAPI
  25. - _target_: sam3.train.transforms.basic_for_api.NormalizeAPI
  26. mean: ${scratch.val_norm_mean}
  27. std: ${scratch.val_norm_std}
  28. # ============================================================================
  29. # Different helper parameters and functions
  30. # ============================================================================
  31. scratch:
  32. enable_segmentation: True
  33. # Box processing
  34. use_presence_eval: True
  35. original_box_postprocessor:
  36. _target_: sam3.eval.postprocessors.PostProcessImage
  37. max_dets_per_img: -1 # infinite detections
  38. use_original_ids: true
  39. use_original_sizes_box: true
  40. use_presence: ${scratch.use_presence_eval}
  41. # Image processing parameters
  42. resolution: 1008
  43. # Normalization parameters
  44. val_norm_mean: [0.5, 0.5, 0.5]
  45. val_norm_std: [0.5, 0.5, 0.5]
  46. # Training parameters
  47. val_batch_size: 2
  48. num_val_workers: 0
  49. gather_pred_via_filesys: false
  50. # ============================================================================
  51. # Trainer Configuration
  52. # ============================================================================
  53. trainer:
  54. _target_: sam3.train.trainer.Trainer
  55. skip_saving_ckpts: true
  56. empty_gpu_mem_cache_after_eval: True
  57. max_epochs: 1
  58. accelerator: cuda
  59. seed_value: 123
  60. mode: val
  61. distributed:
  62. backend: nccl
  63. find_unused_parameters: True
  64. gradient_as_bucket_view: True
  65. loss:
  66. default:
  67. _target_: sam3.train.loss.sam3_loss.DummyLoss
  68. data:
  69. val:
  70. _target_: sam3.train.data.torch_dataset.TorchDataset
  71. dataset:
  72. _target_: sam3.train.data.sam3_image_dataset.Sam3ImageDataset
  73. coco_json_loader:
  74. _target_: sam3.train.data.coco_json_loaders.COCO_FROM_JSON
  75. prompts: ${odinw35_prompts.${supercategory_tuple.name}}
  76. include_negatives: true
  77. category_chunk_size: 20 # Note: Since we are doing AP +ve we need to include all categories!
  78. _partial_: true
  79. img_folder: ${paths.odinw_data_root}/${supercategory_tuple.val.img_folder}
  80. ann_file:
  81. _target_: sam3.eval.coco_reindex.reindex_coco_to_temp
  82. input_json_path: ${paths.odinw_data_root}/${supercategory_tuple.val.json}
  83. transforms: ${val_transforms}
  84. max_ann_per_img: 100000
  85. multiplier: 1
  86. training: false
  87. shuffle: False
  88. batch_size: ${scratch.val_batch_size}
  89. num_workers: ${scratch.num_val_workers}
  90. pin_memory: False
  91. drop_last: False
  92. collate_fn:
  93. _target_: sam3.train.data.collator.collate_fn_api
  94. _partial_: true
  95. repeats: 1
  96. dict_key: odinw35
  97. model:
  98. _target_: sam3.model_builder.build_sam3_image_model
  99. bpe_path: ${paths.bpe_path}
  100. device: cpus
  101. eval_mode: true # Set to false if training
  102. enable_segmentation: ${scratch.enable_segmentation} # Warning: Enable this if using segmentation.
  103. meters:
  104. val:
  105. odinw35:
  106. detection:
  107. _target_: sam3.eval.coco_writer.PredictionDumper
  108. iou_type: "bbox"
  109. dump_dir: ${launcher.experiment_log_dir}/dumps/odinw/${supercategory_tuple.name}
  110. merge_predictions: True
  111. postprocessor: ${scratch.original_box_postprocessor}
  112. gather_pred_via_filesys: ${scratch.gather_pred_via_filesys}
  113. maxdets: 100
  114. pred_file_evaluators:
  115. - _target_: sam3.eval.coco_eval_offline.CocoEvaluatorOfflineWithPredFileEvaluators
  116. gt_path:
  117. _target_: sam3.eval.coco_reindex.reindex_coco_to_temp
  118. input_json_path: ${paths.odinw_data_root}/${supercategory_tuple.val.json}
  119. tide: False
  120. iou_type: "bbox"
  121. positive_split: False
  122. checkpoint:
  123. save_dir: ${launcher.experiment_log_dir}/checkpoints
  124. save_freq: 0 # 0 only last checkpoint is saved.
  125. logging:
  126. tensorboard_writer:
  127. _target_: sam3.train.utils.logger.make_tensorboard_logger
  128. log_dir: ${launcher.experiment_log_dir}/tensorboard
  129. flush_secs: 120
  130. should_log: True
  131. wandb_writer: null
  132. log_dir: ${launcher.experiment_log_dir}/logs/${supercategory_tuple.name}
  133. log_freq: 10
  134. # ============================================================================
  135. # Launcher and Submitit Configuration
  136. # ============================================================================
  137. launcher:
  138. num_nodes: 1
  139. gpus_per_node: 2
  140. experiment_log_dir: ${paths.experiment_log_dir}
  141. multiprocessing_context: forkserver
  142. submitit:
  143. account: null
  144. partition: null
  145. qos: null
  146. timeout_hour: 72
  147. use_cluster: True
  148. cpus_per_task: 10
  149. port_range: [10000, 65000]
  150. constraint: null
  151. job_array:
  152. num_tasks: 13
  153. task_index: 0
  154. # ============================================================================
  155. # ODinW13 Supercategories
  156. # ============================================================================
  157. all_odinw_supercategories:
  158. - name: AerialMaritimeDrone_large
  159. val:
  160. img_folder: AerialMaritimeDrone/large/test/
  161. json: AerialMaritimeDrone/large/test/annotations_without_background.json
  162. - name: Aquarium
  163. val:
  164. img_folder: Aquarium/Aquarium Combined.v2-raw-1024.coco/test/
  165. json: Aquarium/Aquarium Combined.v2-raw-1024.coco/test/annotations_without_background.json
  166. - name: CottontailRabbits
  167. val:
  168. img_folder: CottontailRabbits/test/
  169. json: CottontailRabbits/test/annotations_without_background.json
  170. - name: EgoHands_generic
  171. val:
  172. img_folder: EgoHands/generic/test/
  173. json: EgoHands/generic/test/annotations_without_background.json
  174. - name: NorthAmericaMushrooms
  175. val:
  176. img_folder: NorthAmericaMushrooms/North American Mushrooms.v1-416x416.coco/test/
  177. json: NorthAmericaMushrooms/North American Mushrooms.v1-416x416.coco/test/annotations_without_background.json
  178. - name: Packages
  179. val:
  180. img_folder: Packages/Raw/test/
  181. json: Packages/Raw/test/annotations_without_background.json
  182. - name: PascalVOC
  183. val:
  184. img_folder: PascalVOC/valid/
  185. json: PascalVOC/valid/annotations_without_background.json
  186. - name: Raccoon
  187. val:
  188. img_folder: Raccoon/Raccoon.v2-raw.coco/test/
  189. json: Raccoon/Raccoon.v2-raw.coco/test/annotations_without_background.json
  190. - name: ShellfishOpenImages
  191. val:
  192. img_folder: ShellfishOpenImages/raw/test/
  193. json: ShellfishOpenImages/raw/test/annotations_without_background.json
  194. - name: VehiclesOpenImages
  195. val:
  196. img_folder: VehiclesOpenImages/416x416/test/
  197. json: VehiclesOpenImages/416x416/test/annotations_without_background.json
  198. - name: pistols
  199. val:
  200. img_folder: pistols/export/
  201. json: pistols/export/test_annotations_without_background.json
  202. - name: pothole
  203. val:
  204. img_folder: pothole/test/
  205. json: pothole/test/annotations_without_background.json
  206. - name: thermalDogsAndPeople
  207. val:
  208. img_folder: thermalDogsAndPeople/test/
  209. json: thermalDogsAndPeople/test/annotations_without_background.json
  210. odinw35_prompts:
  211. AerialMaritimeDrone_large: '[{"id": 1, "name": "boat", "supercategory": "movable-objects"},
  212. {"id": 2, "name": "car", "supercategory": "movable-objects"}, {"id": 3, "name": "dock",
  213. "supercategory": "movable-objects"}, {"id": 4, "name": "jet ski", "supercategory": "movable-objects"},
  214. {"id": 5, "name": "boat lift", "supercategory": "movable-objects"}]'
  215. Aquarium: null
  216. CottontailRabbits: null
  217. EgoHands_generic: null
  218. NorthAmericaMushrooms: '[{''id'': 1, ''name'':
  219. ''chicken of the woods'', ''supercategory'': ''mushroom''}, {''id'': 2, ''name'': ''chanterelle'', ''supercategory'': ''mushroom''}]'
  220. Packages: null
  221. PascalVOC: null
  222. Raccoon: null
  223. ShellfishOpenImages: null
  224. VehiclesOpenImages: null
  225. pistols: null
  226. pothole: null
  227. thermalDogsAndPeople: null