Skip to content

evaluation

plot_overlap_result(df, max_bins=30, show=True, output=None, output_size=(1600, 900))

Generates plot for train config evaluation based on overlap.

Parameters:

Name Type Description Default
df DataFrame

COCO annotations generated DataFrame with overlap.

required
max_bins int

Max bins to use in histograms. Defaults to 30.

30
show bool

Whether to show the figure or not. Defaults to True.

True
output Optional[str]

Output path folder. Defaults to None.

None
output_size Tuple[int, int]

Size of saved images. Defaults to (1600, 900).

(1600, 900)
Source code in pyodi/plots/evaluation.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
def plot_overlap_result(
    df: DataFrame,
    max_bins: int = 30,
    show: bool = True,
    output: Optional[str] = None,
    output_size: Tuple[int, int] = (1600, 900),
) -> None:
    """Generates plot for train config evaluation based on overlap.

    Args:
        df: COCO annotations generated DataFrame with overlap.
        max_bins: Max bins to use in histograms. Defaults to 30.
        show: Whether to show the figure or not. Defaults to True.
        output: Output path folder. Defaults to None.
        output_size: Size of saved images. Defaults to (1600, 900).

    """
    fig = make_subplots(
        rows=2,
        cols=2,
        subplot_titles=(
            "Cumulative overlap distribution",
            "Bounding Box Distribution",
            "Scale and mean overlap",
            "Log Ratio and mean overlap",
        ),
    )

    fig.append_trace(
        go.Histogram(
            x=df["overlaps"],
            histnorm="probability",
            cumulative_enabled=True,
            showlegend=False,
        ),
        row=1,
        col=1,
    )

    fig.append_trace(
        go.Scattergl(
            x=df["scaled_width"],
            y=df["scaled_height"],
            mode="markers",
            showlegend=False,
            marker=dict(
                color=df["overlaps"],
                colorscale="Electric",
                cmin=0,
                cmax=1,
                showscale=True,
                colorbar=dict(
                    title="Overlap value", lenmode="fraction", len=0.5, y=0.8
                ),
            ),
        ),
        row=1,
        col=2,
    )

    for i, column in enumerate(["scaled_scale", "log_scaled_ratio"], 1):
        fig.append_trace(
            go.Histogram(
                x=df[column],
                y=df["overlaps"],
                histfunc="avg",
                nbinsx=max_bins,
                showlegend=False,
            ),
            row=2,
            col=i,
        )

    fig["layout"].update(
        title="Train config evaluation",
        xaxis=dict(title="Overlap values"),
        xaxis2=dict(title="Scaled width"),
        xaxis3=dict(title="Scale"),
        xaxis4=dict(title="Log Ratio"),
        yaxis=dict(title="Accumulated percentage"),
        yaxis2=dict(title="Scaled heigh"),
        yaxis3=dict(title="Mean overlap"),
        yaxis4=dict(title="Mean overlap"),
        legend=dict(y=0.5),
    )

    if show:
        fig.show()

    if output:
        save_figure(fig, "overlap", output, output_size)