def find_image_size(dataset: Sequence[tuple[Image.Image, Any]], **kwargs: Any) -> None:
"""Computes the best image size target for a given set of images
Args:
dataset: an iterator yielding a [`PIL.Image.Image`][PIL.Image.Image] and a target object
kwargs: keyword args of [`matplotlib.pyplot.show`][matplotlib.pyplot.show]
"""
# Record height & width
shapes_ = parallel(lambda x: x[0].size, dataset, progress=True)
shapes = np.asarray(shapes_)[:, ::-1]
ratios = shapes[:, 0] / shapes[:, 1]
sides = np.sqrt(shapes[:, 0] * shapes[:, 1])
# Compute median aspect ratio & side
median_ratio = np.median(ratios)
median_side = np.median(sides)
height = round(median_side * sqrt(median_ratio))
width = round(median_side / sqrt(median_ratio))
# Double histogram
fig, axes = plt.subplots(1, 2)
axes[0].hist(ratios, bins=30, alpha=0.7)
axes[0].title.set_text(f"Aspect ratio (median: {median_ratio:.2})")
axes[0].grid(True, linestyle="--", axis="x")
axes[0].axvline(median_ratio, color="r")
axes[1].hist(sides, bins=30, alpha=0.7)
axes[1].title.set_text(f"Side (median: {int(median_side)})")
axes[1].grid(True, linestyle="--", axis="x")
axes[1].axvline(median_side, color="r")
fig.suptitle(f"Median image size: ({height}, {width})")
plt.show(**kwargs)