micro_sam.evaluation.experiments
Predefined experiment settings for experiments with different prompt strategies.
1"""Predefined experiment settings for experiments with different prompt strategies. 2""" 3 4from typing import Dict, List, Optional 5 6 7# TODO fully define the dict type 8ExperimentSetting = Dict 9ExperimentSettings = List[ExperimentSetting] 10"""@private""" 11 12 13def full_experiment_settings( 14 use_boxes: bool = False, positive_range: Optional[List[int]] = None, negative_range: Optional[List[int]] = None, 15) -> ExperimentSettings: 16 """The full experiment settings. 17 18 Args: 19 use_boxes: Whether to run the experiments with or without boxes. 20 positive_range: The different number of positive points that will be used. 21 By defaul the values are set to [1, 2, 4, 8, 16]. 22 negative_range: The different number of negative points that will be used. 23 By defaul the values are set to [0, 1, 2, 4, 8, 16]. 24 25 Returns: 26 The list of experiment settings. 27 """ 28 experiment_settings = [] 29 if use_boxes: 30 experiment_settings.append( 31 {"use_points": False, "use_boxes": True, "n_positives": 0, "n_negatives": 0} 32 ) 33 34 # set default values for the ranges if none were passed 35 if positive_range is None: 36 positive_range = [1, 2, 4, 8, 16] 37 if negative_range is None: 38 negative_range = [0, 1, 2, 4, 8, 16] 39 40 for n_positives in positive_range: 41 for n_negatives in negative_range: 42 if n_positives == 0 and n_negatives == 0: 43 continue 44 experiment_settings.append( 45 {"use_points": True, "use_boxes": use_boxes, "n_positives": n_positives, "n_negatives": n_negatives} 46 ) 47 48 return experiment_settings 49 50 51def default_experiment_settings() -> ExperimentSettings: 52 """The three default experiment settings. 53 54 For the default experiments we use a single positive prompt, 55 two positive and four negative prompts and box prompts. 56 57 Returns: 58 The list of experiment settings. 59 """ 60 experiment_settings = [ 61 {"use_points": True, "use_boxes": False, "n_positives": 1, "n_negatives": 0}, # p1-n0 62 {"use_points": True, "use_boxes": False, "n_positives": 2, "n_negatives": 4}, # p2-n4 63 {"use_points": True, "use_boxes": False, "n_positives": 4, "n_negatives": 8}, # p4-n8 64 {"use_points": False, "use_boxes": True, "n_positives": 0, "n_negatives": 0}, # only box prompts 65 ] 66 return experiment_settings 67 68 69def get_experiment_setting_name(setting: ExperimentSetting) -> str: 70 """Get the name for the given experiment setting. 71 72 Args: 73 setting: The experiment setting. 74 Returns: 75 The name for this experiment setting. 76 """ 77 use_points, use_boxes = setting["use_points"], setting["use_boxes"] 78 assert use_points or use_boxes 79 prefix = "points" if use_points else "box" 80 pos, neg = setting["n_positives"], setting["n_negatives"] 81 name = f"p{pos}-n{neg}" if use_points else "p0-n0" 82 return f"{prefix}/{name}"
ExperimentSetting =
typing.Dict
def
full_experiment_settings( use_boxes: bool = False, positive_range: Optional[List[int]] = None, negative_range: Optional[List[int]] = None) -> List[Dict]:
14def full_experiment_settings( 15 use_boxes: bool = False, positive_range: Optional[List[int]] = None, negative_range: Optional[List[int]] = None, 16) -> ExperimentSettings: 17 """The full experiment settings. 18 19 Args: 20 use_boxes: Whether to run the experiments with or without boxes. 21 positive_range: The different number of positive points that will be used. 22 By defaul the values are set to [1, 2, 4, 8, 16]. 23 negative_range: The different number of negative points that will be used. 24 By defaul the values are set to [0, 1, 2, 4, 8, 16]. 25 26 Returns: 27 The list of experiment settings. 28 """ 29 experiment_settings = [] 30 if use_boxes: 31 experiment_settings.append( 32 {"use_points": False, "use_boxes": True, "n_positives": 0, "n_negatives": 0} 33 ) 34 35 # set default values for the ranges if none were passed 36 if positive_range is None: 37 positive_range = [1, 2, 4, 8, 16] 38 if negative_range is None: 39 negative_range = [0, 1, 2, 4, 8, 16] 40 41 for n_positives in positive_range: 42 for n_negatives in negative_range: 43 if n_positives == 0 and n_negatives == 0: 44 continue 45 experiment_settings.append( 46 {"use_points": True, "use_boxes": use_boxes, "n_positives": n_positives, "n_negatives": n_negatives} 47 ) 48 49 return experiment_settings
The full experiment settings.
Arguments:
- use_boxes: Whether to run the experiments with or without boxes.
- positive_range: The different number of positive points that will be used. By defaul the values are set to [1, 2, 4, 8, 16].
- negative_range: The different number of negative points that will be used. By defaul the values are set to [0, 1, 2, 4, 8, 16].
Returns:
The list of experiment settings.
def
default_experiment_settings() -> List[Dict]:
52def default_experiment_settings() -> ExperimentSettings: 53 """The three default experiment settings. 54 55 For the default experiments we use a single positive prompt, 56 two positive and four negative prompts and box prompts. 57 58 Returns: 59 The list of experiment settings. 60 """ 61 experiment_settings = [ 62 {"use_points": True, "use_boxes": False, "n_positives": 1, "n_negatives": 0}, # p1-n0 63 {"use_points": True, "use_boxes": False, "n_positives": 2, "n_negatives": 4}, # p2-n4 64 {"use_points": True, "use_boxes": False, "n_positives": 4, "n_negatives": 8}, # p4-n8 65 {"use_points": False, "use_boxes": True, "n_positives": 0, "n_negatives": 0}, # only box prompts 66 ] 67 return experiment_settings
The three default experiment settings.
For the default experiments we use a single positive prompt, two positive and four negative prompts and box prompts.
Returns:
The list of experiment settings.
def
get_experiment_setting_name(setting: Dict) -> str:
70def get_experiment_setting_name(setting: ExperimentSetting) -> str: 71 """Get the name for the given experiment setting. 72 73 Args: 74 setting: The experiment setting. 75 Returns: 76 The name for this experiment setting. 77 """ 78 use_points, use_boxes = setting["use_points"], setting["use_boxes"] 79 assert use_points or use_boxes 80 prefix = "points" if use_points else "box" 81 pos, neg = setting["n_positives"], setting["n_negatives"] 82 name = f"p{pos}-n{neg}" if use_points else "p0-n0" 83 return f"{prefix}/{name}"
Get the name for the given experiment setting.
Arguments:
- setting: The experiment setting.
Returns:
The name for this experiment setting.