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.