API Reference

alpharotate.utils

densely_coded_label

alpharotate.utils.densely_coded_label.angle_label_decode(angle_encode_label, angle_range, omega=1.0, mode=0)[source]

Decode binary/gray label back to angle label

Parameters
  • angle_encode_label – binary/gray label

  • angle_label – angle label, range in [-90,0) or [-180, 0)

  • angle_range – 90 or 180

  • mode – 0: binary label, 1: gray label

Returns

angle label

alpharotate.utils.densely_coded_label.angle_label_encode(angle_label, angle_range, omega=1.0, mode=0)[source]

Encode angle label as binary/gray label

Parameters
  • angle_label – angle label, range in [-90,0) or [-180, 0)

  • angle_range – 90 or 180

  • omega – angle discretization granularity

  • mode – 0: binary label, 1: gray label

Returns

binary/gray label

Dense Coded Label: Proposed by “Xue Yang et al. Dense Label Encoding for Boundary Discontinuity Free Rotation Detection. CVPR 2021.”

../_images/dcl_1.png ../_images/dcl_2.png
alpharotate.utils.densely_coded_label.binary_label_decode(binary_label, angle_range, omega=1.0)[source]

Decode binary label back to angle label

Parameters
  • binary_label – binary label

  • angle_range – 90 or 180

  • omega – angle discretization granularity

Returns

angle label

alpharotate.utils.densely_coded_label.binary_label_encode(angle_label, angle_range, omega=1.0)[source]

Encode angle label as binary label

Parameters
  • angle_label – angle label, range in [-90,0) or [-180, 0)

  • angle_range – 90 or 180

  • omega – angle discretization granularity

Returns

binary label

alpharotate.utils.densely_coded_label.get_all_binary_label(num_label, class_range)[source]

Get all binary label according to num_label

Parameters
  • num_label – angle_range/omega, 90/omega or 180/omega

  • class_range – angle_range/omega, 90/omega or 180/omega

Returns

all binary label

alpharotate.utils.densely_coded_label.get_all_gray_label(angle_range)[source]

Get all gray label

Parameters

angle_range – 90/omega or 180/omega

Returns

all gray label

alpharotate.utils.densely_coded_label.get_code_len(class_range, mode=0)[source]

Get encode length

Parameters
  • class_range – angle_range/omega

  • mode – 0: binary label, 1: gray label

Returns

encode length

alpharotate.utils.densely_coded_label.gray_label_decode(gray_label, angle_range, omega=1.0)[source]

Decode gray label back to angle label

Parameters
  • gray_label – gray label

  • angle_range – 90 or 180

  • omega – angle discretization granularity

Returns

angle label

alpharotate.utils.densely_coded_label.gray_label_encode(angle_label, angle_range, omega=1.0)[source]

Encode angle label as gray label

Parameters
  • angle_label – angle label, range in [-90,0) or [-180, 0)

  • angle_range – 90 or 180

  • omega – angle discretization granularity

Returns

gray label

smooth_label

alpharotate.utils.smooth_label.angle_smooth_label(angle_label, angle_range=90, label_type=0, radius=4, omega=1)[source]
Parameters
  • angle_label – angle label, range in [-90,0) or [-180, 0)

  • angle_range – 90 or 180

  • label_type – 0: gaussian label, 1: rectangular label, 2: pulse label, 3: triangle label

  • radius – window radius

  • omega – angle discretization granularity

Returns

Circular Smooth Label: Proposed by “Xue Yang et al. Arbitrary-Oriented Object Detection with Circular Smooth Label. ECCV 2020.”

../_images/csl.jpg
alpharotate.utils.smooth_label.gaussian_label(label, num_class, u=0, sig=4.0)[source]

Get gaussian label

Parameters
  • label – angle_label/omega

  • num_class – angle_range/omega

  • u – mean

  • sig – window radius

Returns

gaussian label

alpharotate.utils.smooth_label.pulse_label(label, num_class)[source]

Get pulse label

Parameters
  • label – angle_label/omega

  • num_class – angle_range/omega

Returns

pulse label

alpharotate.utils.smooth_label.rectangular_label(label, num_class, radius=4)[source]

Get rectangular label

Parameters
  • label – angle_label/omega

  • num_class – angle_range/omega

  • radius – window radius

Returns

rectangular label

alpharotate.utils.smooth_label.triangle_label(label, num_class, radius=4)[source]

Get triangle label

Parameters
  • label – angle_label/omega

  • num_class – angle_range/omega

  • radius – window radius

Returns

triangle label

gaussian_metric

alpharotate.utils.gaussian_metric.box2gaussian(boxes1, boxes2)[source]

Convert box \((x,y,w,h, heta)\) to Gaussian distribution \((\mathbf \mu, \mathbf \Sigma)\)

Parameters
  • boxes1\((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), [-1, 5]

  • boxes2\((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), [-1, 5]

Returns

\((\mathbf \mu, \mathbf \Sigma)\)

alpharotate.utils.gaussian_metric.gaussian_kullback_leibler_divergence(boxes1, boxes2)[source]

Calculate the kullback-leibler divergence between boxes1 and boxes2

Parameters
  • boxes1\((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), shape: [-1, 5]

  • boxes2\((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), shape: [-1, 5]

Returns

kullback-leibler divergence, \(\mathbf D_{kl}\)

alpharotate.utils.gaussian_metric.gaussian_wasserstein_distance(boxes1, boxes2)[source]

Calculate the wasserstein distance between boxes1 and boxes2: \(\mathbf D_{w} = ||\mathbf \mu_{1} - \mathbf \mu_{2}||^{2}_{2} + \mathbf Tr(\mathbf \Sigma_{1} + \mathbf \Sigma_{2} - 2(\mathbf \Sigma_{1}^{1/2}\mathbf \Sigma_{2}\mathbf \Sigma_{1}^{1/2})^{1/2})\)

Parameters
  • boxes1\((x_{1},y_{1},w_{1},h_{1}, heta_{1})\), shape: [-1, 5]

  • boxes2\((x_{2},y_{2},w_{2},h_{2}, heta_{2})\), shape: [-1, 5]

Returns

wasserstein distance, \(\mathbf D_{w}\)

alpharotate.utils.gaussian_metric.kullback_leibler_divergence(mu1, mu2, mu1_T, mu2_T, sigma1, sigma2)[source]

Calculate the kullback-leibler divergence between two Gaussian distributions : \(\mathbf D_{kl} = 0.5*((\mathbf \mu_{1}-\mathbf \mu_{2})^T \mathbf \Sigma_{2}^{1/2}(\mathbf \mu_{1}-\mathbf \mu_{2})+0.5*\mathbf Tr(\mathbf \Sigma_{2}^{-1} \mathbf \Sigma_{1})+0.5*\ln |\mathbf \Sigma_{2}|/|\mathbf \Sigma_{1}| -1\)

Parameters
  • mu1 – mean \((\mu_{1})\) of the Gaussian distribution, shape: [-1, 1, 2]

  • mu2 – mean \((\mu_{2})\) of the Gaussian distribution, shape: [-1, 1, 2]

  • mu1_T – transposition of \((\mu_{1})\), shape: [-1, 2, 1]

  • mu2_T – transposition of \((\mu_{2})\), shape: [-1, 2, 1]

  • sigma1 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]

  • sigma2 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]

Returns

kullback-leibler divergence, \(\mathbf D_{kl}\)

alpharotate.utils.gaussian_metric.wasserstein_distance_item2(sigma1, sigma2)[source]

Calculate the second term of wasserstein distance: \(\mathbf Tr(\mathbf \Sigma_{1} + \mathbf \Sigma_{2} - 2(\mathbf \Sigma_{1}^{1/2}\mathbf \Sigma_{2}\mathbf \Sigma_{1}^{1/2})^{1/2})\)

Parameters
  • sigma1 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]

  • sigma2 – covariance \((\Sigma_{1})\) of the Gaussian distribution, shape: [-1, 2, 2]

Returns

the second term of wasserstein distance